【发布时间】:2011-06-26 08:04:14
【问题描述】:
我无法理解相机在我的测试应用程序中的工作原理。我已经能够拼凑出一台正常工作的相机——现在我正在努力确保我了解它是如何工作的。我的相机被封装在它自己的类中。这是从我的 Game.Update() 方法调用的更新方法:
public void Update(float dt)
{
Yaw += (200 - Game.MouseState.X) * dt * .12f;
Pitch += (200 - Game.MouseState.Y) * dt * .12f;
Mouse.SetPosition(200, 200);
_worldMatrix = Matrix.CreateFromAxisAngle(Vector3.Right, Pitch) * Matrix.CreateFromAxisAngle(Vector3.Up, Yaw);
float distance = _speed * dt;
if (_game.KeyboardState.IsKeyDown(Keys.E))
MoveForward(distance);
if (_game.KeyboardState.IsKeyDown(Keys.D))
MoveForward(-distance);
if (_game.KeyboardState.IsKeyDown(Keys.S))
MoveRight(-distance);
if (_game.KeyboardState.IsKeyDown(Keys.F))
MoveRight(distance);
if (_game.KeyboardState.IsKeyDown(Keys.A))
MoveUp(distance);
if (_game.KeyboardState.IsKeyDown(Keys.Z))
MoveUp(-distance);
_worldMatrix *= Matrix.CreateTranslation(_position);
_viewMatrix = Matrix.Invert(_worldMatrix); // What's gong on here???
}
首先,我了解此方法中的所有内容,而不是处理矩阵的最后一部分。我认为术语也妨碍了我。例如,我的_worldMatrix 确实是一个旋转矩阵。真正让我感到困惑的是_viewMatrix 是通过反转_worldMatrix 来计算的部分。我只是不明白这是怎么回事。
在之前的测试中,我总是使用Matrix.CreateLookAt()来创建一个视图矩阵,所以我有点困惑。我希望有人可以简单地解释发生了什么。
谢谢,
-斯科特
【问题讨论】:
-
这个问题的答案可能会对你有所帮助:stackoverflow.com/questions/6461740/…
-
哈哈。那是我发布的关于另一个问题的问题。我很难让我的头围绕 3D 空间和不同的视图/矩阵/投影......
标签: xna