From 12ef639516f0c6514e539f391b93eb32476bbbbf Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 13:33:22 +0100 Subject: [PATCH 01/11] Changed: Allowed obj_loader to load different .obj face element configurations. New authorised .obj face elements configurations: v, v/t, v/vt/vn, v//vn --- src/engine/loaders/obj_loader.cpp | 144 ++++++++++++++++++++++++++---- 1 file changed, 128 insertions(+), 16 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index a200589..dcebc70 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -71,31 +71,143 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ } else if (strcmp(lineHeader, "f") == 0) { - int matches = fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", - &vertexIndex[0], &coordIndex[0], &normalIndex[0], - &vertexIndex[1], &coordIndex[1], &normalIndex[1], - &vertexIndex[2], &coordIndex[2], &normalIndex[2]); - if (matches != 9) - PRINT_ERR(".obj can't be read by this simple parser. Try exporting with other options"); + + int* x; + fpos_t start; + fgetpos(file,&start); + 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 */ + case 9: + { + printf("Case 9\n\n"); + fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", + &vertexIndex[0], &coordIndex[0], &normalIndex[0], + &vertexIndex[1], &coordIndex[1], &normalIndex[1], + &vertexIndex[2], &coordIndex[2], &normalIndex[2]); + + } + break; + /* Loaded only two digits (V, VT) succesfuly. Not setting VN. */ + case 2: + { + printf("Case 2\n"); + fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", + &vertexIndex[0], &coordIndex[0], + &vertexIndex[1], &coordIndex[1], + &vertexIndex[2], &coordIndex[2]); + + } + break; + /* Only V set. Checking for existance of VT or VN. */ + case 1: + { + printf("Case 1\n"); + /* Check for existance of V/// configuration.. */ + 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]); + + }else + { + /* Failed, checking configuration V//VN */ + newerMatches = fscanf(file, "%d//%d %d//%d %d//%d",x,x,x,x,x,x); + fsetpos(file,&start); + if(newerMatches==6){ + /* Configuration confirmed. */ + newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", + &vertexIndex[0], &normalIndex[0], + &vertexIndex[1], &normalIndex[1], + &vertexIndex[2], &normalIndex[2]); + } + else{ + /*Unknown configuration.*/ + PRINT_ERR("Unknown .obj face for .obj file!"); + printf("Obj file mentioned: \"%s\"\n",path); + } + } + } + default: + PRINT_ERR("Unknown faces format in .obj file!"); + printf(" \"%s\"\n",path); + break; + + } +/* if(ferror(file)) + PRINT_ERR("Failed to load .obj file \"%s\"."); else { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + int result=0; + char line [128]={'\0'}; + fgets(line,128,file); + + //if(fscanf - o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + }*/ + switch(matches) + { + case 9: + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + + o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + + o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + faceI += 3; + break; + } + case 2: + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + + o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + + break; + } + case 1: + { + if(newerMatches==3) + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + } + else if(newerMatches==6) + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + + o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + + } + break; + } - o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); - o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); - o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); - faceI += 3; } } } else break; + } o_result->calculateBoundingBoxes(); fclose(file); From 91e8f791b00f8e40917b41c7f92bb0b7f55bec48 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 14:01:52 +0100 Subject: [PATCH 02/11] Removed: Some test printfs I forgot to remove in last commit. --- src/engine/loaders/obj_loader.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index dcebc70..9ee95bb 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -84,7 +84,6 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ /* Vs, VTs and VNs all set */ case 9: { - printf("Case 9\n\n"); fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", &vertexIndex[0], &coordIndex[0], &normalIndex[0], &vertexIndex[1], &coordIndex[1], &normalIndex[1], @@ -95,7 +94,6 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ /* Loaded only two digits (V, VT) succesfuly. Not setting VN. */ case 2: { - printf("Case 2\n"); fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", &vertexIndex[0], &coordIndex[0], &vertexIndex[1], &coordIndex[1], @@ -106,7 +104,6 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ /* Only V set. Checking for existance of VT or VN. */ case 1: { - printf("Case 1\n"); /* Check for existance of V/// configuration.. */ newerMatches = fscanf(file, "%d/// %d/// %d///\n",x,x,x); fsetpos(file,&start); From 37703e69d095bcd5cab699b2e89d431aaabe70af Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 14:45:57 +0100 Subject: [PATCH 03/11] Changed: Use VSCode auto-formatter. --- src/engine/loaders/obj_loader.cpp | 193 +++++++++++++++--------------- 1 file changed, 95 insertions(+), 98 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 9ee95bb..8016f43 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -72,71 +72,71 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ else if (strcmp(lineHeader, "f") == 0) { - int* x; + int *x; fpos_t start; - fgetpos(file,&start); - 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; + fgetpos(file, &start); + 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) + switch (matches) { - /* Vs, VTs and VNs all set */ - case 9: + /* Vs, VTs and VNs all set */ + case 9: + { + fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", + &vertexIndex[0], &coordIndex[0], &normalIndex[0], + &vertexIndex[1], &coordIndex[1], &normalIndex[1], + &vertexIndex[2], &coordIndex[2], &normalIndex[2]); + } + break; + /* Loaded only two digits (V, VT) succesfuly. Not setting VN. */ + case 2: + { + fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", + &vertexIndex[0], &coordIndex[0], + &vertexIndex[1], &coordIndex[1], + &vertexIndex[2], &coordIndex[2]); + } + break; + /* Only V set. Checking for existance of VT or VN. */ + case 1: + { + /* Check for existance of V/// configuration.. */ + newerMatches = fscanf(file, "%d/// %d/// %d///\n", x, x, x); + fsetpos(file, &start); + if (newerMatches == 3) { - fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", - &vertexIndex[0], &coordIndex[0], &normalIndex[0], - &vertexIndex[1], &coordIndex[1], &normalIndex[1], - &vertexIndex[2], &coordIndex[2], &normalIndex[2]); - + /* Configuration confirmed. */ + fscanf(file, "%d/// %d/// %d///\n", &vertexIndex[0], &vertexIndex[1], &vertexIndex[2]); } - break; - /* Loaded only two digits (V, VT) succesfuly. Not setting VN. */ - case 2: + else { - fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", - &vertexIndex[0], &coordIndex[0], - &vertexIndex[1], &coordIndex[1], - &vertexIndex[2], &coordIndex[2]); - - } - break; - /* Only V set. Checking for existance of VT or VN. */ - case 1: - { - /* Check for existance of V/// configuration.. */ - 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]); - - }else + /* Failed, checking configuration V//VN */ + newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", x, x, x, x, x, x); + fsetpos(file, &start); + if (newerMatches == 6) { - /* Failed, checking configuration V//VN */ - newerMatches = fscanf(file, "%d//%d %d//%d %d//%d",x,x,x,x,x,x); - fsetpos(file,&start); - if(newerMatches==6){ - /* Configuration confirmed. */ - newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", - &vertexIndex[0], &normalIndex[0], - &vertexIndex[1], &normalIndex[1], - &vertexIndex[2], &normalIndex[2]); - } - else{ - /*Unknown configuration.*/ - PRINT_ERR("Unknown .obj face for .obj file!"); - printf("Obj file mentioned: \"%s\"\n",path); - } + /* Configuration confirmed. */ + newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", + &vertexIndex[0], &normalIndex[0], + &vertexIndex[1], &normalIndex[1], + &vertexIndex[2], &normalIndex[2]); + } + else + { + /*Unknown configuration.*/ + PRINT_ERR("Unknown .obj face for .obj file!"); + printf("Obj file mentioned: \"%s\"\n", path); } } - default: - PRINT_ERR("Unknown faces format in .obj file!"); - printf(" \"%s\"\n",path); - break; - } -/* if(ferror(file)) + default: + PRINT_ERR("Unknown faces format in .obj file!"); + printf(" \"%s\"\n", path); + break; + } + /* if(ferror(file)) PRINT_ERR("Failed to load .obj file \"%s\"."); else { @@ -147,64 +147,61 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ //if(fscanf }*/ - switch(matches) + switch (matches) { - case 9: + case 9: + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + + o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + + o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); + o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + faceI += 3; + break; + } + case 2: + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + + o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); + o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + + break; + } + case 1: + { + if (newerMatches == 3) + { + o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); + o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + } + else if (newerMatches == 6) { o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - - o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); - faceI += 3; - break; } - case 2: - { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - - o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); - - break; - } - case 1: - { - if(newerMatches==3) - { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - } - else if(newerMatches==6) - { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - - o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); - o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); - o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); - - } - break; - } - + break; + } } } } else break; - } o_result->calculateBoundingBoxes(); fclose(file); From 18db9875ad0c696693480a3cf564b0977e95fc2a Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 14:48:35 +0100 Subject: [PATCH 04/11] Removed: Redundant printf() calls below PRINT_ERR. --- src/engine/loaders/obj_loader.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 8016f43..0b19b24 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -127,13 +127,11 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ { /*Unknown configuration.*/ PRINT_ERR("Unknown .obj face for .obj file!"); - printf("Obj file mentioned: \"%s\"\n", path); } } } default: PRINT_ERR("Unknown faces format in .obj file!"); - printf(" \"%s\"\n", path); break; } /* if(ferror(file)) From 49713dc145ee15b2cce252bb5199655a89840adb Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 14:51:45 +0100 Subject: [PATCH 05/11] Added: Missing faceI integer increments. --- src/engine/loaders/obj_loader.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 0b19b24..2e32eef 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -172,7 +172,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); - + faceI += 2; break; } case 1: @@ -182,6 +182,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); + faceI += 1; } else if (newerMatches == 6) { @@ -192,6 +193,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + faceI += 2; } break; } From 607c2abc0c0cc41ffb081e27199f640f6b087018 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 15:42:33 +0100 Subject: [PATCH 06/11] Added: Information in mesh_frame on if STs/Normals are present, misc changes for PR #65 code review. --- src/engine/include/models/mesh_frame.hpp | 8 ++++++++ src/engine/loaders/obj_loader.cpp | 16 +++++++--------- src/engine/models/mesh_frame.cpp | 2 ++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/engine/include/models/mesh_frame.hpp b/src/engine/include/models/mesh_frame.hpp index 99ec249..d078bca 100644 --- a/src/engine/include/models/mesh_frame.hpp +++ b/src/engine/include/models/mesh_frame.hpp @@ -119,6 +119,9 @@ public: const u8 &areMaterialsAllocated() const { return _areMaterialsAllocated; }; const u8 &isBoundingBoxCalculated() const { return _isBoundingBoxCalculated; }; + const u8 &areSTsPresent() const { return _areSTsPresent; }; + const u8 &areNormalsPresent() const { return _areNormalsPresent; }; + /** Set STs count and allocate memory. */ void allocateSTs(const u32 &t_val); @@ -131,6 +134,9 @@ public: /** Set materials count and allocate memory. */ void allocateMaterials(const u32 &t_val); + void setSTsPresent(const u8 &b) { _areSTsPresent = b; }; + void setNormalsPresent(const u8 &b) { _areNormalsPresent = b; }; + /** * Calculates bounding box (AABB) for frame and for materiaals. * Should be called by data loader, @@ -144,6 +150,8 @@ private: _areVerticesAllocated, _areNormalsAllocated, _areMaterialsAllocated, + _areSTsPresent, + _areNormalsPresent, _isBoundingBoxCalculated; u32 vertexCount, stsCount, normalsCount, materialsCount; MeshMaterial *materials; diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 2e32eef..7b161ef 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -145,9 +145,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ //if(fscanf }*/ - switch (matches) - { - case 9: + if (matches == 9) { o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); @@ -156,14 +154,15 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + o_result->setSTsPresent(true); o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + o_result->setNormalsPresent(true); faceI += 3; - break; } - case 2: + else if (matches == 2) { o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); @@ -172,10 +171,10 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); + o_result->setSTsPresent(true); faceI += 2; - break; } - case 1: + else if (matches == 1) { if (newerMatches == 3) { @@ -193,10 +192,9 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); + o_result->setNormalsPresent(true); faceI += 2; } - break; - } } } } diff --git a/src/engine/models/mesh_frame.cpp b/src/engine/models/mesh_frame.cpp index ff9883d..b193577 100644 --- a/src/engine/models/mesh_frame.cpp +++ b/src/engine/models/mesh_frame.cpp @@ -25,6 +25,8 @@ MeshFrame::MeshFrame() _areVerticesAllocated = false; _areNormalsAllocated = false; _areMaterialsAllocated = false; + _areSTsPresent = false; + _areNormalsPresent = false; } MeshFrame::~MeshFrame() From 3c827a407bec29af7186ae9f1acfb4b269af5d84 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 15:49:31 +0100 Subject: [PATCH 07/11] Removed: Commented out code bit. --- src/engine/loaders/obj_loader.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 7b161ef..6ccded8 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -134,17 +134,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ PRINT_ERR("Unknown faces format in .obj file!"); break; } - /* if(ferror(file)) - PRINT_ERR("Failed to load .obj file \"%s\"."); - else - { - int result=0; - char line [128]={'\0'}; - fgets(line,128,file); - - //if(fscanf - }*/ if (matches == 9) { o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); From bd11955fd4f79ca8e43a7dd7051db7a23fc61e62 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 16:09:06 +0100 Subject: [PATCH 08/11] Changed: Comments to fit doxygen standard. --- src/engine/loaders/obj_loader.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 6ccded8..5876e19 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -81,7 +81,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ switch (matches) { - /* Vs, VTs and VNs all set */ + /** Vs, VTs and VNs all set */ case 9: { fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", @@ -90,7 +90,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ &vertexIndex[2], &coordIndex[2], &normalIndex[2]); } break; - /* Loaded only two digits (V, VT) succesfuly. Not setting VN. */ + /** Loaded only two digits (V, VT) succesfuly. Not setting VN. */ case 2: { fscanf(file, "%d/%d/ %d/%d/ %d/%d/\n", @@ -99,25 +99,25 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ &vertexIndex[2], &coordIndex[2]); } break; - /* Only V set. Checking for existance of VT or VN. */ + /** Only V set. Checking for existance of VT or VN. */ case 1: { - /* Check for existance of V/// configuration.. */ + /** Check for existance of V/// configuration.. */ newerMatches = fscanf(file, "%d/// %d/// %d///\n", x, x, x); fsetpos(file, &start); if (newerMatches == 3) { - /* Configuration confirmed. */ + /** Configuration confirmed. */ fscanf(file, "%d/// %d/// %d///\n", &vertexIndex[0], &vertexIndex[1], &vertexIndex[2]); } else { - /* Failed, checking configuration V//VN */ + /** Failed, checking configuration V//VN */ newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", x, x, x, x, x, x); fsetpos(file, &start); if (newerMatches == 6) { - /* Configuration confirmed. */ + /** Configuration confirmed. */ newerMatches = fscanf(file, "%d//%d %d//%d %d//%d", &vertexIndex[0], &normalIndex[0], &vertexIndex[1], &normalIndex[1], @@ -125,7 +125,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ } else { - /*Unknown configuration.*/ + /**Unknown configuration.*/ PRINT_ERR("Unknown .obj face for .obj file!"); } } From 2d1d36ddcc8f751719d8443462a94f450c70e00c Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 16:23:39 +0100 Subject: [PATCH 09/11] Changed: Adjusted the if checks and reduced redundancy. --- src/engine/loaders/obj_loader.cpp | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 5876e19..1c017bd 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -135,17 +135,22 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ break; } - if (matches == 9) + if (matches == 9 || matches == 2 || matches == 1) { o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - + } + if (matches == 9 || matches == 2) + { o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); o_result->setSTsPresent(true); + } + if (matches == 9) + { o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); @@ -154,31 +159,16 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ } else if (matches == 2) { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - - o_result->getMaterial(materialsI).setSTFace(faceI, coordIndex[0] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 1, coordIndex[1] - 1); - o_result->getMaterial(materialsI).setSTFace(faceI + 2, coordIndex[2] - 1); - o_result->setSTsPresent(true); faceI += 2; } else if (matches == 1) { if (newerMatches == 3) { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); faceI += 1; } else if (newerMatches == 6) { - o_result->getMaterial(materialsI).setVertexFace(faceI, vertexIndex[0] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 1, vertexIndex[1] - 1); - o_result->getMaterial(materialsI).setVertexFace(faceI + 2, vertexIndex[2] - 1); - o_result->getMaterial(materialsI).setNormalFace(faceI, normalIndex[0] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 1, normalIndex[1] - 1); o_result->getMaterial(materialsI).setNormalFace(faceI + 2, normalIndex[2] - 1); From 249c2431a2ee10d278f078ba07ee5a15df6fe607 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 17:12:56 +0100 Subject: [PATCH 10/11] Fixed: Missing break; in obj faces format recognition. --- src/engine/loaders/obj_loader.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 1c017bd..518031f 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -79,6 +79,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ fsetpos(file, &start); int newerMatches = 0; + //return; switch (matches) { /** Vs, VTs and VNs all set */ @@ -129,6 +130,7 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ PRINT_ERR("Unknown .obj face for .obj file!"); } } + break; } default: PRINT_ERR("Unknown faces format in .obj file!"); From b8d31fc1cc5c80781665c34e7fd8be4feecfd242 Mon Sep 17 00:00:00 2001 From: Foxar Date: Thu, 17 Dec 2020 17:14:14 +0100 Subject: [PATCH 11/11] Removed: Commented out return statement. --- src/engine/loaders/obj_loader.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/engine/loaders/obj_loader.cpp b/src/engine/loaders/obj_loader.cpp index 518031f..082cd3f 100644 --- a/src/engine/loaders/obj_loader.cpp +++ b/src/engine/loaders/obj_loader.cpp @@ -79,7 +79,6 @@ void ObjLoader::load(MeshFrame *o_result, char *t_filename, float t_scale, u8 t_ fsetpos(file, &start); int newerMatches = 0; - //return; switch (matches) { /** Vs, VTs and VNs all set */