void SolarViewer::draw_object(Shader& sh, Mesh3D& mesh, bool showTexture) { sh.setMatrix4x4Uniform("modelworld", mesh.getTransformation() ); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); if(showTexture) glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer( 3, GL_DOUBLE, 0, mesh.getVertexPointer() ); glNormalPointer( GL_DOUBLE, 0, mesh.getNormalPointer() ); if(showTexture) glTexCoordPointer( 2, GL_DOUBLE, 0, mesh.getUvTextureCoordPointer() ); for(unsigned int i = 0; i < mesh.getNumberOfParts(); i++) { sh.setIntUniform("useTexture", showTexture && mesh.getMaterial(i).hasDiffuseTexture()); sh.setVector3Uniform("diffuseColor", mesh.getMaterial(i).m_diffuseColor.x, mesh.getMaterial(i).m_diffuseColor.y, mesh.getMaterial(i).m_diffuseColor.z ); sh.setFloatUniform("specularExp", mesh.getMaterial(i).m_specularExp); if(showTexture && mesh.getMaterial(i).hasDiffuseTexture()) { mesh.getMaterial(i).m_diffuseTexture.bind(); sh.setIntUniform("texture", mesh.getMaterial(i).m_diffuseTexture.getLayer()); } glDrawElements( GL_TRIANGLES, mesh.getNumberOfFaces(i)*3, GL_UNSIGNED_INT, mesh.getVertexIndicesPointer(i) ); if(showTexture && mesh.getMaterial(i).hasDiffuseTexture()) { mesh.getMaterial(i).m_diffuseTexture.unbind(); } } glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); if(showTexture) glDisableClientState(GL_TEXTURE_COORD_ARRAY); }
void SolarViewer::draw_object(Shader& sh, Mesh3D& mesh) { sh.setMatrix4x4Uniform("modelworld", mesh.getTransformation() ); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer( 3, GL_DOUBLE, 0, mesh.getVertexPointer() ); glNormalPointer( GL_DOUBLE, 0, mesh.getNormalPointer() ); glTexCoordPointer( 2, GL_DOUBLE, 0, mesh.getUvTextureCoordPointer() ); for(unsigned int i = 0; i < mesh.getNumberOfParts(); i++) { glDrawElements( GL_TRIANGLES, mesh.getNumberOfFaces(i)*3, GL_UNSIGNED_INT, mesh.getVertexIndicesPointer(i) ); } glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); }