3D 空間で機銃掃射できるように、既に回転行列を計算したオブジェクトの get Right ベクトルを見つけようとしています。これまでに私は得た
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