XNA:从Matrix获取Vector3

Kla*_*lay 3 c# xna matrix

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

这是设置:

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

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

我需要能够将相机的位置放在世界空间中,这样我才能从盒子中获得距离 - 特别是它与盒子每个面的距离. 如何在世界空间坐标系中获得相机的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);
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*e H 7

或略微简化:

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