2
0
Эх сурвалжийг харах

[models] Fixed counting loop for face amount per material (#1967)

Tristan Schulz 4 жил өмнө
parent
commit
e8fa7ceb79
1 өөрчлөгдсөн 10 нэмэгдсэн , 8 устгасан
  1. 10 8
      src/models.c

+ 10 - 8
src/models.c

@@ -3491,6 +3491,11 @@ RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Ve
 //----------------------------------------------------------------------------------
 #if defined(SUPPORT_FILEFORMAT_OBJ)
 // Load OBJ mesh data
+//
+// Keep the following information in mind when reading this
+//  - A mesh is created for every material present in the obj file
+//  - the model.meshCount is therefore the materialCount returned from tinyobj
+//  - the mesh is automatically triangulated by tinyobj
 static Model LoadOBJ(const char *fileName)
 {
     Model model = { 0 };
@@ -3542,15 +3547,12 @@ static Model LoadOBJ(const char *fileName)
         // Count the faces for each material
         int *matFaces = RL_CALLOC(materialCount, sizeof(int));
 
-        for (unsigned int mi = 0; mi < meshCount; mi++)
-        {
-            for (unsigned int fi = 0; fi < meshes[mi].length; fi++)
-            {
-                int idx = attrib.material_ids[meshes[mi].face_offset + fi];
-                if (idx == -1) idx = 0; // for no material face (which could be the whole model)
-                matFaces[idx]++;
-            }
+        for(int fi = 0; fi< attrib.num_faces; fi++){
+            tinyobj_vertex_index_t face = attrib.faces[fi];
+            int idx = attrib.material_ids[fi];
+            matFaces[idx]++;
         }
+
         //--------------------------------------
         // Create the material meshes