OpenGL ArcBall вращение и анимация с использованием интерполяции? - PullRequest
2 голосов
/ 04 января 2012

В моем приложении OpenGL мне нужно использовать вращение ArcBall для поворота объектов с помощью мыши.

Я понял, что я должен идти с кватернионами после прочтения этой статьи - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

И янашел простую в использовании реализацию здесь - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

Но моя проблема в том, что мне также нужно анимировать мой объект между сохраненными двумя состояниями.То есть -

Состояние (1) = (Позиция X1, Позиция Y1, Позиция Z1, Вращение 1);

Состояние (2) = (Позиция Х2, Позиция Y2, Позиция Z2, Вращение2);

* Эти «вращения» являются матрицами вращения

И анимация выполняется за n шагов.

Примерно так, как показано в этом видео - http://www.youtube.com/watch?v=rrUCBOlJdt4

Если бы я использовал 3 отдельных угла для трех осей (крен, наклон, рыскание), я мог бы легко интерполировать углы.Но, поскольку ArcBall использует матрицу вращения, как я могу интерполировать вращения между State 1 и State2?

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 04 января 2012

Используйте кватернионы (SLERP).Ни матрицы вращения, ни углы Эйлера не подходят для интерполяции.

См. Здесь 45:05 (Дэвид Сакс, Google Tech Talk) .

См. Также Интерполяция междуматрицы вращения

2 голосов
/ 04 января 2012

Либо используйте матрицу или кватернион для внутреннего представления вращения. С помощью крена / тангажа / рыскания вы можете теоретически интерполировать углы, но это не будет работать каждый раз - читайте о Блокировка подвеса .

С кватернионами интерполяция вращения проста - просто интерполируйте отдельные координаты (точно так же, как с углами r / p / y), нормализуя при необходимости. Затем вам придется настроить свою функцию рендеринга для работы с кватернионами (но я полагаю, что вы уже сделали это, поскольку сами упоминаете кватернионы).

С Матрицами интерполяция не так хороша, я боролся с ней несколько лет назад, и все, что я помню, это то, что я наконец решил использовать кватернионы. Поэтому я не могу советовать по этому поводу, извините.

...