我试图找到一个对象的右向量,我已经计算了一个旋转矩阵,以便它可以在3d空间中进行扫描。到目前为止,我已经
了 glm::quat gOrientation2 = glm::quat(glm::radians(entity.orientation));
glm::mat4 RotationMatrix = glm::mat4_cast(gOrientation2);
entup = glm::vec3(RotationMatrix[1][0], RotationMatrix[1][1], RotationMatrix[1][2]);
entforward = glm::vec3(RotationMatrix[2][0], RotationMatrix[2][1], RotationMatrix[2][2]);
entright = glm::vec3(RotationMatrix[0][0], RotationMatrix[0][1], RotationMatrix[0][2]) ;
在盯着它之后,我发布左右移动的处理程序,思考问题是否真的存在于那里。
//the (10, -10, 10) vec3 is just a generic speed that moves
//it forward then multiplied by dir.
if (glfwGetKey(65) == GLFW_PRESS){
if(entity.player == 1)
entity.position += glm::vec3(10,-10,10)*entright*deltaTime;
}
if (glfwGetKey(68) == GLFW_PRESS){
if(entity.player == 1)
entity.position -= glm::vec3(10,-10,10)*entright*deltaTime;
}
这一直很好,只要我只是俯仰和偏航。一旦对象试图滚动,它的右边矢量面应该与它应该的位置成90度。我知道我可以提取RotationMatrix的第一行也获得Right,但是它实现了与上面代码相同的结果。
图片说明问题 http://img442.imageshack.us/img442/5046/directionexample.jpg
答案 0 :(得分:0)
您将四元数乘以的顺序令人困惑。尝试更改
glm::quat gOrientation2 = rY*rX*rZ;
到
glm::quat gOrientation2 = (rX*rY)*rZ
正如你所说,做交叉产品没有意义;只是直接从旋转矩阵中抓取正确的矢量。
这不是使用glm将euler角度转换为四元数然后转换矩阵的最有效或简洁的方法。 glm为此建立了功能;检查文档。