2

私の OpenGL アプリケーションでは、ArcBall 回転を使用して、マウスを使用してオブジェクトを回転する必要があります。

この記事を読んだ後、クォータニオンを使用する必要があることに気付きました - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

そして、ここで使いやすい実装を見つけました - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

しかし、私の問題は、保存された 2 つのステータス間でオブジェクトをアニメーション化する必要があることです。あれは -

状態 (1) = (位置 X1、位置 Y1、位置 Z1、回転 1);

状態 (2) = (位置 X2、位置 Y2、位置 Z2、回転 2);

*これらの「回転」は回転行列です

そして、アニメーションは n ステップで行われます。

このビデオに示されているようなもの - http://www.youtube.com/watch?v=rrUCBOlJdt4

3 つの軸 (ロール、ピッチ、ヨー) に 3 つの別々の角度を使用していた場合、角度を簡単に補間できます。しかし、ArcBall は回転 Matrix を使用するため、どうすれば State 1 と State2 の間の回転を補間できますか?

助言がありますか ?

4

2 に答える 2

4

クォータニオン (SLERP) を使用します。回転行列もオイラー角も内挿には適していません。

こちらの 45:05 を参照してください(David Sachs、Google Tech Talk)

回転行列間の補間も参照してください。

于 2012-01-04T08:43:23.770 に答える
2

内部で回転表現に Matrix または Quaternion を使用します。ロール/ピッチ/ヨーを使用すると、理論的には角度を補間できますが、これは毎回機能するとは限りません-ジンバルロックを読んでください。

クォータニオンを使用すると、回転補間は簡単です。(r/p/y 角度の場合と同様に) 個々の座標を補間し、必要に応じて正規化します。次に、四元数を処理するようにレンダリング関数を調整する必要があります (ただし、四元数について言及しているため、既に調整していると思います)。

Matrixes の補間はあまり良くありません。私は数年前に苦労しましたが、最終的にクォータニオンを使用することに決めたことを思い出すことができます。なのでアドバイスできません、ごめんなさい。

于 2012-01-04T08:18:23.247 に答える