Browse Source

Support lowercase 'ns' and 'ni' obj material tokens

Previously, the obj material parser would interpret all key tokens
starting with 'n' as 'newmtl' tokens. However, there are other tokens
that can start with 'n', namely 'ns' and 'ni' for material properties.
Make the parser robust to such cases, despite their canonical forms
being uppercase.

Resolves #410.
Jared Duke 10 years ago
parent
commit
c7b6b5ea2f
1 changed files with 8 additions and 13 deletions
  1. 8 13
      code/ObjFileMtlImporter.cpp

+ 8 - 13
code/ObjFileMtlImporter.cpp

@@ -166,25 +166,27 @@ void ObjFileMtlImporter::load()
 			}
 			}
 			break;
 			break;
 
 
-		case 'N':	// Shineness
+		case 'N':
+		case 'n':
 			{
 			{
 				++m_DataIt;
 				++m_DataIt;
-				switch(*m_DataIt) 
+				switch(*m_DataIt)
 				{
 				{
-				case 's':
+				case 's':	// Specular exponent
 					++m_DataIt;
 					++m_DataIt;
 					getFloatValue(m_pModel->m_pCurrentMaterial->shineness);
 					getFloatValue(m_pModel->m_pCurrentMaterial->shineness);
 					break;
 					break;
-				case 'i': //Index Of refraction 
+				case 'i':	// Index Of refraction
 					++m_DataIt;
 					++m_DataIt;
 					getFloatValue(m_pModel->m_pCurrentMaterial->ior);
 					getFloatValue(m_pModel->m_pCurrentMaterial->ior);
 					break;
 					break;
+				case 'e':	// New material
+					createMaterial();
+					break;
 				}
 				}
 				m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
 				m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
-				break;
 			}
 			}
 			break;
 			break;
-		
 
 
 		case 'm':	// Texture
 		case 'm':	// Texture
 		case 'b':   // quick'n'dirty - for 'bump' sections
 		case 'b':   // quick'n'dirty - for 'bump' sections
@@ -194,13 +196,6 @@ void ObjFileMtlImporter::load()
 			}
 			}
 			break;
 			break;
 
 
-		case 'n':	// New material name
-			{
-				createMaterial();
-				m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
-			}
-			break;
-
 		case 'i':	// Illumination model
 		case 'i':	// Illumination model
 			{
 			{
 				m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
 				m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);