XNA:从Matrix获取Vector3

时间:2010-08-22 17:23:26

标签: c# matrix xna

我以为我理解矩阵数学很好,但显然我很无能

以下是设置:

我在世界空间的[0,0,0]处有一个物体。我有一个由鼠标移动控制的摄像机类,可以旋转和缩放对象,使它始终可以看到它。以下是我从相机计算viewMatrix的方法:

public Matrix viewMatrix { 
    get {
        return 
            Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle)
                * Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle)
                * Matrix.CreateTranslation(0, 0, distance) 
        ;
    }
}

我需要能够将相机的位置放在世界空间中,这样我才能从盒子中获得距离 - 特别是它与盒子每个面的距离。 如何在世界空间坐标中获取相机的xyz位置?

我试过了:

// all of these only return [0, 0, distance];
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix);
Vector3 pos = viewMatrix.Translation;
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43);

似乎旋转信息以某种方式丢失。奇怪的是,viewMatrix代码非常适合定位相机!

2 个答案:

答案 0 :(得分:7)

或略微简化:

Vector3 pos = Matrix.Invert(view).Translation;

答案 1 :(得分:2)

再次,我在发布问题的几秒钟内找出了问题:

我需要反转视图矩阵。旋转信息 丢失,因为它在距离计算中不起作用,直到视图矩阵被反转。轮换是转型的错误“结束”。

Vector3 pos = Vector3.Transform(Vector3.Zero, Matrix.Invert(viewMatrix));