发生Matrix旋转后调整Vector3

时间:2013-11-29 15:51:30

标签: c# matrix xna camera

我在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);
    }
}

1 个答案:

答案 0 :(得分:1)

CreateLookAt的第二个参数是您希望相机查看的点。在当前代码中,您可以从没有平移的旋转矩阵中获取前向矢量。您对点(target)的看法是相对于原点(0,0,0),但您的相机位置是position。尝试将position + target作为第二个参数,而不仅仅是target