我有一个相机,它有一个位置和一个四元数,我一直在尝试从中生成一个View矩阵。
我试过了
auto camera_rotation = glm::mat4_cast(camera.orientation);
auto camera_translation = glm::translate(glm::mat4(), camera.position);
auto viewMatrix = glm::inverse(camera_translation * camera_rotation);
然后我尝试了
auto camera_dir = camera.position + glm::rotate(camera.orientation, glm::vec3(1, 0, 0));
auto camera_up = glm::rotate(camera.orientation, glm::vec3(0, 1, 0));
auto viewMatrix = glm::lookAt(camera.position, camera_dir, camera_up);
但是camera_up并不总是正确的。
如果我手动将ViewMatrix设置为
glm::lookAt(camera.position, glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
然后我看到了我期望看到的内容,所以我认为其余的计算是正确的。
我该如何正确地做到这一点?