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

时间:2016-09-01 20:09:05

标签: c++ 3d directx game-engine directx-11

我已经实现了一个简单的弧形球相机,效果很好 - 当我使用鼠标时,我用滚动,俯仰和打哈欠更新视图矩阵。

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

你们知道如何从View矩阵中检索当前位置吗?还是有另一种方法可以更新吗?

1 个答案:

答案 0 :(得分:3)

你有一些简单的选择:

  1. 通过调用XMMatrixInverse或D3DXMatrixInverse来反转视图矩阵,这样就可以获得" CameraWorld"矩阵。然后它的(_41,_42,_43)元素将成为位置向量。

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

  3. 一个好主意是在程序存储器中同时包含View和InvView矩阵,以便快速访问这些信息:矩阵求逆在计算上非常昂贵。

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