вращение — вращение модели вокруг всех 3 (X, Y, Z) осей в DirectX 11.2 Переполнение стека

У меня следующая проблема. Я пытаюсь повернуть 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

Решение

Я нашел ответ здесь:

http://books.google.hr/books?id=7ZkLAAAAQBAJ&пг = PA251&= PA251 сжиженный газ&дк = XMMatrixRotationQuaternion&Источник = бл&отс = xveQhsj-X_&сиг = Ny6IdK1JNFBF99LyC_HY8b-y4tI&гл = ч&са = Х&е = dtkQVOmmA8aXatfugZgL&вед = 0CHEQ6AEwCA # v = OnePage&д = XMMatrixRotationQuaternion&е = ложь

Я должен использовать 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)));
}

Работает как шарм 🙂

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector