2

ワールド座標に5ポイントの非常にシンプルな3Dシーンを作成しています。シーンをナビゲートしたいので、UPベクトルとOUTベクトルの両方を使用してカメラを定義しています。この情報を使用して、すべてのフレームで回転行列を生成します。これをベクトルに適用して、カメラの座標を取得します。

問題は、この方法を使用した問題としてジンバルロックについて読んだことがありますが、この場合は発生しますか?

すべてのフレームで回転行列を生成しており、累積的に回転していないことに注意してください。では、この状況でロックが発生する可能性はありますか?その場合、(UPおよびOUTベクトルから)安全に回転を適用するために何を提案しますか?

ありがとうございました

4

2 に答える 2

5

OUTが「前方」を意味し、これが常にUPベクトルに垂直である場合、NO、ジンバルロックは発生しません。

あなたがしているのは、UPベクトルとFORWARDベクトルから方向行列を作成し、それを各フレームに適用することです。これは、空間でカメラを移動するためのかなり一般的な方法です。ジンバルロックの原因となる可能性があるオイラー角を使用して複数の回転を適用していません。

マトリックスを作成するには、UPベクトルとFORWARDベクトルから「左」(または右)ベクトルも作成する必要があることに注意してください。これについての良い紹介はここにあります-その例はカメラマトリックスに回転を適用することに注意してください。これは完全にオプションのステップです。

ウィキペディアにはジンバルロックについての良い説明があります。

于 2009-08-04T02:11:24.407 に答える
1

行列アプローチを使用して回転行列(X、Y、Zの場合)を生成し、それらを乗算して最終的な回転行列を取得すると、ジンバルロックの問題が発生します。私が理解しているのであれば、OUTベクトルを使用して角度(アルファ、ベータ、ガンマ)を取得し、次に行列を計算します。最後に、それらを乗算して最終的な回転行列を取得します。そうすると、ジンバルロックが発生します。

この問題を取り除く1つの方法は、計算 にクォータニオンを使用することです。

また、ここで、それらを実装する方法についてのOpenGLチュートリアルをいくつか見つけました。

于 2009-08-04T01:51:54.993 に答える