9

クォータニオンは、クォータニオン間の回転を補間するのに適しています。ここまでは順調ですね。

ネットワークゲームを使用している場合、回転をvector3fとして転送するだけで十分ですか、それともクォータニオンを使用する必要がありますか?ゲームをスムーズにするために、最後に送信されたローテーションと現在のローテーションの間を補間する必要があるかもしれません。

しかし、Yaw / Pitch / Rollから作成された2つのクォータニオン間の回転を補間できますか?

Quaternion a = Quaternion.FromYawPitchRoll(x1,y1,z1);

Quaternion b = Quaternion.FromYawPitchRoll(x2,y2,z2);

a.Interpolate(b, value); // will this work correctly?
4

3 に答える 3

9

はい、できます。オイラー角の問題はジンバルロックであり、一部の方向では自由度が1つ少なくなります。オイラー角からクォータニオンに変換すると、その問題は解決されます。情報を失うことなく、ほぼすべての3D軸表現をクォータニオン形式に変換したり元に戻したりすることができます。行列は等方性(スケールやせん断なし)である必要があり、ベクトルは単位長である必要があります。

クォータニオン間の線形補間はslerpと呼ばれます。クォータニオン間の2次補間は、squadと呼ばれます。クォータニオンは3つの虚数部を持つ複素数であるため、実数とベクトルで機能するのと同じ方程式がクォータニオンに適用されます。乗算、加算、対数、べき乗を行うときは、正しいルールを使用することを忘れないでください。実数部がスケールであるのに対し、虚数部i、j、kが一緒に軸ベクトルを形成することを想像するのに役立ちます。

于 2009-11-06T00:46:22.370 に答える
5

クォータニオン間を補間できます。私はかつて、いくつかの特定のポイントからレンダリングシステムのフレームを生成するクォータニオンベースのキーフレームアニメーションジェネレーターを作成しました。分類されているため、コードを共有できません:-(

このトピックについて、80年代のSIGGRAPHの議事録に論文がありました。クォータニオンの主な利点は、オイラー角のような特異点がないことです。

ああ、ここに参照があります:

Shoemaker、Ken「AnimatingRotation with Quaternion Curves」、SIGGRAPH '85、サンフランシスコ、1985年7月22〜26日、vol。19、No。3、1985 ACM 0-89791-166-0 / 85/007/0245、pp.245-254。

于 2009-11-06T00:45:32.387 に答える
4

はいといいえ。ここに良い議論があります:http: //number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

クォータニオンをどのように取得したかは実際には問題ではないことに注意してください。同じルールが適用されます。

編集:私は多くのプロジェクトで論文に示されているソースコードを使用しており、それを保証することができます。

于 2009-11-06T01:00:11.283 に答える