 <p>I've found seen screen shaking issues are commonly to do with the order in which you process events, update objects and the camera, before drawing the scene (or the physics engine is causing it :P). With a high framerate you might not notice small imperfections. You might want to add a Sleep/usleep to help expose these issues. For example, if your camera position is based on the camera rotation, but you update the position before processing the mouse events the camera position/rotation can be a frame out of sync.</p> <p>This is a good reason to process inputs, movement and rendering in very separate stages.</p> <p>Your lookAt function does look rather complex. lookAt is very useful when you want a camera that looks-at something, but in this case you're after a camera that looks-from a camera position. This is easier to implement by manually constructing the inverse transformations to position the camera object before drawing the sceene. For example, if you want to move left, translate everything else right (thus inverse)...</p> <pre><code>glLoadIdentity(); glRotatef(camera.rotX, 1.0f, 0.0f, 0.0f); glRotatef(camera.rotY, 0.0f, 1.0f, 0.0f); glRotatef(camera.rotZ, 0.0f, 0.0f, 1.0f); glTranslatef(-camera.posX, -camera.posY, -camera.posZ); </code></pre>