void Model::loadModel(const QString &objFullFilePath) { if (!objLoader_.load(objFullFilePath, meshes_, vertices_, indices_, materials_)) { qDebug() << "Obj Model Failed to Load"; exit(EXIT_FAILURE); } loadModelTextures(FRTMUtils::getModelFilePath(objFullFilePath)); }
void gSdlGl::visit(object3D* _object3D) { model* l_model; if(_object3D->getModelID() < m_models.size() && _object3D->getModelID() > -1) { l_model = m_models[_object3D->getModelID()]; } else { //attempt to load based on filename. l_model = new milkshapeModel(); if(!l_model->loadModelData(_object3D->getFilename())) { delete l_model; return; } else { loadModelTextures(l_model); m_models.push_back(l_model); _object3D->setModelID(m_models.size()-1); } } GLboolean texEnabled = glIsEnabled( GL_TEXTURE_2D ); // Draw by group for ( int i = 0; i < l_model->getNumMeshes(); i++ ) { int materialIndex = l_model->getMeshes()[i].m_materialIndex; if ( materialIndex >= 0 ) { glMaterialfv( GL_FRONT, GL_AMBIENT, l_model->getMaterials()[materialIndex].m_ambient ); glMaterialfv( GL_FRONT, GL_DIFFUSE, l_model->getMaterials()[materialIndex].m_diffuse ); glMaterialfv( GL_FRONT, GL_SPECULAR, l_model->getMaterials()[materialIndex].m_specular ); glMaterialfv( GL_FRONT, GL_EMISSION, l_model->getMaterials()[materialIndex].m_emissive ); glMaterialf( GL_FRONT, GL_SHININESS, l_model->getMaterials()[materialIndex].m_shininess ); if ( l_model->getMaterials()[materialIndex].m_texture > 0 ) { glBindTexture(GL_TEXTURE_2D, l_model->getMaterials()[materialIndex].m_texture); glEnable( GL_TEXTURE_2D ); } else glDisable( GL_TEXTURE_2D ); } else { // Material properties? glDisable( GL_TEXTURE_2D ); } glBegin( GL_TRIANGLES ); { for ( int j = 0; j < l_model->getMeshes()[i].m_numTriangles; j++ ) { int triangleIndex = l_model->getMeshes()[i].m_pTriangleIndices[j]; const model::triangle* pTri = &(l_model->getTriangles()[triangleIndex]); for ( int k = 0; k < 3; k++ ) { int index = pTri->m_vertexIndices[k]; glNormal3fv( pTri->m_vertexNormals[k] ); glTexCoord2f( pTri->m_s[k], pTri->m_t[k] ); glVertex3fv( l_model->getVertices()[index].m_location ); } } } glEnd(); } if (texEnabled) glEnable( GL_TEXTURE_2D ); else glDisable( GL_TEXTURE_2D ); }