C++ кватернион разъяснения

Я работаю над симулятором полета. Я прочитал учебник по кватернионам (этот: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/), так что он очень новый для меня.

Из того, что я понимаю, кватернионы должны вращать объект с использованием вектора направления и приводить ориентацию объекта в соответствие с направлением, а вращение кватерниона не должно перемещать вектор, а просто заставлять его поворачиваться вокруг себя. Я правда?

Если да, то это мой код:

void Plane::Update()
{
    m_matrix = GLM_GTX_quaternion::toMat4( GLM_GTX_quaternion::angleAxis( radians( m_angle ), normalize( m_planeDirection ) ) );
}

Когда модели моей плоскости указывают на вектор x, моя плоскость будет правильно вращаться вокруг вектора x с углом, равным 0, но если я изменю угол, он не будет вращаться правильно. Так как я могу найти угол?

1 ответ

Решение

Да, вы правы - Quaternion вращает объект вокруг вектора направления. Вы также должны использовать glm:: quat typedef при работе с кватернионами.

#include <glm/gtc/quaternion.hpp>
//...
glm::mat4 m = glm::mat4_cast(glm::angleAxis(glm::radians(m_angle), glm::normalize(m_planeDirection)));

Функция glm::rotate также работает с кватернионами

glm::mat4 m = glm::mat4_cast(glm::rotate(glm::quat(), 45.0f, glm::vec3(1.0f)));
Другие вопросы по тегам