gpt4 book ai didi

math - 计算 LookAt 矩阵

转载 作者:行者123 更新时间:2023-12-01 18:09:45 27 4
gpt4 key购买 nike

我正在编写 3d 引擎,并且遇到了 DirectX 文档中描述的 LookAt 算法:

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

现在我明白了它在旋转方面是如何工作的,但我不太明白的是为什么它将矩阵的平移分量作为那些点积。稍微检查一下,它似乎根据新的基本向量到眼睛/相机位置的投影来稍微调整相机位置。

问题是为什么需要这样做?它有什么作用?

最佳答案

请注意,给出的示例是左手行主矩阵

所以操作是:先平移到原点(移动-eye),然后旋转,使向量从eyeAt> 与 +z 对齐:

如果将旋转矩阵预乘以平移,基本上会得到相同的结果 -eye:

[      1       0       0   0 ]   [ xaxis.x  yaxis.x  zaxis.x 0 ][      0       1       0   0 ] * [ xaxis.y  yaxis.y  zaxis.y 0 ][      0       0       1   0 ]   [ xaxis.z  yaxis.z  zaxis.z 0 ][ -eye.x  -eye.y  -eye.z   1 ]   [       0        0        0 1 ]  [         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 ]

附加说明:

请注意,查看变换(有意)反转:您将每个顶点乘以该矩阵以“移动世界”,以便您想要看到的部分最终出现在规范 View 体积中。

另请注意,LookAt 矩阵的旋转矩阵(称为 R)组件是一个基的反转变化矩阵,其中 R 的行em> 是旧基向量的新基向量(因此变量名称 xaxis.x, .. xaxis 是基发生更改后的 x 轴)。然而,由于反转,行和列被调换了。

关于math - 计算 LookAt 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/349050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com