我有下一个问题。我正在尝试同时围绕所有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,它只是说一个轴矢量。我不明白我如何访问这些,我在发布的代码中使用的方法不需要发送到任何轴。我不明白为什么这是必要的,或者如何做到这一点,以防这是正确的解决方案。
非常感谢任何帮助。
答案 0 :(得分:2)
我在这里找到了答案:
我必须使用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)));
}
像魅力一样工作:)