如何从视图矩阵获取当前相机位置?

How to get current camera position from view matrix?

我实现了一个简单的弧形球相机,它运行良好 - 当我使用鼠标时,我用滚动、俯仰和打哈欠更新了视图矩阵。

但是,为了正确计算镜面反射,我需要当前相机在世界中的位置 space,在应用旋转时它本身不会更新。

你们知道如何从视图矩阵中检索当前位置吗?或者还有其他更新方法吗?

您有一些简单的选择:

  1. 通过调用 XMMatrixInverse 或 D3DXMatrixInverse 来反转视图矩阵,从而得到 "CameraWorld" 矩阵。然后它的 (_41,_42,_43) 个元素就是位置向量。

  2. 反转视图矩阵(如上次)但不是读取 roe,而是使用 XMMatrixDecompose 或 D3DXMatrixDecompose 来获取相机位置和方向。

一个好主意是在程序内存中同时拥有 View 和 InvView 矩阵,以便快速访问这些信息:矩阵求逆的计算量很大。

  • 视图矩阵只是相机世界矩阵的逆变换(只是忘记了系统的左手或右手)。