Вектор вращения OpenGL из матрицы
Итак, вот что у меня есть:
абстрактный класс "Объект", который я создал в рамках, чтобы использовать его в качестве базового класса для всех трехмерных объектов.
член Matrix4 этого класса, который имеет единственную цель хранить информацию о вращении для объекта.
некоторые функции, которые умножают матрицу: для каждого из вращений рыскания и тангажа (как глобальных, так и локальных) я создал метод, который умножает вышеуказанную матрицу вращения на новую матрицу.
Например: если вы локально отклоняете объект на 45 градусов в направлении против часовой стрелки, то
rotMatrix = newRotationZMatrix(45) * rotMatrix;
Я хотел бы знать, каков наилучший способ получить глобальное вращение объекта как вектора - вообще говоря, как вы получаете углы поворота вокруг X,Y и Z из матрицы преобразования, содержащей вращения JUST.
2 ответа
Существуют методы для получения этого, просто получить углы Эйлера из матрицы вращения, это немного математики. Здесь вы можете прочитать об этом.
У меня похожий класс. Для меня это одна из самых забавных частей работы с матрицей 3D.
Ну, давай ответим. Я работаю с OpenGL ES, поэтому для меня производительность является важной частью. Я делаю рутину, тестирую ее, тестирую, стресс-тесты, перестраиваю всю рутину и тестирую, тестирую... пока не найду лучший способ сэкономить память и повысить производительность.
Итак, думая о максимальной производительности, и если у вас, как и у меня, есть класс для работы с матрицами, я говорю вам, что лучший способ получить это:
• Сохраните значения вращения в переменных, прежде чем поместить их в матрицу.
Таким образом, вам не нужно выполнять сложные вычисления Эйлера каждый раз, когда вы хотите получить эти значения. То же самое верно для значений шкалы. Только переводы с разделенными индексами не нуждаются в этом.