Exemple #1
0
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));
}
Exemple #2
0
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 );
}