我已经实现了一个简单的弧形球相机,并且它运行良好。当我使用鼠标时,我通过滚动、俯仰和偏航更新视图矩阵。
但是,为了正确计算镜面反射,我需要当前摄像机在世界空间中的位置,而这个位置并没有在应用旋转时被更新。
你们知道如何从视图矩阵中检索出当前位置吗?或者还有其他方法可以更新它吗?
我已经实现了一个简单的弧形球相机,并且它运行良好。当我使用鼠标时,我通过滚动、俯仰和偏航更新视图矩阵。
但是,为了正确计算镜面反射,我需要当前摄像机在世界空间中的位置,而这个位置并没有在应用旋转时被更新。
你们知道如何从视图矩阵中检索出当前位置吗?或者还有其他方法可以更新它吗?
你有几个简单的选择:
通过调用XMMatrixInverse或D3DXMatrixInverse反转视图矩阵,以获取“CameraWorld”矩阵。然后它的(_41,_42,_43)元素将是位置向量。
反转视图矩阵(与上次一样),但不是读取forth roe,而是使用XMMatrixDecompose或D3DXMatrixDecompose来获取相机位置和方向。
一个好主意是将View和InvView矩阵都保存在程序内存中,以便快速访问这些信息:矩阵反转计算代价昂贵。
XMLoadFloat4x4
/ XMStoreFloat4x4
等 C++ 运算符,非常适合简化使用,特别是对于新手来说,这样做可以避免使用 SIMD 数学库时的困难。 - Chuck Walbourn
BaseCamera::updateVewMatrix():位置 6.000000,6.000000-10.000000 0.000000
这是视图矩阵:[[-0.000000][0.000000][1.000000][0.000000]]
[0.000000][1.000000][0.000000][0.000000]]
[[-1.000000][0.000000][-0.000000][0.000000]]
[[0.000000][0.000000][19.999998][1.000000]]
- Bartosz Boczula