I'm making a camera object for rendering with OpenGL. However, instead of using the typical "LookAt" method I'm trying to use just a Quaternion for orientation and a Vector3 for position. Instead of messing with euler angles to rotate the Camera I use quaternions directly, like this:
glm::vec3 up = glm::normalize(glm::inverse(cam.Orientation) * glm::vec3(0, 1, 0)); glm::vec3 right = glm::vec3(-1, 0, 0); cam.Orientation = glm::rotate(cam.Orientation, glm::radians(-xoffset), up); cam.Orientation = glm::rotate(cam.Orientation, glm::radians(-yoffset), right);
yoffset are just the amount the mouse has moved since the last frame.
I create my view matrix from the inverse of the two variables. I've already got FPS style camera movement and rotation working. The problem I have now is that I want to prevent the camera from being able to flip over. I.E. moving the mouse up or down enough that the view becomes upside down. Is there a way to clamp the rotation using purely quaternions to prevent this?