From 7b3a28065b49ec657ad7f8385ac48c1fd6fd2df0 Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 19 Apr 2021 10:07:38 +0200 Subject: [PATCH 1/2] Fixed loading errors when loading models without Normals or UVMaps, by modifying the fscanf format, and adding a missing break statement. --- src/engine/loaders/obj_loader.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 7c7662d..45844f8 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -76,7 +76,6 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ int matches = fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", x, x, x, x, x, x, x, x, x); fsetpos(file, &start); int newerMatches = 0; - switch (matches) { /** Vs, VTs and VNs all set */ @@ -101,12 +100,12 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ case 1: { /** Check for existance of V/// configuration.. */ - newerMatches = fscanf(file, "%d/// %d/// %d///\n", x, x, x); + newerMatches = fscanf(file, "%d// %d// %d//\n", x, x, x); fsetpos(file, &start); if (newerMatches == 3) { /** Configuration confirmed. */ - fscanf(file, "%d/// %d/// %d///\n", &vertexIndex[0], &vertexIndex[1], &vertexIndex[2]); + fscanf(file, "%d// %d// %d//\n", &vertexIndex[0], &vertexIndex[1], &vertexIndex[2]); } else { @@ -129,10 +128,13 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ } break; } + break; default: + { PRINT_ERR("Unknown faces format in .obj file!"); break; } + } if (matches == 9 || matches == 2 || matches == 1) { From b0ae873a88ea3cf90627b4a1979dbe29cc3755c9 Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 19 Apr 2021 11:19:18 +0200 Subject: [PATCH 2/2] Adjusted scanf results checking to correct value, fixing the loading of models without set normals. --- src/engine/loaders/obj_loader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 45844f8..5c065e1 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -88,7 +88,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ } break; /** Loaded only two digits (V, VT) succesfuly. Not setting VN. */ - case 2: + case 3: { fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", &vertexIndex[0], &coordIndex[0],