Вектор вращения OpenGL из матрицы

Итак, вот что у меня есть:

  • абстрактный класс "Объект", который я создал в рамках, чтобы использовать его в качестве базового класса для всех трехмерных объектов.

  • член Matrix4 этого класса, который имеет единственную цель хранить информацию о вращении для объекта.

  • некоторые функции, которые умножают матрицу: для каждого из вращений рыскания и тангажа (как глобальных, так и локальных) я создал метод, который умножает вышеуказанную матрицу вращения на новую матрицу.

Например: если вы локально отклоняете объект на 45 градусов в направлении против часовой стрелки, то

rotMatrix = newRotationZMatrix(45) * rotMatrix;

Я хотел бы знать, каков наилучший способ получить глобальное вращение объекта как вектора - вообще говоря, как вы получаете углы поворота вокруг X,Y и Z из матрицы преобразования, содержащей вращения JUST.

2 ответа

Решение

Существуют методы для получения этого, просто получить углы Эйлера из матрицы вращения, это немного математики. Здесь вы можете прочитать об этом.

У меня похожий класс. Для меня это одна из самых забавных частей работы с матрицей 3D.

Ну, давай ответим. Я работаю с OpenGL ES, поэтому для меня производительность является важной частью. Я делаю рутину, тестирую ее, тестирую, стресс-тесты, перестраиваю всю рутину и тестирую, тестирую... пока не найду лучший способ сэкономить память и повысить производительность.

Итак, думая о максимальной производительности, и если у вас, как и у меня, есть класс для работы с матрицами, я говорю вам, что лучший способ получить это:

• Сохраните значения вращения в переменных, прежде чем поместить их в матрицу.

Таким образом, вам не нужно выполнять сложные вычисления Эйлера каждый раз, когда вы хотите получить эти значения. То же самое верно для значений шкалы. Только переводы с разделенными индексами не нуждаются в этом.

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