Как повернуть объект через кватернион если можно использовать только вектор/матрицу

У меня есть кватернион и у меня есть объект который нужно повернуть. Но объект не поддерживаем кватернион для поворотов. Он может использовать для этого матрицу 4 на 4 и/или vec3. Как преобразовать кватернион в mat4/vec3? Я использую OpenGL 4.6, glm и при передачи информации в шейдер я 3 аргументом указываю GL_FALSE.

Вот пример кода:

// из btQuaternion в glm::quat
glm::quat q = glm::quat(btQuat.w(), btQuat.x(), btQuat.y(), btQuat.z());

// пытаюсь вращать
glm::mat4 rotate = glm::mat4(1.0f) * glm::mat4_cast(q);

UPD1: Мне нужно управлять человеком/машиной и т.д на поверхности, версия для порядка самолётом может не подойти.

UPD2: Тело вращается по мировому пространству физического движка Bullet Physics и вращение преобразовывается в пространство OpenGL (правда пока безуспешно, код описанный выше не работает, при вращении тело то поднимается над землёй, то опускается под землю). Матрица объекта задаётся вот так:

// matModel - результат действий преобразования из bullet в opengl
// translate - позиция тела, rotate - вращение тела, scaling -
// размер тела и всё это тип glm::mat4
matModel = translate * rotate * scale;
// но, дело в том, что если убрать rotate, то тело перестаёт
// подниматься и опускаться
// matModel = translate * scale; // оно движется нормально, только нет поворотов

А также, кватернион задаёт вращение по осям используемые bullet и объект надо вращать по всем заданным bullet осям. Я их к сожалению не контролирую.

Примечание: По изображению видно что 1 шар парит над землёй, а второй внутри её. введите сюда описание изображения


Ответы (1 шт):

Автор решения: jdoseIOO

Всё, проблема решена. Она была из-за того что в 3д модели была смещена центральная точка. Код описанный в самом начале верный.

→ Ссылка