netlib.narod.ru< Назад | Оглавление | Далее >

Преобразования

Итак, мы узнали, как разместить объекты в трехмерном пространстве. Мы можем задать вершины, используя вершины определить грани, а из граней создать сетку. Теперь нам необходимо узнать способы изменять положение существующих объектов. Есть три основных операции, которые могут использоваться для изменения положения объекта в пространстве: перемещение (translate), масштабирование (scale) и вращение (rotate). Используя эти три операции, мы можем переместить объект в любое место и придать ему любую ориентацию.

Прежде чем мы продолжим, давайте создадим простую сцену, которая будет применяться при обсуждении операций перемещения, масштабирования и вращения. Мы будем использовать простую сетку — куб. Центр нашего куба будет совпадать с началом координат, а размеры всех его граней будут равны 1. Такой куб показан на рис. 2.11.


Рис. 2.11. Куб для изучения преобразований

Рис. 2.11. Куб для изучения преобразований


Заметьте, что поскольку центр куба совпадает с началом координат, стороны куба отстоят от центра на 1/2 единицы в каждом направлении вдоль каждой из осей координат. Также отметим, что каждая грань (каждая сторона куба) перпендикулярна пересекающей ее оси.

Перемещение

Давайте попробуем переместить наш куб вверх от начала координат на две единицы. Мы можем выполнить это, используя перемещение <0, 2, 0>. Результат изображен на рис. 2.12.


Рис. 2.12. Куб после перемещения 0,2,0

Рис. 2.12. Куб после перемещения <0, 2, 0>


Объекты могут быть перемещены по нескольким осям одновременно с использованием одной операции, так что нет необходимости выполнять отдельные операции для сдвига объекта вдоль каждой из осей. Например, перемещение <2, 2, 0> передвинет куб на две единицы вправо и на две единицы вверх.

Масштабирование

Выполнение операции масштабирования над сеткой или гранью изменяет ее размер и местоположение. Сначала давайте посмотрим, как с помощью операции масштабирования можно изменить размеры объекта. Если мы возьмем наш куб, размерами 1x1x1 и произведем операцию масштабирования с коэффициентом 1/2, длина каждой грани нашего куба станет равна 1/2 (получим куб размером 1/2x1/2x1/2). Если же мы используем коэффициент масштабирования, равный 2, то мы удвоим размеры нашего куба, получив куб с размером каждой грани 2 единицы (то есть куб размерами 2x2x2). На рис. 2.13. показаны результаты рассмотренных операций масштабирования.


Рис. 2.13. Результаты масштабирования куба размерами 1x1x1 с коэффициентами 1/2 и 2

Рис. 2.13. Результаты масштабирования куба размерами 1x1x1 с коэффициентами 1/2 и 2


Как упоминалось ранее, операция масштабирования также изменяет местоположение объекта. На рис. 2.13 центр куба совпадает с началом координат. Если бы этого не было, то операция масштабирования повлияла и на местоположение куба и на его размер. Операция масштабирования не увеличивает непосредственно объект: она проводится над вершинами объекта. Когда коэффициент масштабирования больше 1, вершины удаляются от начала координат. Когда коэффициент масштабирования меньше 1, вершины приближаются к началу координат. На рис. 2.14 показан результат операции масштабирования с теми же коэффициентами, что и на рис. 2.13, но исходный куб был сдвинут вправо по оси Y и куб, полученный в результате операции масштабирования, располагается дальше от начала координат.


Рис. 2.14. Перемещение и изменение размеров куба в результате операции масштабирования

Рис. 2.14. Перемещение и изменение размеров куба в результате операции масштабирования


Часто этот эффект нежелателен, если нам необходимо масштабировать объект без изменения его местоположения. В этом случае мы перемешаем объект в начало координат, масштабируем его и возвращаем на прежнее место. Некоторые графические системы (включая Direct3D) допускают операции масштабирования, которые изменяют размеры объекта без изменения его местоположения, независимо от того, совпадает ли центр объекта с началом координат. Эта операция выполняется путем использования локальных, или объектных, осей координат. Масштабирование объекта с использованием локальных осей производит тот же эффект, что и масштабирование объекта, центр которого совпадает с началом координат: размеры объекта изменяются, а его местоположение (координаты центра объекта) остается неизменным. По умолчанию Direct3D при операции масштабирования использует локальные оси координат объекта.

Мы можем задавать различные коэффициенты масштабирования для каждой из осей. Это позволяет растягивать и сжимать объекты. Коэффициент масштабирования, равный 1, не оказывает влияния на вершины объекта, таким образом, коэффициент 1 может использоваться для оси, вдоль которой размер объекта не должен изменяться. Если мы выполним с нашим исходным кубом операцию масштабирования с коэффициентами <2, 1, 1>, то мы в два раза увеличим ширину куба, не меняя остальных его размеров. Результат этой операции можно увидеть на рис. 2.15.


Рис. 2.15. Результат операции масштабирования с коэффициентами 2,1,1

Рис. 2.15. Результат операции масштабирования с коэффициентами <2, 1, 1>


Вращение

Операция вращения позволяет нам изменить ориентацию объекта. Для вращения объекта требуется, чтобы мы определили ось вращения и угол поворота.

Мы можем использовать вектор, чтобы задать ось вращения, и числовое значение, чтобы указать, на сколько следует повернуть объект.

Итак, давайте вернемся к нашему исходному кубу и повернем его относительно оси Z на 45 градусов.

Вращение относительно оси Z означает, что куб повернется так, будто он проткнут осью Z и свободно поворачивается на ней только в одном направлении. Мы укажем это с помощью вектора <0, 0, 1> и числа 45. На рис. 2.16 показан результат выполнения этой операции вращения.


Рисунок 2.16. Куб, повернутый на 45 градусов относительно оси 0,0,1

Рис. 2.16. Куб, повернутый на 45 градусов относительно оси <0, 0, 1>



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz