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