Vector 从视图矩阵中获取眼睛、目标和上方向向量
在Direct3D中,我使用Matrix.LookAtLH函数来计算视图矩阵 我将其用于相机,通过将原点移动到目标位置,旋转,然后将原点移回(0,0,0),相机围绕目标旋转 这将乘以最初从LookAtLH计算的矩阵Vector 从视图矩阵中获取眼睛、目标和上方向向量,vector,matrix,directx,rotation,direct3d,Vector,Matrix,Directx,Rotation,Direct3d,在Direct3D中,我使用Matrix.LookAtLH函数来计算视图矩阵 我将其用于相机,通过将原点移动到目标位置,旋转,然后将原点移回(0,0,0),相机围绕目标旋转 这将乘以最初从LookAtLH计算的矩阵 有没有一种方法可以让我在做了几次这样的操作之后,分解矩阵以获得眼睛位置、目标位置和上方向向量?视图矩阵非常容易从中提取数据。查看您使用的函数的文档(我已经使用了D3DXMatrixLookAtLH的文档): 正如您在页面底部看到的,矩阵是内部生成的,如下所示: zaxis = no
有没有一种方法可以让我在做了几次这样的操作之后,分解矩阵以获得眼睛位置、目标位置和上方向向量?视图矩阵非常容易从中提取数据。查看您使用的函数的文档(我已经使用了D3DXMatrixLookAtLH的文档): 正如您在页面底部看到的,矩阵是内部生成的,如下所示:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
记住,这只对DirectX有效;将相同的计算移植到OpenGL时,请将上述矩阵转置,因为DirectX中的坐标系是向后的标准坐标系。两个选项:
- 长而难:从新的计算矩阵中提取eye、up和lookAt
- 简单版本:将变换(平移、旋转、平移)应用于眼睛、仰视和注视的副本。这样,您将很容易获得新向量