【问题标题】:XNA: get Vector3 from MatrixXNA:从矩阵获取 Vector3
【发布时间】:2010-08-22 17:23:25
【问题描述】:

我以为我对矩阵数学的理解足够好,但显然我一无所知

设置如下:

我在世界空间的 [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 代码非常适合定位相机!

【问题讨论】:

    标签: c# matrix xna


    【解决方案1】:

    或稍微简化:

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

    【讨论】:

      【解决方案2】:

      再一次,我在发布问题的几秒钟内就发现了问题:

      我需要反转视图矩阵。旋转信息正在丢失,因为它在距离计算中没有任何作用,直到视图矩阵被反转。旋转位于转换的错误“结束”。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多