Будет ли это вызвать карданный замок?

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

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

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

Спасибо

2 ответа

Решение

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

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

Обратите внимание, что для создания матрицы вам также потребуется создать "левый" (или правый) вектор из векторов UP и FORWARD. Хорошее введение в это здесь - обратите внимание, что этот пример затем применяет повороты к матрице камеры, что является совершенно необязательным шагом.

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

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

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

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

Другие вопросы по тегам