Вектор вращения OpenGL из матрицы - PullRequest
1 голос
/ 21 августа 2010

Хорошо, вот что у меня есть:

  • абстрактный класс «Объект», который я создал в каркасе для использования его в качестве базового класса для всех 3D-объектов.

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

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

    rotMatrix = newRotationZMatrix(45) * rotMatrix;
    

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

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

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

0 голосов
/ 03 ноября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...