A quaternion based camera for modern OpenGL