我在理解 XNA 中的视图矩阵时遇到了一些严重的问题。我已经完成了所有其他部分,并且因为我刚刚学会了所需的数学知识,所以我不想在不了解它们首先做什么的情况下使用内置的矩阵函数。
现在我了解了旋转、投影和平移的基础知识,但我一生都无法理解视图矩阵在 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);
为什么要翻转 X 轴和 Z 轴?我认为您应该根据相机的旋转来旋转世界,但方向相反,然后将世界沿相反方向平移相同的量。
或者视图矩阵根本不用作转换,而只是编码相机在世界中的位置和旋转?