DirectX 3D旋转eyePt环绕lookAt

时间:2014-11-28 23:28:05

标签: c++ matrix rotation directx-9

我真正依赖于我需要的数学数学,一旦你进入微积分和几何学,这从未成为我的强项。

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

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

我需要在lookAt左右旋转eyePt我该怎么做我知道我需要一个矩阵但是我应该填写它以及我如何在其中进行旋转我只是不要不明白。

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

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

1 个答案:

答案 0 :(得分:1)

取单位矢量eyePt,它将是旋转轴。 (我认为它是一个单位向量;如果没有,我可以告诉你如何把它变成单位向量。)我们称之为 E

    Ex
E = Ey
    Ez

(这是矢量(E x ,E y ,E z ),但这里很难做数学符号。)

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

    1 0 0
I = 0 1 0
    0 0 1

E E 的张量积,我们称之为 T

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

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

    ExEx ExEy ExEz
P = ExEy EyEy EyEz
    ExEz EyEz EzEz

现在选择一个旋转角度θ,以弧度表示。旋转矩阵将是:

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

现在旋转矢量v(在本例中为lookAt),只需乘以 R

在 之前 = R v 之后的