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

Bar*_*ula 4 c++ directx 3d directx-11 game-engine

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

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

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

Spr*_*son 6

您有一些简单的选择:

  1. 通过调用 XMMatrixInverse 或 D3DXMatrixInverse 来反转视图矩阵,从而得到“CameraWorld”矩阵。那么它的 (_41,_42,_43) 元素将是位置向量。

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

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

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