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

发布于 2024-11-07 22:19:26 字数 193 浏览 5 评论 0原文

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

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

该值与最初由 LookAtLH 计算得出的矩阵相乘。

有没有办法在经过一些这样的操作后,分解矩阵以获得眼睛位置、目标位置和向上向量?

In Direct3D, I'm using the Matrix.LookAtLH function to compute the view matrix.

I am using this for the camera, which I orbit around a target by moving the origin to the target position, rotating, and then moving the origin back to (0,0,0).

This is multiplied to the matrix that was originally computed from LookAtLH.

Is there a way I can, after a few of these operations, decompose the matrix to get the eye position, target position, and up vector?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彻夜缠绵 2024-11-14 22:19:26

视图矩阵很容易从中提取数据。查看您使用的函数的文档(我使用了 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 中的坐标系与标准相反。

View matricies are very easy to extract data from. Check out the documentation for the function you used (I've used the documentation for D3DXMatrixLookAtLH):

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

As you can see towards the bottom of the page, the matrix is internally generated like so:

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

Bear in mind, this is only valid for DirectX; transpose the above matrix when porting the same calculations to OpenGL because the coordinate system in DirectX is backwards to the norm.

路还长,别太狂 2024-11-14 22:19:26

两个选项:

  • 漫长而困难:从新的计算矩阵中提取眼睛、向上和外观
  • 简单版本:将变换(平移、旋转、平移)应用于眼睛、向上和外观的副本。这样你就可以很容易地得到新的向量。

Two options :

  • Long and difficult : extract eye, up and lookAt from the new computed matrix
  • Easy version : apply your transformations (translation, rotation, translation) to a copy of your eye, up, and lookAt. This way you will get very easily the new vectors.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文