私はGoogleを通じて何度もここに来ましたが、SOに関する最初の質問です。クォータニオンを使用して回転を表すことや、同様の問題を抱えている人を見つけることについて、かなり多くのことを読みました。私はまだ良い解決策、または理解できる解決策を見つけていません..そのため、確かな答えを生成するのに十分明確な質問をすることに挑戦しています。
現在、カメラの向きを表すためにクォータニオン (具体的には Qt 4.7 クォータニオン/C++) を使用しています。プログラムの各ステップでマウスの動きをチェックし、fromAxisAndAngle(xaxis, x_mouse_movement) と fromAxisAndAngle(yaxis, y_mouse_movement) を実行します。これらの 2 つの四元数を取り、それらを乗算します (yaxis * xaxis)。初期化のために、乗算する単位四元数 (w、x、y、z -> 1,0,0,0) があります。現在の向きで、これらの fromAxisAndAngle 乗算に対する回転を累積し続けます。これにより、リー群問題として知られるロールが生成されます (私が思うに) ピッチとヨーを連続的に適用すると、純粋なロールを生成できます。私が言うことができる)。
ピッチ、ヨー、ロールがインクリメントされ、クォータニオンがこれらの値から毎回最初から fromAxisAndAngle から構築される別の方法を実装しました。これにより、正しい FPS スタイルのカメラが生成されますが、ジンバル ロックが発生します。私の目標は、この一般的な 6DOF カメラを FPS カメラまたは宇宙船スタイルのカメラとして使用できるように、ピッチとヨーのみから生じるローリング効果を除去 (または補償) しながら、純粋なクォータニオン表現を維持することです。このロールを修正するための提案 (特定のルーチン)、または私のニーズに合った代替表現を探しています。テキストの壁で申し訳ありませんが、明確にしたかったのです。お時間をいただきありがとうございます。ハッキングをお楽しみください。