Vector 从视图矩阵中获取眼睛、目标和上方向向量

Vector 从视图矩阵中获取眼睛、目标和上方向向量,vector,matrix,directx,rotation,direct3d,Vector,Matrix,Directx,Rotation,Direct3d,在Direct3D中,我使用Matrix.LookAtLH函数来计算视图矩阵 我将其用于相机,通过将原点移动到目标位置,旋转,然后将原点移回(0,0,0),相机围绕目标旋转 这将乘以最初从LookAtLH计算的矩阵 有没有一种方法可以让我在做了几次这样的操作之后,分解矩阵以获得眼睛位置、目标位置和上方向向量?视图矩阵非常容易从中提取数据。查看您使用的函数的文档(我已经使用了D3DXMatrixLookAtLH的文档): 正如您在页面底部看到的,矩阵是内部生成的,如下所示: zaxis = no

在Direct3D中,我使用Matrix.LookAtLH函数来计算视图矩阵

我将其用于相机,通过将原点移动到目标位置,旋转,然后将原点移回(0,0,0),相机围绕目标旋转

这将乘以最初从LookAtLH计算的矩阵


有没有一种方法可以让我在做了几次这样的操作之后,分解矩阵以获得眼睛位置、目标位置和上方向向量?

视图矩阵非常容易从中提取数据。查看您使用的函数的文档(我已经使用了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
  • 简单版本:将变换(平移、旋转、平移)应用于眼睛、仰视和注视的副本。这样,您将很容易获得新向量

OpenGL坐标系不向后!这是向后的DirectX坐标系:-PTrue!我是由一个DirectX程序员教的,所以所有东西都是逆向学习的。几年过去了,我知道我一直在使用转置矩阵。。。我已经更新了答案,谢谢你打电话给我。