2009-07-13 17 views
2

私のプロジェクトで3Dで奇妙な問題が発生しました。誰もがLookAtベクトルを計算することの忠実さを知っていますが、変換行列から "up"ベクトルを計算するのはとてもeaslyではありません。3Dの変換行列から 'up vector'を計算する

問題は、以下の通りです:

「アップ」ベクトルは、アイデンティティの回転行列のためにとマトリックスと回転しますが、スケールも翻訳しない(0、0、1)です。あなたが単純な回転行列を持つ場合、手続きは簡単です(ベクトルと行列を掛ける)。しかし、行列にも平行移動と回転が含まれている場合(たとえば、いくつかの他の行列を乗算して生成された場合)、ベクトルは平行移動および拡大縮小されるため、これは機能しません。

私の質問は、単一の変換行列からベクトルを(「0」、「1」、「0」)が恒等行列に対応するようにする方法です。

+1

"アイデンティティローテーション行列"のようなものはありません。定義によって、恒等行列は、特定の基盤内でベクトルを未形成にする。 – Janie

+1

私はあなたの質問を理解していません。あなたは世界の "上"か、地元の "上"を望んでいますか?いくつかの例題の行列を使って何をしているのか理解できますか? – Nosredna

+0

行列世界座標でのY軸ベクトル(上)は、記述した方法で取得するか、マトリックスから直接抽出して取得します。適用後に探しているものでない場合は、http://stackoverflow.com/a/25216549/2521214を参照してください。より多くの行列があるならば、アップベクトルが必要ではなく、代わりに何か他のものを必要とします。その場合は、より近くに画像を追加してください。 – Spektre

答えて

0

私は行列の計算に熟練していませんが、乗算された行列のアップベクトルを計算し、得られたベクトルを単位ベクトルに正規化するという単純な問題として私には当てはまります。翻訳はそれにまったく影響を与えてはならないし、正規化することでスケールを簡単に破ることができます。

3

単純にアップベクトル(0,1,0)に変換を乗算し、正規化します。あなたは新しい方法で計算されたベクトルを得るでしょう。

+0

変換に変換がある場合、この解決法は機能しません。 Alex319の具体例を参照してください。 –

+1

彼は回転を言いましたが、訳はありません。彼は明らかに翻訳マトリックスの逆数を計算しなければならないだろう。変換行列は連結回転で通勤するので、逆行列はいつでも適用できます。 – Janie

3

アップベクトル - (0、0、0)と(0、1、0)の両方の端点にマトリックスを適用します。それらの2点間のベクトルを計算し、それをスケーリングして単位ベクトルを得る。それは翻訳の心配をする必要があります。

6

翻訳は実際にそれに影響します。この例では、変換行列がスケーリングまたは回転を行わず、Z方向に2単位変換したとします。次に(0,1,0)を変換すると、(0,1,2)が得られ、正規化すると(0,1/sqrt(5)、2/sqrt(5))が得られます。

あなたがしたいのは、(0,1,0)の変換と(0,0,0)の変換の違いを取ってから、結果のベクトルを正規化することです。上記の例では、(0,1,2)から(0,0,2)(ゼロベクトルの変換である0,0,2)を取り、必要に応じて(0,1,0)を取得します。

+0

+1具体的な例で詳しく説明します。 –

+0

-1は、一般化されたアプローチを提供しないためである。 – Janie

+0

(すなわち逆行列について話す) – Janie

0

私はこれが古いスレッドであると認識していますが、この問題を抱えている誰かにこれを指摘する必要があると感じていました。

線形代数では、基底ベクトルの集合として行列を見ることが教示されています。それぞれは、原点からの相対位置を記述するのに利用できる空間の方向を表します。

任意の行列の基底ベクトル(基本方向を記述するベクトル)は、関連する行列列から直接読み取ることができます。 単純に最初の列を "x ++"ベクトル、第2列を "y ++"ベクトル、第3列を "z ++"ベクトルとします。 3Dで4x4行列を扱っている場合、これらの列の最後の要素と最後の列は原点の変換に関連しています。この場合、これらのベクトルのそれぞれの最後の要素およびそのような行列の最後の列は、単純化のために無視することができます。

例:y軸を中心に90度の回転を表す行列を考えてみましょう。
[0,0、-1]
[0,1,0]
[1,0,0]

アップベクトルがはっきり(-1、0と3番目の列から抽出することができます、0)、行列がy軸の周りに90度の回転を適用しているので、上のベクトルがx軸の下をポイントするようになります(ベクトルが示すように)、基底ベクトルを取得して正の基本方向を取得し、あなたの反対側のカウンターパートを与えてください。

道順を抽出する行列を取得したら、それほど簡単な計算は必要ありません。

関連する問題