Камера Эйлера, вращение вокруг оси х в локальной системе камеры

У меня есть класс камеры, который держит ее ориентацию через углы Эйлера и положение. Что-то вроде того:

float m_x;
float m_y;
float m_z;

Vector4 m_pos;

И я хочу переместить эту камеру бесплатно в пространство.
Когда пользователь перемещает мышь вверх-вниз, камера должна вращаться вокруг оси x в своей собственной системе координат. Но я хочу держать только эти три угла и положение и ничего более.

Итак, алгоритм выглядит так:

  1. Найти ось локальной системы камеры (u, v, n)
  2. Повернуть вокруг оси U на угол альфа
  3. Найти углы вокруг (1, 0, 0), (0, 1, 0), (0, 0, 1), которые соответствуют повороту на угол альфа вокруг оси u
  4. Добавьте их в m_x, m_y, m_z

Вопрос: как я могу вычислить углы поворота в системе координат по умолчанию (я имею в виду в (1, 0, 0), (0, 1, 0) и (0, 0, 1)), которые отвечают углам поворота в локальной координате камеры система?

Описание

Или может быть лучшее решение существует для этой проблемы?

0

Решение

Я отвечаю на краткий вопрос от ваш комментарий:

Как рассчитать вращение в одной системе координат, которая отвечает на вращение в другой системе координат?

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

В зависимости от вашего приложения, вы можете или не должны принимать во внимание переводы, а также. Как я понимаю ваш вопрос, вы можете сосредоточиться на части вращения каждой трансформации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]