我在XNA中使用C#来开发3D游戏。我正在实施可以跟随播放器的第一人称相机,当播放器转动时,相机也会转动。
到目前为止,我的相机跟随球员协调好了,相机的向上矢量也很好。我遇到的唯一问题是当玩家旋转时相机不会旋转。矢量的外观似乎没有更新。
class Camera
{
private Vector3 position;
private Vector3 target;
public Matrix viewMatrix;
public Matrix projectionMatrix;
private Vector3 cameraUp;
private Matrix cameraRotation;
public Camera()
{
ResetCamera();
}
public void ResetCamera()
{
Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), 16/9, 1.0f, 500f);
}
public void Update(Matrix chasedObjectsWorld, Vector3 mdlPos, float mdlRotation)
{
UpdateViewMatrix(chasedObjectsWorld, mdlPos, mdlRotation);
}
private void UpdateViewMatrix(Matrix chasedObjectsWorld, Vector3 mdlPos, float mdlRotation)
{
cameraRotation = Matrix.CreateRotationY(mdlRotation);
position = new Vector3(mdlPos.X,mdlPos.Y,mdlPos.Z);
cameraUp = new Vector3(0.0f,1.0f,0.0f);
target = cameraRotation.Forward;
viewMatrix = Matrix.CreateLookAt(position, target, cameraUp);
}
}
答案 0 :(得分:1)
CreateLookAt
的第二个参数是您希望相机查看的点。在当前代码中,您可以从没有平移的旋转矩阵中获取前向矢量。您对点(target
)的看法是相对于原点(0,0,0)
,但您的相机位置是position
。尝试将position + target
作为第二个参数,而不仅仅是target
。