Получить вращение камеры в радианах по осям X, Y и Z в OpenGL? - PullRequest
1 голос
/ 14 июня 2009

Я пытаюсь получить поворот камеры по различным осям в OpenGL (но с использованием Java, LWJGL и jME, в частности). Объект камеры позволяет мне получить направление как Vector3f, но это не похоже на работу, чтобы получить компонентное вращение; каждая ось связана с другой осью. Я обнаружил, что toAngleAxis с компонентом угла со смещением был быстрым взломом, но не работает должным образом в большинстве ситуаций. К сожалению, я не очень хорош в математике, иначе я мог бы решить эту проблему :) Опять же, мне просто нужны составляющие оси X, Y и Z в радианах, от 0 радиан до 2 радиан PI. *

Кто-нибудь может помочь?

Приветствия и спасибо заранее, Chris

Ответы [ 2 ]

3 голосов
/ 14 июня 2009

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

См. код для некоторых алгоритмов для работы с углами Эйлера. В частности, я считаю, что вам нужен метод setDirection.

Это даст вам рыскание и шаг от вектора направления. Обратите внимание, что вам нужно только 2 поворота, так как «крен» потребует поворота вокруг вектора направления (или вашего направления, указанного как вращение одного кватерниона).

1 голос
/ 14 июня 2009

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

viewvector = <x, y, z>

r = sqrt(x² + y² + z²)
phi = arctan2(y, x)
theta = arccos(z / r)

Обратите внимание, что вы можете получить только два вращающихся ангела из вектора вида. Для получения третьего угла поворота необходимо знать плоскость проекции x или y.

...