Вопрос

Я сделал очень простую трехмерную сцену с 5 точками в мировых координатах. Я хотел бы перемещаться по сцене, поэтому я определяю камеру с вектором UP и OUT. С этой информацией я создаю матрицу вращения в каждом кадре, которую я буду применять к векторам, чтобы получить координаты камеры.

Вопрос: я читал о блокировке карданного подвеса, используя этот метод, но произойдет ли это в этом случае?

Обратите внимание, что я генерирую матрицу вращения в каждом кадре, и я не вращаюсь в совокупности. Так может ли случиться блокировка в этой ситуации? Если бы это было так, что бы вы предложили безопасно применить вращение (из векторов UP и OUT)?

Спасибо

Это было полезно?

Решение

Если под OUT вы имеете в виду «вперед» и это всегда перпендикулярно вектору UP, то НЕТ, вы не столкнетесь с блокировкой карданного подвеса.

Что вы делаете, это создаете матрицу ориентации из векторов ВВЕРХ и ВПЕРЕД и применяете каждый кадр, что является довольно распространенным методом перемещения камеры в пространстве. Вы не применяете несколько поворотов с использованием углов Эйлера, что может стать причиной блокировки карданного подвеса.

Обратите внимание, что для создания матрицы вам также понадобится создать " слева " (или справа) вектор из векторов ВВЕРХ и ВПЕРЕД. Хорошее введение в это здесь - обратите внимание, что этот пример затем применяет ротацию к матрице камеры, что является совершенно необязательным шагом.

В Википедии есть хорошее объяснение блокировки подвеса .

Другие советы

Вы столкнетесь с проблемой блокировки карданного подвеса при использовании матричного подхода для генерации матриц вращения (для X, Y, Z), а затем умножения их для получения окончательной матрицы вращения. Если я понял, что вы это сделаете, вы используете вектор OUT для получения углов (альфа, бета, гамма), затем вы вычисляете матрицы, наконец - вы умножаете их, чтобы получить окончательную матрицу вращения - тогда да, вы столкнетесь с блокировкой карданного подвеса.

Один из способов избавиться от этой проблемы - использовать кватернионы для расчетов.

Кроме того, здесь я нашел несколько руководств по OpenGL о том, как реализовать их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top