浏览代码

Fix .obj displacement texture parsing

The string for an opacity texture is a substring of the displacement
texture string. Due to the nature of the string comparison in the
material texture parsing, any displacement textures will be incorrectly
assigned as opacity textures. Fix this by simply performing the check
for displacement texture before checking for opacity texture.
Eddie James 7 年之前
父节点
当前提交
5321e1036d
共有 1 个文件被更改,包括 5 次插入5 次删除
  1. 5 5
      code/ObjFileMtlImporter.cpp

+ 5 - 5
code/ObjFileMtlImporter.cpp

@@ -332,6 +332,11 @@ void ObjFileMtlImporter::getTexture() {
         // Specular texture
         // Specular texture
         out = & m_pModel->m_pCurrentMaterial->textureSpecular;
         out = & m_pModel->m_pCurrentMaterial->textureSpecular;
         clampIndex = ObjFile::Material::TextureSpecularType;
         clampIndex = ObjFile::Material::TextureSpecularType;
+    } else if ( !ASSIMP_strincmp( pPtr, DisplacementTexture1.c_str(), static_cast<unsigned int>(DisplacementTexture1.size()) ) ||
+                !ASSIMP_strincmp( pPtr, DisplacementTexture2.c_str(), static_cast<unsigned int>(DisplacementTexture2.size()) ) ) {
+        // Displacement texture
+        out = &m_pModel->m_pCurrentMaterial->textureDisp;
+        clampIndex = ObjFile::Material::TextureDispType;
     } else if ( !ASSIMP_strincmp( pPtr, OpacityTexture.c_str(), static_cast<unsigned int>(OpacityTexture.size()) ) ) {
     } else if ( !ASSIMP_strincmp( pPtr, OpacityTexture.c_str(), static_cast<unsigned int>(OpacityTexture.size()) ) ) {
         // Opacity texture
         // Opacity texture
         out = & m_pModel->m_pCurrentMaterial->textureOpacity;
         out = & m_pModel->m_pCurrentMaterial->textureOpacity;
@@ -354,11 +359,6 @@ void ObjFileMtlImporter::getTexture() {
         // Reflection texture(s)
         // Reflection texture(s)
         //Do nothing here
         //Do nothing here
         return;
         return;
-    } else if ( !ASSIMP_strincmp( pPtr, DisplacementTexture1.c_str(), static_cast<unsigned int>(DisplacementTexture1.size()) ) ||
-                !ASSIMP_strincmp( pPtr, DisplacementTexture2.c_str(), static_cast<unsigned int>(DisplacementTexture2.size()) ) ) {
-        // Displacement texture
-        out = &m_pModel->m_pCurrentMaterial->textureDisp;
-        clampIndex = ObjFile::Material::TextureDispType;
     } else if ( !ASSIMP_strincmp( pPtr, SpecularityTexture.c_str(), static_cast<unsigned int>(SpecularityTexture.size()) ) ) {
     } else if ( !ASSIMP_strincmp( pPtr, SpecularityTexture.c_str(), static_cast<unsigned int>(SpecularityTexture.size()) ) ) {
         // Specularity scaling (glossiness)
         // Specularity scaling (glossiness)
         out = & m_pModel->m_pCurrentMaterial->textureSpecularity;
         out = & m_pModel->m_pCurrentMaterial->textureSpecularity;