mat4 camera_mat = glm::lookAt(vec3{ 0.0f, 2.0f, 4.0f }, vec3{0}, vec3{ 0.0f, 1.0f, 0.0f }); // refactored above code to: camera.position = vec3{ 0.0f, 2.0f, 4.0f }; camera.rotation = glm::angleAxis(atan2(camera.position.y, camera.position.z), vec3{1.0f, 0.0f, 0.0f}); vec3 target = camera.rotation * vec3{0.0f, 0.0f, -1.0f}; mat4 camera_mat = glm::lookAt(camera.position, target, vec3{ 0.0f, 1.0f, 0.0f });