我正在使用glm创建一个相机类,但在使用lookat函数时遇到了一些问题。我使用四元数来表示旋转,但想要使用glm预先编写的lookat函数以避免重复代码。这是我的当前的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)
时,我的相机没有旋转到那个点。在调用lookat后调用glm::eulerangles(rotation)
时,我得到一个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;
}
为什么我没有得到正确的四元数,该怎么修复我的代码?