2009-08-20 18 views
6

XNAのビューマトリックスを理解する上で重大な問題があります。私は他のすべての部分でかなり遠くに来ました。私は必要な数学を自分で学んだので、最初に何をするのか理解せずに、組み込みの行列関数を使いたくありません。XNAマトリックスを見る - 参照の説明

ここでは、回転、投影、平行移動の基本について理解していますが、XNAでの表示行列の仕組みを理解することはできません。

私が集めたことから、ビューマトリックスは「世界」を自分の空間に変えなければなりません。合理的だと思われますが、ライブラリのMatrix.CreateLookAtメソッドは非常に困惑しています。

私が設立しました

(どのようなライブラリ関数の出力を調べて)そのコード収率のこれら2つ同じ結果:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position); 
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z).. 
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY); 

はなぜX軸とZ軸を反転?私はあなたがカメラの回転に応じて世界を回転させるべきだと思ったが、反対方向に世界を同じ方向に逆向きに翻訳するべきだと思った。

または、変換としては使用されていないビュー行列は、世界のカメラの位置と回転をエンコードするだけですか?

答えて

5

ビュー行列はシーンを表示空間に変換しています。ビュー空間では、仮想カメラは原点にあり、正のz方向を向いています。これを達成するにはさまざまな方法がありますが、最も一般的なビューマトリックスは平行移動と各軸周りの3回転です。

* RotationZ * RotationY *れるrotationX

+0

ありがとう、それは私の元のアイデアが正しいと思われる。しかし、私はこれらの異なる座標系を少し混乱させました。 – Skurmedel

1

2回の反射を合成すると、ジオメトリを正しく覚えていれば1回転する。

+0

興味深いです。上記の反射は、Yを中心に180度の回転に対応する必要があります。 – Skurmedel

21

理解する必要があるトランスフォームには、ワールド、ビュー、およびプロジェクションの3種類があります。

ワールド変換は、モデル空間をモデル空間からワールド空間に変換します。モデルの頂点を定義するときは、そのモデルの起点を基準にして頂点を定義します。ワールド変換は、それらの頂点を、シーン内のすべてのオブジェクト、すなわちワールド空間によって共有される原点に相対的になるように変換する。

ビュートランスフォームは、これらの頂点をビュースペースに変換します。ビューア/カメラは、ビュー空間内の位置と向きを持ち、シーンのすべてのオブジェクトに適用するビューマトリックスを作成するために使用されます。ビュー空間では、ビューア/カメラは原点にあるので、ビュー行列はすべてのオブジェクトを平行移動して回転させ、ビュー空間に配置します。

最後に、投影変換は、カメラがどのタイプの「レンズ」を使用するかを決定します。これまでは、オブジェクトを平行移動したり回転したりしていましたが、スケールやパースペクティブの感覚はありません。投影変換は、視錐台を作成し、頂点をこのビューポートに変換します。

ご質問ありがとうございます。 x軸、z軸の座標系を反映し、最後に翻訳します。これは、位置がxz平面とyz平面上にあるため、lookat行列と同じ結果が得られますが、位置1のユニットをy軸上に移動するとどうなるかがわかります。そして、2つの行列は等しくないでしょう。

+1

お返事ありがとうございます。私は最も低いランクの答えを選んだ。あなたはどちらも助けてくれました。 – Skurmedel

+2

心配はいりません。あなたがそれを理解してうれしいです:) – Tchami

4

次のリンクを変換=翻訳を理解し、より効果的に行列を使用するために大いに助けてくれました。あなたは彼らが興味深い見つけるかもしれない:私は今、あなたのような比較的同じことをやっている

http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/

:)

+0

ありがとう、それはかなり包括的に見えます。 – Skurmedel

+0

XNAで3Dベースのものを何でもしていて、情報リンクをポンピングしたいのであれば、尋ねてください。私が始めてより高度なもののための情報のかなり良いリストを集める前に、私は多くの研究をしました。 – Remm

+0

ヒヤ、レム、私は3DベースのXNAのものをやっていて、私は情報のリンクで圧倒されたい!私の提案はありますか? –