Exemple #1
0
void CGmResMan::NewMeshObj( const char *pcSubDir, const char *pcFileName, CArray<CGMeshObj *> &roArr, bool bTexSmooth, bool bRawPoly )
{
	roArr.Clear();
	
	CStr oPre( DATA_DIR + "model/" + pcSubDir );
	if( oPre[oPre.GetSize()-1] != '/' )
		oPre += '/';
	CFileBlockTxt oFile;
	if( oFile.Load( ( oPre + pcFileName ).GetData() ) )
	{
		LOG( "Loading %s.\n", ( oPre + pcFileName ).GetData() );
		CStr oMaterialLibName;
		if( CGMeshObj::LoadModel_( oFile.GetString(), &roArr, bRawPoly, &oMaterialLibName ) )
		{
			LOG( "%d OBJ-Meshes loaded.\n", roArr.GetSize() );
			
			bool bMtllibOk = false;
			CFileBlockTxt oFileMaterialLib;
			if( oMaterialLibName.GetSize() )
			{
				if( oFileMaterialLib.Load( ( oPre + oMaterialLibName ).GetData() ) )
				{
					//LOG( "\nmtllib:\n%s\n", (const char *)oFileMaterialLib.m_pucData );
					LOG( "%s loaded.\n", oMaterialLibName.GetData() );
					bMtllibOk = true;
				}
			}
			
			for( unsigned int i=0; i<roArr.GetSize(); ++i )
			{
				CGMeshObj *poMesh = roArr[i];
				//poMesh->RotateX( M_PI );
				//poMesh->ScaleX( 1.1f );
				//poMesh->ScaleY( 1.1f );
				//poMesh->ScaleZ( 1.1f );
				LOG( "\t%s\n", poMesh->m_oName.GetData() );
				LOG( "\t%d vertices\n", poMesh->m_oArrVertex.GetSize() );
				LOG( "\t%d indices\n", poMesh->m_oArrIndex.GetSize() );
				LOG( "\tmaterial: %s\n", poMesh->m_oMaterialName.GetData() );
				
				if( bMtllibOk )
				{
					CStr oTexNameDiffuse, oTexNameNormal;
					
					poMesh->LoadMaterial(
						oFileMaterialLib.GetString(),
						poMesh->m_oMaterialName,
						&oTexNameDiffuse, 0, &oTexNameNormal );
					
					if( !bRawPoly )
					{
						if( oTexNameDiffuse.GetSize() )
						{
							poMesh->SetTex( NewTexture( oTexNameDiffuse, bTexSmooth, false ), 0 );
						}
						if( oTexNameNormal.GetSize() )
						{
							poMesh->SetTex( NewTexture( oTexNameNormal, false, false ), 1 );
						}
					}
				}
				else if( !bRawPoly && poMesh->m_oMaterialName.GetSize() )
				{
					poMesh->SetTex( NewTexture( poMesh->m_oMaterialName, bTexSmooth, false ), 0 );
				}
				
				poMesh->m_bEnableColor = false; // Hat keine Funktion bei beim Wavefront Object Meshes.
				poMesh->Init();
				
				m_oArrMesh.Append( poMesh ); // new
			}
		}
	}
	else
	{
		ERR( "OBJ Mesh %s.\n", pcFileName );
	}
}