我正在尝试围绕全局y轴旋转对象(无论当前方向是什么,基本上都在0,1,0左右偏航)。我显示了一张图片,但声誉......我想绕全局轴而不是对象本地轴旋转偏航。例如,如果我通过俯仰略微倾斜一个盒子,然后尝试旋转偏航,它将以倾斜的角度旋转盒子而不是直的,就像盒子根本没有倾斜一样。
每个对象将其位置和旋转存储在每次更新调用时更新的矩阵中。轮换代码如下:
D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll);
D3DXMatrixMultiply(&position, &rotation, &position);
其中position是每次更新时转换和旋转的未完成矩阵。这就是在本地旋转的东西,但我想通过全局轴旋转偏航。
如何编写它以便完成偏航旋转,好像局部向上矢量是(0,1,0)即使倾斜?
答案 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)
修正了问题。决定存储前一帧中的旧值,以重建位置矩阵。
我现在根据当前帧的变化构建一个矩阵,完成平移和旋转,然后在创建最终矩阵之前将这些值添加到总值中。
像魅力一样!