我正在使用 glm 创建一个相机类,并且在使用 Lookat 函数时遇到了一些问题。我使用四元数来表示旋转,但我想使用 glm 预先编写的 Lookat 函数来避免重复代码。这是我现在的查看功能:
void Camera::LookAt(float x, float y, float z) {
glm::mat4 lookMat = glm::lookAt(position, glm::vec3(x, y, z), glm::vec3(0, 1, 0));
rotation = glm::toQuat(lookMat);
}
然而当我打电话时LookAt(0.0f,0.0f,0.0f)
,我的相机没有旋转到那个点。当我打电话时glm::eulerangles(rotation)
在lookat调用之后,我得到一个具有以下值的vec3:(180.0f,0.0f,180.0f)。position
是 (0.0f,0.0f,-10.0f),所以我根本不应该进行任何旋转来查看 0,0,0。这是构建视图矩阵的函数:
glm::mat4 Camera::GetView() {
view = glm::toMat4(rotation) * glm::translate(glm::mat4(), position);
return view;
}
为什么我没有得到正确的四元数,如何修复我的代码?