I’m trying to rotate a tutorial cube, just like probably everyone in the beginning, except without using the glm::lookAt(). This code works now, but I don’t get why… I probably just need a nudge in the right direction and someone to tell me that I’ve been missing something obvious.
The question is this: why does this code work (produce a cube which is NOT off screen) when translation (zoom) comes first, before the rotation?
Previous code used to have rotation first, and translation (zoom) at the end but the result looked like the cube rotated off the screen around the camera’s already translated position (obviously an order of multiplications problem).
Many, many thanks.
//5. MODEL-VIEW-PROJECTION TRANSFORMATIONS glm::mat4 m_MODEL; glm::mat4 m_VIEW; glm::mat4 m_PROJ; const glm::vec3 X(1.0f, 0.0f, 0.0f); const glm::vec3 Y(0.0f, 1.0f, 0.0f); const glm::vec3 Z(0.0f, 0.0f, 1.0f); //view (this is basically inverse of camera movement, applied to all meshes)? //zoom float dolly; //+ means content gets closer dolly = -3; m_VIEW = glm::translate(m_VIEW, glm::vec3(0, 0, dolly)); //orbit float angle_x, angle_y; //+ means content rotates left/down angle_x = glm::radians(10.0f); angle_y = glm::radians(5.0f); m_VIEW = glm::rotate(m_VIEW, angle_x, X); //m_VIEW = glm::rotate(m_VIEW, angle_y, Y); //pan float pan_x, pan_y; //pan content with respect to camera pan_x = 0; pan_y = 0; m_VIEW = glm::translate(m_VIEW, glm::vec3(pan_x, pan_y, 0));