From e8fa7ceb79613188c495b80a332875a1afdab8cf Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Wed, 1 Sep 2021 21:29:20 +0200 Subject: [PATCH] [models] Fixed counting loop for face amount per material (#1967) --- src/models.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/models.c b/src/models.c index a464c9fdf..b175dd94d 100644 --- a/src/models.c +++ b/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