Răsfoiți Sursa

Properly parse 'mg' keyword in .obj files

The 'mg' keyword is currently being interpreted as a material library keyword,
when it really refers to the merging group.  Handle this case, in effect ignoring
the keyword as merging groups are currently unsupported.
Jared Duke 11 ani în urmă
părinte
comite
931f0489bd
2 a modificat fișierele cu 16 adăugiri și 2 ștergeri
  1. 14 2
      code/ObjFileParser.cpp
  2. 2 0
      code/ObjFileParser.h

+ 14 - 2
code/ObjFileParser.cpp

@@ -149,9 +149,12 @@ void ObjFileParser::parseFile()
 			}
 			break;
 
-		case 'm': // Parse a material library
+		case 'm': // Parse a material library or merging group ('mg')
 			{
-				getMaterialLib();
+				if (*(m_DataIt + 1) == 'g')
+					getGroupNumberAndResolution();
+				else
+					getMaterialLib();
 			}
 			break;
 
@@ -609,6 +612,15 @@ void ObjFileParser::getGroupNumber()
 	m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
 }
 
+// -------------------------------------------------------------------
+//	Not supported
+void ObjFileParser::getGroupNumberAndResolution()
+{
+	// Not used
+
+	m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
+}
+
 // -------------------------------------------------------------------
 //	Stores values for a new object instance, name will be used to 
 //	identify it.

+ 2 - 0
code/ObjFileParser.h

@@ -102,6 +102,8 @@ private:
 	void getGroupName();
 	/// Gets the group number from file.
 	void getGroupNumber();
+	/// Gets the group number and resolution from file.
+	void getGroupNumberAndResolution();
 	/// Returns the index of the material. Is -1 if not material was found.
 	int getMaterialIndex( const std::string &strMaterialName );
 	/// Parse object name