gpt4 book ai didi

c++ - DirectX 3D 围绕 lookAt 旋转 eyePt

转载 作者:行者123 更新时间:2023-11-28 06:33:09 25 4
gpt4 key购买 nike

我真的很难掌握我需要的数学,因为一旦你进入微积分和几何,数学就从来不是我的强项。

那么我如何围绕另一个 vector3 旋转一个 vector3

D3DXVECTOR3 lookAt = this->cam->getLookAt();
D3DXVECTOR3 eyePt = this->cam->getEyePt();

我需要围绕 eyePt 旋转 lookAt 我该怎么做 我知道我需要一个 Matrix 但我应该用什么填充它以及我如何做我只是不明白其中的旋转。

因此,如果有人可以提供代码并解释用于执行此操作的步骤,那将非常有帮助

另一个注意事项是,我只想在 X、Z 轴上平移,因为我正在绕 Y 轴旋转,所以这是我试图做的事情的图像 rotation around Y axis (top down view)

最佳答案

以单位 vector eyePt 为旋转轴。 (我假设它是一个单位 vector ;如果不是,我可以告诉你如何将它变成一个单位 vector 。)我们称它为 E:

    Ex
E = Ey
Ez

(这是 vector (Ex,Ey,Ez),但是这里很难做数学符号。)

现在构建三个矩阵。单位矩阵I:

    1 0 0
I = 0 1 0
0 0 1

EE 的张量积,我们称之为T:

      0 -Ez  Ey
T = Ez 0 -Ex
-Ey Ex 0

E 的叉积矩阵,我们称之为 P:

    ExEx ExEy ExEz
P = ExEy EyEy EyEz
ExEz EyEz EzEz

现在选择一个旋转角度,theta(以弧度为单位)。旋转矩阵将是:

R = cos(theta)I + (1-cos(theta))T + sin(theta)P

现在要旋转 vector v(在本例中为 lookAt),只需将 R 乘以它即可:

v之后 = Rv之前

关于c++ - DirectX 3D 围绕 lookAt 旋转 eyePt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197152/

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