使用旋转矩阵确定对象的右矢量

时间:2013-04-16 18:25:59

标签: opengl matrix glm-math

我试图找到一个对象的右向量,我已经计算了一个旋转矩阵,以便它可以在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

1 个答案:

答案 0 :(得分:0)

您将四元数乘以的顺序令人困惑。尝试更改

glm::quat gOrientation2 = rY*rX*rZ;

glm::quat gOrientation2 = (rX*rY)*rZ

正如你所说,做交叉产品没有意义;只是直接从旋转矩阵中抓取正确的矢量。

这不是使用glm将euler角度转换为四元数然后转换矩阵的最有效或简洁的方法。 glm为此建立了功能;检查文档。