2014-09-01 98 views
0

我正在飞行模拟器上工作。我读过关于四元数的教程,(这一个:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/),所以它对我来说是非常新的。C++ quaternion澄清

从我所了解的情况来看,四元数应该使用方向向量来旋转一个对象,并使对象的方向与方向匹配,并且旋转四元数不应该移动向量,而只是让他自己转过身。我真的吗?

如果是的话,这是我的代码:

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

时的指向X矢量我的飞机模型,我的飞机将正确绕等于0角度的X矢量,但如果我改变角度,它不会正确旋转。那么我怎么才能找到角度呢?

回答

1

是的,你是对的 - 四元数围绕一个方向矢量旋转对象。在使用四元数时,您还应该使用typedef:glm :: quat

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

GLM ::旋转功能还与四元

glm::mat4 m = glm::mat4_cast(glm::rotate(glm::quat(), 45.0f, glm::vec3(1.0f))); 
+0

但随后,为什么angleAxis(0.0F,VEC3(0.0F,0.0F,-1.0F))定向我的飞机到x矢量? – Aulaulz 2014-09-05 01:02:03

+0

到x轴*我的意思是。 – Aulaulz 2014-09-05 08:08:10

+0

我想我很难理解你的问题是什么。但你在这里说过 - “四元数应该使用方向矢量旋转一个物体,并使物体的方向与方向**”相匹配。所以你可能在寻找一个LookAt函数(这很有意义,因为你使用的是平面),在你已经链接的文章中讨论过。 – Iggy 2014-09-05 13:14:59