Основы программирования трехмерной графики в DirectX. Часть I: Система трехмерных координат

В отличие от двухмерной графики, работать с 3D графикой несколько сложнее. Для создания даже простых трехмерных программ может понадобиться значительно больше математических познаний, чем для работы со спрайтовой графикой. Поэтому, прежде всего, необходимо разобраться с тем, что на самом деле есть трехмерное пространство, и каким образом в этом пространстве представляются 3D объекты.

Система координат, применяемая в 3D программировании отличается от двухмерной системы координат, но практически идентична простой декартовой системе за исключением некоторых нюансов. В системе трехмерных координат начальная точка отсчета находится в левом нижнем углу экрана. Ось X проходит по нижней части дисплея слева на право, а ось Y снизу вверх. Дополнительно в трехмерном программировании добавляется ось Z, которая и позволяет работать с 3D объектами.

Смысловая нагрузка оси Z заключается в том, чтобы на двухмерной плоскости экрана правильно представить трехмерный объект или как часто говорят модель. Ось Z позволяет организовать глубину в двухмерном пространстве. Это дает возможность отдалять или приближать объекты по этой оси. В более сложных операциях ось Z принимает участие в трансформации и масштабировании объектов, в различных видовых и мировых преобразованиях, вычислении перспективы и многом другом, о чем мы, несомненно, поговорим в последующих частях данного цикла статей.

Рис. 1. Трехмерная система координат

Посмотрите на Рис. 1, где изображена трехмерная система координат. В DirectX имеются две различные ориентации трехмерных координат. Это так называемая правосторонняя система координат и левосторонняя система координат. К слову ранее в DirectX использовалась только левосторонняя система, в OpenGL основной была правосторонняя система координат, а в XNA для представления трехмерного пространства применяется исключительно правосторонняя система координат. В чем разница между этими двумя ориентациями?

Разница не большая, но она существенна и может повлиять на неправильное определение точки вывода объекта в пространстве. В правосторонней системе координат положительная ось Z идет в направлении прямо к вам. То есть если вы сейчас смотрите на страницу моего сайта, то положительная часть оси Z выходит прямо со странницы сайта и направляется в вашу сторону. В свою очередь отрицательная часть плоскости оси Z удаляется от вас и все то, что находится за страницей сайта (за монитором) – это уже есть отрицательная часть оси Z (Рис. 2).

Рис. 2. Правосторонняя система координат

В левосторонней системе координат все наоборот. Положительная часть оси Z удаляется от вас, тогда как отрицательная часть оси Z направлена в вашу сторону. Поэтому если вы перепутаете эти две системы координат между собой и дадите объекту неправильные координаты по оси Z, то можете этот объект просто не увидеть на экране. Например, вы указываете для вывода объекта по оси Z координату со значением минус 10 пикселей. В этом случае в правосторонней системе координат объект будет располагаться, как бы внутри монитора и будет удален от поверхности дисплея в его глубь на 10 пикселей. Если вы перепутаете значения и укажите положительные 10 пикселей, то объекта на экране вы не увидите, поскольку он будет находиться где-то между поверхностью дисплея и вашими глазами, то есть вне зоны видимости.

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

1 КОММЕНТАРИЙ