2011-05-17 58 views
4

在Direct3D中,我使用Matrix.LookAtLH函数来计算视图矩阵。从视图矩阵中获取眼睛,目标和向量

我正在使用这个摄像机,它通过将原点移动到目标位置,旋转,然后将原点移回到(0,0,0),绕过目标。

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

在这些操作中的一些操作之后,是否有办法分解矩阵以获得眼睛位置,目标位置和向量?

回答

3

两个选项:

  • 长期而艰巨的:提取的眼睛,上下的lookAt从新计算的矩阵
  • 简单的版本:适用于您的变换(平移,旋转,平移)到你的眼睛的副本,起来,看起来。这样你就可以很容易地获得新的载体。
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中的坐标系反转到标准。

+4

OpenGL坐标系不倒退!它是向后的DirectX坐标系:-P – mchiasson 2014-10-09 02:19:40

+2

正确!我被DirectX程序员教导,所以一切都倒退了。多年来,我了解到,我一直在使用转置矩阵... 我已经更新了答案,谢谢你打电话给我。 – Salami 2014-10-09 05:34:06