使对象围绕全局轴Directx旋转

时间:2014-10-04 23:39:36

标签: c++ matrix rotation directx axis

我正在尝试围绕全局y轴旋转对象(无论当前方向是什么,基本上都在0,1,0左右偏航)。我显示了一张图片,但声誉......我想绕全局轴而不是对象本地轴旋转偏航。例如,如果我通过俯仰略微倾斜一个盒子,然后尝试旋转偏航,它将以倾斜的角度旋转盒子而不是直的,就像盒子根本没有倾斜一样。

每个对象将其位置和旋转存储在每次更新调用时更新的矩阵中。轮换代码如下:

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll);
D3DXMatrixMultiply(&position, &rotation, &position);

其中position是每次更新时转换和旋转的未完成矩阵。这就是在本地旋转的东西,但我想通过全局轴旋转偏航。

如何编写它以便完成偏航旋转,好像局部向上矢量是(0,1,0)即使倾斜?

2 个答案:

答案 0 :(得分:0)

在下面的代码中有两个旋转矩阵,A和B.一个是由worldYaw围绕局部轴旋转,另一个是由worldYaw围绕全局轴旋转。

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll);
D3DXMatrixRotationYawPitchRoll(&worldRotation, worldYaw, 0, 0);
D3DXMatrixMultiply(&A, &rotation, &worldRotation);
D3DXMatrixMultiply(&B, &worldRotation, &rotation);

如果D3D使用行或列向量,我永远不会把它放在脑子里,所以我不能说A或B是否是您正在寻找的东西:)

答案 1 :(得分:0)

修正了问题。决定存储前一帧中的旧值,以重建位置矩阵。

我现在根据当前帧的变化构建一个矩阵,完成平移和旋转,然后在创建最终矩阵之前将这些值添加到总值中。

像魅力一样!