Дисплей Эйлера и внутренне использующий кватернион - PullRequest
0 голосов
/ 28 февраля 2020

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

glm::dquat q_quat = glm::quat(glm::dvec3(euler.x, euler.y, euler.z);

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

glm::dvec3 euler = glm::eulerAngles(q_quat);

Я знаю, что повороты кватернионом могут быть представлены несколькими углами Эйлера, и здесь есть проблема. Например, если [0, euler.y > 90, 0] преобразовано в кватернион, а затем преобразовано обратно в представление Эйлера, результатом будет [180, 180 - euler.y, 180]. Это приводит к правильному преобразованию, но не является обязательным для понимания пользователем.

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

Заранее спасибо

...