2009-08-04 10 views
2

非常にシンプルな3Dシーンを作成しています。ワールド座標に5点あります。私はシーン全体をナビゲートしたいので、私はUPベクトルとOUTベクトルの両方を持つカメラを定義しています。この情報を使って、すべてのフレームで回転行列を生成します。これは、カメラの座標を取得するためにベクトルに適用します。これはジンバルロックの原因になりますか?

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

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

あなたは回転行列を生成するために、マトリックス・アプローチを使用する場合(X、Y、Zのために)ジンバルロック問題が発生してから、最終的な回転行列を得るためにそれらを乗算しますあなたの

答えて

4

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

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

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

ウィキペディアには、gimbal lockの説明があります。

+0

Thanks Justicle、これは私がやっていることです。私がアウトベクトルと呼んでいるのはあなたの前進です。これで(第3のベクトルを得るために十字積を適用する)私は正規直交行列を生成し、それらを変換するためにベクトルに乗算します。 ご確認いただきありがとうございます。私は何とかジンバルロックがこのケースには当てはまらないと確信していましたが、もしそうなら、確かめたいと思っていました。 –

+0

ジンバルロックの原因となるマトリックスではなく、オイラー角の組み合わせ - ウィキペディアリンクを参照してください。 – Justicle

1

ありがとうございます。私はあなたが理解している場合は、アウトベクトルを使用して角度(アルファ、ベータ、ガンマ)を取得し、次に行列を計算しています - 最終的なローテーション行列を得るためにそれらを掛けます - そうです、ジンバルロックに遭遇します。

この問題を解決する方法の1つは、計算にQuaternionsを使用することです。

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

関連する問題