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

Rotating a model around all 3 (X, Y, Z) axis in DirectX 11.2 C++

本文关键字:模型 旋转 DirectX C++      更新时间:2023-10-16

我有下一个问题。我正在尝试同时围绕所有3个轴旋转三维模型。这意味着我想通过按下键盘上的按钮,绕X轴、Y轴、X轴旋转模型。问题是当我像这样使用XMMatrixRotationX、XMMatrixRotationY或XMMatrix旋转Z时:

    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,它只表示轴的矢量。我不明白我该如何访问这些,我在发布的代码中使用的方法不需要发送任何轴。我不明白为什么这是必要的,或者如何做,以防这是正确的解决方案。

任何帮助都将不胜感激。

我在这里找到了答案:

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=一页&q=XMMatrixRotationQuaternion;f=错误

我必须使用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)));
    }

像符咒一样工作:)