Будет ли это вызвать карданный замок?
Вопрос
Я сделал очень простую трехмерную сцену с 5 точками в мировых координатах. Я хотел бы перемещаться по сцене, поэтому я определяю камеру с вектором UP и OUT. С этой информацией я создаю матрицу вращения в каждом кадре, которую я буду применять к векторам, чтобы получить координаты камеры.
Вопрос: я читал о блокировке карданного подвеса, используя этот метод, но произойдет ли это в этом случае?
Обратите внимание, что я генерирую матрицу вращения в каждом кадре, и я не вращаюсь в совокупности. Так может ли случиться блокировка в этой ситуации? Если бы это было так, что бы вы предложили безопасно применить вращение (из векторов UP и OUT)?
Спасибо
Решение
Если под OUT вы имеете в виду «вперед» и это всегда перпендикулярно вектору UP, то НЕТ, вы не столкнетесь с блокировкой карданного подвеса.
Что вы делаете, это создаете матрицу ориентации из векторов ВВЕРХ и ВПЕРЕД и применяете каждый кадр, что является довольно распространенным методом перемещения камеры в пространстве. Вы не применяете несколько поворотов с использованием углов Эйлера, что может стать причиной блокировки карданного подвеса.
Обратите внимание, что для создания матрицы вам также понадобится создать " слева " (или справа) вектор из векторов ВВЕРХ и ВПЕРЕД. Хорошее введение в это здесь - обратите внимание, что этот пример затем применяет ротацию к матрице камеры, что является совершенно необязательным шагом.
В Википедии есть хорошее объяснение блокировки подвеса .
Другие советы
Вы столкнетесь с проблемой блокировки карданного подвеса при использовании матричного подхода для генерации матриц вращения (для X, Y, Z), а затем умножения их для получения окончательной матрицы вращения. Если я понял, что вы это сделаете, вы используете вектор OUT для получения углов (альфа, бета, гамма), затем вы вычисляете матрицы, наконец - вы умножаете их, чтобы получить окончательную матрицу вращения - тогда да, вы столкнетесь с блокировкой карданного подвеса. Р>
Один из способов избавиться от этой проблемы - использовать кватернионы для расчетов. Р>
Кроме того, здесь я нашел несколько руководств по OpenGL о том, как реализовать их.