我正在研究飞行模拟器。我已经阅读了关于四元数的教程,(这一个: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,但如果我改变角度,它将无法正确旋转。那么我怎样才能找到角度?
答案 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)));