diff options
Diffstat (limited to 'obj.c')
-rw-r--r-- | obj.c | 61 |
1 files changed, 53 insertions, 8 deletions
@@ -20,7 +20,7 @@ ObjModel* ObjLoadModel(char *memory, size_t size) else if (memcmp(p, "v", 1) == 0) ret->nVertex++; else if (memcmp(p, "f", 1) == 0) ret->nFace++; - while (*p++ != (char) 0x0A); + while (*p++ != (char) 0x0a); } /* allocate memory for arrays */ @@ -32,33 +32,40 @@ ObjModel* ObjLoadModel(char *memory, size_t size) p = memory; int nV = 0, nN = 0, nT = 0, nF = 0; + int nread = 0; while (p != e) { if (memcmp(p, "vn", 2) == 0) { - sscanf(p, "vn %f %f %f", &ret->NormalArray[nN].x, + nread = sscanf(p, "vn %f %f %f", &ret->NormalArray[nN].x, &ret->NormalArray[nN].y, &ret->NormalArray[nN].z); + if (nread != 3) + printf("vn: read only %d instead of 3\n", nread); nN++; } else if (memcmp(p, "vt", 2) == 0) { - sscanf(p, "vt %f %f", &ret->TexCoordArray[nT].u, + nread = sscanf(p, "vt %f %f", &ret->TexCoordArray[nT].u, &ret->TexCoordArray[nT].v); + if (nread != 2) + printf("vt: read only %d instead of 2\n", nread); nT++; } else if (memcmp(p, "v", 1) == 0) /* or *p == 'v' */ { - sscanf(p, "v %f %f %f", &ret->VertexArray[nV].x, + nread = sscanf(p, "v %f %f %f", &ret->VertexArray[nV].x, &ret->VertexArray[nV].y, &ret->VertexArray[nV].z); + if (nread != 3) + printf("v: read only %d instead of 3\n", nread); nV++; } /* quad */ else if (memcmp(p, "f", 1) == 0) /* or *p == 'f' */ { - sscanf(p, "f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d", + nread = sscanf(p, "f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d", &ret->FaceArray[nF].Vertex[0], &ret->FaceArray[nF].TexCoord[0], &ret->FaceArray[nF].Normal[0], @@ -70,11 +77,13 @@ ObjModel* ObjLoadModel(char *memory, size_t size) &ret->FaceArray[nF].Normal[2], &ret->FaceArray[nF].Vertex[3], &ret->FaceArray[nF].TexCoord[3], - &ret->FaceArray[nF].Normal[3]); + &ret->FaceArray[nF].Normal[3]); + if (nread != 12) + printf("f: read only %d instead of 12\n", nread); nF++; } /* seek to a newline */ - while (*p++ != (char) 0x0A); + while (*p++ != (char) 0x0a); } /* sanity check */ @@ -114,12 +123,48 @@ size_t ObjLoadFile(char *szFileName, char **memory) return bytes; } +void ObjList(ObjModel *model) +{ + int i; + printf("%d vertices\n", model->nVertex); + for (i = 0; i < model->nVertex; i++) + printf("v %f %f %f\n", model->VertexArray[i].x, model->VertexArray[i].y, + model->VertexArray[i].z); + + printf("%d normal vectors\n", model->nNormal); + for (i = 0; i < model->nNormal; i++) + printf("v %f %f %f\n", model->NormalArray[i].x, model->NormalArray[i].y, + model->NormalArray[i].z); + + printf("%d texture coordinates\n", model->nTexCoord); + for (i = 0; i < model->nTexCoord; i++) + printf("v %f %f\n", model->TexCoordArray[i].u, model->TexCoordArray[i].v); + + printf("%d faces\n", model->nFace); + for (i = 0; i < model->nFace; i++) + { + printf("f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n", + model->FaceArray[i].Vertex[0], + model->FaceArray[i].TexCoord[0], + model->FaceArray[i].Normal[0], + model->FaceArray[i].Vertex[1], + model->FaceArray[i].TexCoord[1], + model->FaceArray[i].Normal[1], + model->FaceArray[i].Vertex[2], + model->FaceArray[i].TexCoord[2], + model->FaceArray[i].Normal[2], + model->FaceArray[i].Vertex[3], + model->FaceArray[i].TexCoord[3], + model->FaceArray[i].Normal[3]); + } +} + void ObjFree(ObjModel *model) { free(model->NormalArray); free(model->TexCoordArray); free(model->FaceArray); free(model->VertexArray); - free(model); + free(model); } |