6

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 軸を反転するのはなぜですか? カメラの回転に応じて世界を回転させるべきだと思いましたが、反対方向に回転させてから、反対方向に同じ量だけ世界を平行移動させました。

それとも、ビュー マトリックスは変換としてはまったく使用されず、ワールド内のカメラの位置と回転をエンコードするだけですか?

4

4 に答える 4

5

次のリンクは、マトリックスを理解し、より効果的に使用するのに大いに役立ちました。あなたはそれらが興味深いと思うかもしれません:

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

私は今あなたと比較的同じことをしています:)

于 2011-03-11T01:09:04.853 に答える
1

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

于 2009-08-20T22:29:47.603 に答える