Проблема с переворотом при интерполяции вращений с использованием кватернионов - PullRequest
2 голосов
/ 22 мая 2010

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

здесь

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

Это может быть логично с математической точки зрения (хотя и не для меня), но это нежелательно. Как можно добиться интерполяции без визуального переворачивания и изменения направления при вращении вокруг более чем одной оси, следуя все время по зеленой стрелке, пока интерполяция не завершится?

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

Ответы [ 2 ]

9 голосов
/ 22 мая 2010

Ваше описание проблемы немного сложное, откровенно говоря. Но, похоже, вам нужно отрицать один из ваших кватернионов.

Помните, что каждое вращение на самом деле может быть представлено двумя кватернионами, q и -q. Но путь Slerp от q до w будет отличаться от пути от (-q) до w: один уйдет на большое расстояние, другой - на короткое. Звучит так, будто вы проделываете долгий путь, когда хотите короткого пути.

Попробуйте взять скалярное произведение двух ваших кватернионов (то есть четырехточечное скалярное произведение), и, если скалярное произведение отрицательно, перед выполнением Slerp замените кватерионы q1 и q2 на -q1 и q2.

0 голосов
/ 23 мая 2010

Как далеко находится полный оборот?Возможно, вы просите интерполяцию для двух ориентаций слишком далеко друг от друга по углу.Математика, кватернионы или нет, с трудом решает, в каком направлении идти, в каком-то смысле.Как не хватает ключевых кадров в анимации.

Определите хорошую промежуточную ориентацию примерно на полпути и сделайте отдельные интерполяции от начальной ориентации до промежуточной и от промежуточной до конечной.

...