从视图矩阵中获取眼睛,目标和向上矢量

时间:2011-05-17 12:43:47

标签: vector matrix directx rotation direct3d

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

我正在将它用于相机,我通过将原点移动到目标位置,旋转,然后将原点移回(0,0,0)来围绕目标进行轨道运行。

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

在这些操作中,有一种方法可以分解矩阵以获得眼睛位置,目标位置和向上矢量吗?

2 个答案:

答案 0 :(得分:4)

查看matricies非常容易从中提取数据。查看您使用的功能的文档(我已经使用了D3DXMatrixLookAtLH的文档):

http://msdn.microsoft.com/en-us/library/bb205342%28v=vs.85%29.aspx

正如您可以在页面底部看到的那样,矩阵在内部生成如下:

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中的坐标系向后退到标准。

答案 1 :(得分:3)

两个选项:

  • 漫长而艰难:从新的计算矩阵中提取眼睛,向上和向外看
  • 简易版:将您的转换(翻译,旋转,翻译)应用到您的眼睛,向上和看起来的副本。这样你就可以很容易地得到新的载体。