2010-08-22 110 views
3

得到的Vector3我想我明白矩阵数学不够好,但显然我无言以对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代码完美地适用于定位相机!

回答

7

或稍微简化:

的Vector3 POS = Matrix.Invert(视图).Translation;

2

我再次找出问题张贴问题秒钟内:

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

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