在DirectX 11.2 C ++中围绕所有3(X,Y,Z)轴旋转模型

时间:2014-09-10 22:35:53

标签: c++ rotation axis directx-11

我有下一个问题。我正在尝试同时围绕所有3轴旋转3D模型。这意味着我想围绕X轴,然后是Y轴旋转模型,然后通过按键盘上的按钮再次旋转X等。问题是我使用XMMatrixRotationX,XMMatrixRotationY或XMMatrixRotationZ时这样:

    void Rotate(float radians_x, float radians_y, float radians_z)
    {
        DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationZ(radians_z)));
        DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationY(radians_y)));
        DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationX(radians_x)));
    }

仅完成最后一次旋转。我希望能够围绕每个轴旋转特定角度(实际上是弧度)的对象,如代码中所示。我发现XMMatrixRotationAxis方法可以做到这一点,但它只需要一个角度参数,我想为每个轴使用不同的参数。任何人都可以帮我解决这个问题吗?

另外,我不知道将什么作为第一个参数发送到XMMatrixRotationAxis,它只是说一个轴矢量。我不明白我如何访问这些,我在发布的代码中使用的方法不需要发送到任何轴。我不明白为什么这是必要的,或者如何做到这一点,以防这是正确的解决方案。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我在这里找到了答案:

http://books.google.hr/books?id=7ZkLAAAAQBAJ&pg=PA251&lpg=PA251&dq=XMMatrixRotationQuaternion&source=bl&ots=xveQhsj-x_&sig=Ny6IdK1JNFBF99LyC_HY8b-y4tI&hl=hr&sa=X&ei=dtkQVOmmA8aXatfugZgL&ved=0CHEQ6AEwCA#v=onepage&q=XMMatrixRotationQuaternion&f=false

我必须使用XMMatrixRotationRollPitchYaw。代码现在看起来:

    void Rotate(float radians_x, float radians_y, float radians_z)
    {
        DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationRollPitchYaw(radians_x, radians_y, radians_z)));
    }

像魅力一样工作:)