У меня следующая проблема. Я пытаюсь повернуть 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, он просто говорит вектор оси. Я не понимаю, как мне получить к ним доступ, методы, которые я использовал в опубликованном коде, не нужно отправлять по какой-либо оси. Я не понимаю, почему это необходимо, или как это сделать, если это правильное решение.
Любая помощь приветствуется.
Я нашел ответ здесь:
Я должен использовать 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)));
}
Работает как шарм 🙂