فهرست منبع

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 سال پیش
والد
کامیت
931f0489bd
2فایلهای تغییر یافته به همراه16 افزوده شده و 2 حذف شده
  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