如何通过glm中的quaternion旋转任何矢量?
我正在尝试四元数旋转,我似乎无法正确地进行......我试图通过四元数(3个矢量= fwVec3,upVec3,rightVec3)旋转每个矢量,但轴未正确旋转 - 对于实例 - 当我围绕对象的右旋转90度时,对象面朝下,意味着它向上的角度现在旋转了90度 - 但是当我围绕对象的新向上旋转时,对象不会围绕它自己的向上旋转,而是全局的世界上升...
当我说我一直在寻找一段时间时,请相信我,我似乎找不到任何有助于......
我的代码:
班级成员:
glm::vec3 m_DirectionWS = glm::vec3(1.0f, 0.0f, 0.0f); // FORWARD
glm::vec3 m_UpWS = glm::vec3(0.0f, 1.0f, 0.0f); // UP
glm::vec3 m_RightWS = glm::vec3(0.0f, 0.0f, 1.0f); // RIGHT
旋转方法:
void rotate(const float& angle, const glm::vec3& axis)
{
const float& aot = angle / 2.0f;
const float& cos_aot = sin(aot);
const float& sin_aot = cos(aot);
const glm::quat& quaternion = glm::quat(cos_aot, sin_aot * axis[0], sin_aot * axis[1], sin_aot * axis[2]);
// Multiply each local axis (vec3) with quaternion & normalize them
m_DirectionWS = glm::conjugate(quaternion) * m_DirectionWS * quaternion;
m_UpWS = glm::conjugate(quaternion) * m_UpWS * quaternion;
m_RightWS = glm::conjugate(quaternion) * m_RightWS * quaternion;
m_ModelMtx = glm::lookAt(m_Position, m_Position + m_DirectionWS, m_UpWS)
}
在主循环中调用旋转函数:
试图围绕它自己的向上旋转实体
entity->rotate(0.01f, entity->getUpWS());
我究竟做错了什么? 如果我理解正确,那么它就是将每个轴与旋转四元数相乘,然后生成一个模型矩阵。
我使用glm :: lookAt(); 使用世界空间中实体的位置,worldpos +实体的正向方向来构建这个矩阵,以获得对象所面对的位置和向上位置。
我不确定它是乘法的顺序,还是我构建矩阵的方式,但是这里的某些工作不正确。
任何人都知道四元数三维旋转谁可以帮助我解决这个例子,使用实体轴fw,向上,向右和四元数(角度,轴)的3个向量来构建模型矩阵?
链接地址: http://www.djcxy.com/p/81799.html