Разрешающее вращение вокруг произвольной оси во вращение вокруг оси X, Y и Z - PullRequest
2 голосов
/ 17 августа 2011

В настоящее время я пытаюсь реализовать виртуальный аркбол в OpenGL с использованием библиотеки GLUT. На данный момент я вычисляю ось вращения и угол поворота, выполняя стандартное вычисление аркбола для старых и новых координат мыши. Но я хочу получить угол theta1, theta2, theta3, такой, чтобы поворот объекта вокруг оси X на theta1, вокруг оси Y на theta2 и вокруг оси Z на theta3 давал тот же эффект, что и раньше.

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

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

Посмотрите также на то, что называется параметрами Rodrigues , чтобы помочь в преобразовании. Для первого поворота вокруг X, затем Y, а затем Z вы хотите сделать RZ(t3)*RY(t2)*RX(t1).

В вашем случае может быть проще построить матрицу вращения 3x3 и использовать OpenGL для преобразования вида модели на основе матрицы вместо 3 последовательных вращений.

3 голосов
/ 17 августа 2011

То, что вы хотите, называется углами Эйлера, которые представляют собой три угла, вращающихся вокруг координатных осей (в вашем случае XYZ или, может быть, ZYX?).Просто убедитесь, что вы выбрали правильное соглашение (порядок осей), которое соответствует вашим потребностям.Если вы будете искать формулы вычисления углов Эйлера, вы найдете много из них, но все они будут использовать разные соглашения (и многие люди предполагают, что их соглашение является стандартом, поэтому не делайте каких-либо специальных упоминаний о нем, но нет общегостандарт).

Также имейте в виду, что углы Эйлера имеют много недостатков, таких как фиксация карданного подвеса, неоднозначность и упомянутое беспорядочное соглашение.Поэтому, если у вас есть возможность представить вращение произвольной осью и углом (или, что еще лучше, кватернионом), вам не следует связываться с углами Эйлера.Но, тем не менее, в этом документе вы найдете методы преобразования углов Эйлера в матрицы для всех 12 соглашений и обратно.Форма преобразования ось-угол в матрицу довольно прямолинейна.

0 голосов
/ 18 августа 2011

Лучший способ выполнить эту работу - преобразовать пространственное вращение вокруг оси, проходящей через начало координат, в единичные четверти. Четверти единиц могут быть легко преобразованы в углы Эйлера без какой-либо двусмысленности. Более подробную информацию о конверсии можно найти здесь http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles.

Спасибо за помощь!

...