我一直致力于加载游戏几何体的东西,并遵循玩家的位置和视图,但我遇到了一个问题:我不能在没有轴的情况下旋转视图搞砸了。
这是节目和偏航为0的节目截图(就像游戏的客户端一样): http://i.stack.imgur.com/DXhIr.jpg
这是我的观点矩阵代码:
public void UpdateViewMatrix()
{
Vector3 pos = Position;
pos.X *= -1;
pos.Y *= -1;
pos.Z *= -1;
this.ViewMatrix = Matrix.CreateScale(1) * Matrix.CreateLookAt(Vector3.Zero, new Vector3(1, 0, 0), new Vector3(0, 0, 1)) * Matrix.CreateTranslation(pos) * Matrix.CreateFromYawPitchRoll(-MathHelper.PiOver2, -MathHelper.PiOver2, MathHelper.Pi);
this.Frustum.Matrix = (this.ViewMatrix * this.ProjectionMatrix);
if (this.CameraUpdated != null) this.CameraUpdated(this, new EventArgs());
}
我不确定为什么在更新视图矩阵之前我必须翻转所有坐标。
提前致谢!
答案 0 :(得分:0)
我不确定为什么我必须在我之前翻转所有坐标 更新视图矩阵
你可能不会。
在Xna第一人称射击游戏中,处理相机视角矩阵以跟随角色的简单方法是创建该角色的世界矩阵的副本,将其偏移到后面并稍微高于,然后颠倒它。这样,不必为相机复制为播放器完成的所有旋转和位置操作。这是一个简单的例子:
//player moved and rotated and player's world matrix is determined
Matrix cameraWorld = playerWorld;
cameraWorld.Translation += (cameraWorld.Backward * followingDistance) +
(cameraWorld.Up * verticalOffset);
ViewMatrix = Matrix.Invert(cameraWorld);
现在,相机视图矩阵的方向与玩家相同,并且会像胶水一样粘在他身上。