Программирование графики с использованием Direct3D

       

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


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


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

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


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

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

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



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


Содержание раздела