Browse Source

Ogre: MaterialLoader now searches for Materialfile with the MaterialName as Filename

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1192 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
jonathanklein 13 năm trước cách đây
mục cha
commit
005887f381
1 tập tin đã thay đổi với 27 bổ sung18 xóa
  1. 27 18
      code/OgreMaterial.cpp

+ 27 - 18
code/OgreMaterial.cpp

@@ -119,33 +119,36 @@ aiMaterial* OgreImporter::LoadMaterial(const std::string MaterialName) const
 	}
 	*/
 
-
-	//the filename typically ends with .mesh or .mesh.xml
-	const string MaterialFileName=m_CurrentFilename.substr(0, m_CurrentFilename.rfind(".mesh"))+".material";
-	DefaultLogger::get()->info("Trying to load " + MaterialFileName);
-	
-
-	aiMaterial *NewMaterial=new aiMaterial();
-
-	aiString ts(MaterialName.c_str());
-	NewMaterial->AddProperty(&ts, AI_MATKEY_NAME);
-
 	//Read the file into memory and put it in a stringstream
 	stringstream ss;
 	{// after this block, the temporarly loaded data will be released
-		IOStream* MatFilePtr=m_CurrentIOHandler->Open(MaterialFileName);
+
+		/*
+		We have 3 guesses for the Material filename:
+		- the Material Name
+		- the Name of the mesh file
+		- the DefaultMaterialLib (which you can set before importing)
+		*/
+		
+		IOStream* MatFilePtr=m_CurrentIOHandler->Open(MaterialName+".material");
 		if(NULL==MatFilePtr)
 		{
-			//try the default mat Library
+			//the filename typically ends with .mesh or .mesh.xml
+			const string MaterialFileName=m_CurrentFilename.substr(0, m_CurrentFilename.rfind(".mesh"))+".material";
+
+			IOStream* MatFilePtr=m_CurrentIOHandler->Open(MaterialFileName);
 			if(NULL==MatFilePtr)
 			{
-				
-				MatFilePtr=m_CurrentIOHandler->Open(m_MaterialLibFilename);
+				//try the default mat Library
 				if(NULL==MatFilePtr)
 				{
-					DefaultLogger::get()->error(m_MaterialLibFilename+" and "+MaterialFileName + " could not be opened, Material will not be loaded!");
-					delete NewMaterial;
-					return NULL;
+				
+					MatFilePtr=m_CurrentIOHandler->Open(m_MaterialLibFilename);
+					if(NULL==MatFilePtr)
+					{
+						DefaultLogger::get()->error(m_MaterialLibFilename+" and "+MaterialFileName + " could not be opened, Material will not be loaded!");
+						return NULL;
+					}
 				}
 			}
 		}
@@ -157,6 +160,12 @@ aiMaterial* OgreImporter::LoadMaterial(const std::string MaterialName) const
 		ss << &FileData[0];
 	}
 
+	//create the material
+	aiMaterial *NewMaterial=new aiMaterial();
+
+	aiString ts(MaterialName.c_str());
+	NewMaterial->AddProperty(&ts, AI_MATKEY_NAME);
+
 	string Line;
 	ss >> Line;
 //	unsigned int Level=0;//Hierarchielevels in the material file, like { } blocks into another