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

Основы программирования трехмерной графики в 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.

 
  • Bitcoin
  • Ethereum
  • Xrp
  • Litecoin
  • Tether
Scan to Donate Bitcoin to 37gL6h1eYph975coF8b4PzpU1NWWsrn7H2

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Bitcoin на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Bitcoin автору проекта. Спасибо!

Scan to Donate Ethereum to 0x86358dC52dfC689EE6eE6A35c8D8D2405592094D

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Ethereum на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Ethereum автору проекта. Спасибо!

Scan to Donate Xrp to rE1Kj7r2fFqqT1JmeHh5miTqNSGi5mDdH9

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Xrp на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Xrp автору проекта. Спасибо!

Scan to Donate Litecoin to MGPZR3gNsUEWfnXtVQXX5Cn22mxK9b51uv

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Litecoin на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Litecoin автору проекта. Спасибо!

Scan to Donate Tether to 0x86358dC52dfC689EE6eE6A35c8D8D2405592094D

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Tether на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Tether автору проекта. Спасибо!

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх