XNA查看矩阵 - 寻求解释

Sku*_*del 6 c# 3d xna camera matrix

我在理解XNA中的视图矩阵时遇到了一些麻烦.我已经完成了所有其他部分,因为我刚刚学会了所需的数学,我不想使用内置的Matrix函数,而不了解他们先做的事情.

现在我理解了旋转,投影和翻译的基础知识,但我无法理解视图矩阵在XNA中的工作原理.

从我收集的信息来看,视图矩阵应该将"世界"转变为它自己的空间.看似合理,但库中的Matrix.CreateLookAt方法非常令人费解.

我已经建立(通过检查库函数输出的内容)这两段代码产生相同的结果:

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);
Run Code Online (Sandbox Code Playgroud)

为什么要翻转X和Z轴?我认为你应该根据摄像机的旋转来旋转世界,但是在相反的方向,然后在相反的方向上将世界翻转相同的量.

或者视图矩阵根本不用作转换,而只是编码摄像机在世界中的位置和旋转?

Tch*_*ami 22

您需要了解三种类型的变换:世界,视图和投影.

世界变换将模型坐标从模型空间更改为世界空间.定义模型的顶点时,可以相对于该模型的原点定义它们.世界变换会转换这些顶点,使它们相对于场景中所有对象共享的原点,即世界空间.

然后,视图变换将这些顶点转换为视图空间.查看器/摄像机在视图空间中具有位置和方向,这用于创建应用于场景中所有对象的视图矩阵.在视图空间中,查看器/摄像机位于原点,因此视图矩阵平移并旋转所有对象以将它们放置在视图空间中.

最后,投影变换确定相机使用什么类型的"镜头".到目前为止,我们只翻译和旋转了对象,没有规模感或透视感.投影变换创建视锥体并将顶点变换到此视口中.

现在提出你的问题.您可以反映围绕x轴的坐标系,然后是z轴,最后进行平移.这会产生与外观矩阵相同的结果,因为位置位于xz和yz平面上,但请注意如果将位置向上移动一个单位,则会发生什么.那两个基质不会是平等的

  • 别担心.恭喜你弄明白了 :) (2认同)

小智 5

视图矩阵将场景转换为视图空间.在视图空间中,虚拟摄像机位于原点并且正在正z方向上查看.有不同的方法来实现这一点,但最常见的是视图矩阵包括平移和围绕每个轴的三个旋转.

Transform = Translate*RotationZ*RotationY*RotationX


Rem*_*emm 5

以下链接极大地帮助我理解和更有效地使用矩阵。您可能会发现它们很有趣:

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

我现在正在做与你相同的事情:)