• Чт. Апр 25th, 2024

Навигация в 3D-пространстве — как использовать матрицы для навигации

Автор:lovewp

Июн 27, 2013

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

В предыдущих уроках по матрицам (см. Урок “Матрицы”) я уже объяснял, что любая матрица трансформации есть ни что иное, как три вектора-базиса. Каждый из этих векторов является вектором, задающим ось координат “нового пространства” в “старом пространстве”. При этом, как обычно, один из этих векторов направлен (в новом пространстве) вбок, один вверх(либо вниз), а третий либо к “камере”, либо от неё.

Для навигации в трёхмерном пространстве, обычно так же необходимо иметь всего три вектора – один вбок (для стрейфа), один к камере либо от неё (что бы ходить вперёд/назад) и один вверх, либо вниз (для прыжков, например). Наблюдаете сходство с тем, что я написал в предыдущем абзаце? Проверим на практике, как оно работает?

Получение векторов для навигации в 3D

Итак, надеюсь, вы понимаете, что необходимые нам для навигации вектора мы можем извлечь непосредственно из матрицы трансформации объекта. Возможно, это стоило бы сделать для камеры, но, мне кажется, что в будущем нам понадобятся такие вектора и для других объектов, потому я реализовал эти методы в классе CEntity:

Добавить комментарий

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