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)));