c++ - Why is my model taking my skybox's texture? -
i have been looking @ problem days , can't figure out why model takes skybox's texture. has been bugging me forever. here looks like.this model looks after skybox loaded in. what model looks before skybox loaded scene.
core.cpp main loop
while (!m_window.closed()) { m_window.varupdate(); m_window.do_movement(); glclearcolor(0.1f, 0.1f, 0.1f, 1.0f); m_window.clear(); m_modelshader.enable(); glm::mat4 model; model = glm::scale(model, glm::vec3(0.2f)); //model = glm::translate(model, glm::vec3(5.0f)); glm::mat4 view = m_window.m_camera.getviewmatrix(); glm::mat4 projection = glm::perspective(m_window.m_camera.zoom, (float)m_window.getwindowx() / (float)m_window.getwindowy(), 0.1f, 100.0f); gluniformmatrix4fv(glgetuniformlocation(m_modelshader.m_programid, "model"), 1, gl_false, glm::value_ptr(model)); gluniformmatrix4fv(glgetuniformlocation(m_modelshader.m_programid, "view"), 1, gl_false, glm::value_ptr(view)); gluniformmatrix4fv(glgetuniformlocation(m_modelshader.m_programid, "projection"), 1, gl_false, glm::value_ptr(projection)); gluniform3f(glgetuniformlocation(m_modelshader.m_programid, "camerapos"), m_window.m_camera.position.x, m_window.m_camera.position.y, m_window.m_camera.position.z); m_model.draw(m_modelshader); gldepthfunc(gl_lequal); m_skyboxshader.enable(); glm::mat4 projections = glm::perspective(m_window.m_camera.zoom, (float)m_window.getwindowx() / (float)m_window.getwindowy(), 0.1f, 100.0f); glm::mat4 views = m_window.m_camera.getviewmatrix(); //this set glm::mat4(glm::mat3(m_window.m_camera.getviewmatrix())); center on camera. gluniformmatrix4fv(glgetuniformlocation(m_skyboxshader.m_programid, "projection"), 1, gl_false, glm::value_ptr(projections)); gluniformmatrix4fv(glgetuniformlocation(m_skyboxshader.m_programid, "view"), 1, gl_false, glm::value_ptr(views)); glbindvertexarray(svao); glactivetexture(gl_texture0); gluniform1i(glgetuniformlocation(m_skyboxshader.m_programid, "skybox"), 0); glbindtexture(gl_texture_cube_map, skyboxtex); gldrawarrays(gl_triangles, 0, 36); glbindvertexarray(0); gldepthfunc(gl_less); m_window.update(); }
opengl state machine, i.e. remembers , keeps using last configuration set. when draw model (m_model.draw) opengl still has skybox texture bound , active previous drawing iteration… , hence applies it. it's practice either
- clean opengl state @ end of rendering frame
- clean opengl state @ beginning of rendering frame
- clean opengl state set particular drawing batch right after batch
or
- set/unset opengl state what's required next drawing batch right before drawing particular batch.
in case suggest unbind texture after drawing skybox.
Comments
Post a Comment