summaryrefslogtreecommitdiffstats
path: root/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'obj.c')
-rw-r--r--obj.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/obj.c b/obj.c
index 7f42e35..9d4f62c 100644
--- a/obj.c
+++ b/obj.c
@@ -1,7 +1,7 @@
/* obj.c
*
* OBJ Loader
- * inital code: http://www.gamedev.net/community/forums/topic.asp?topic_id=312335
+ * initial code: http://www.gamedev.net/community/forums/topic.asp?topic_id=312335
*
* notes: the mtl file should be implemented using arrays
* more that one mtl needs to be supported some day
@@ -133,8 +133,12 @@ ObjModel* ObjLoadModel(char *memory, size_t size)
if (ret->mtllib != NULL && ret->usemtl)
{
/* append directory to filename */
- char *fname = (char *) malloc(sizeof(char) * 21);
- sprintf(fname, "./cube/%s", ret->mtllib);
+ char *fname = (char *) malloc(sizeof(char) * 31);
+ /* sprintf(fname, "./cube/%s", ret->mtllib); */
+ char *delimeter = strrchr(obj_last_fname, '/');
+ unsigned int offset = delimeter - obj_last_fname;
+ strncpy(fname, obj_last_fname, offset + 1);
+ strcat(fname, ret->mtllib);
char *mtl_mem = NULL;
size_t mtl_bytes = ObjLoadFile(fname, &mtl_mem);
@@ -147,7 +151,7 @@ ObjModel* ObjLoadModel(char *memory, size_t size)
/* allocate space for members */
mtl->map_Ka = (char *) malloc(sizeof(char) * 21);
mtl->map_Kd = (char *) malloc(sizeof(char) * 21);
- /* set, what about rest? */
+ /* reset, what about the rest? */
mtl->Ns = 0.0f;
mtl->Ni = 0.0f;
mtl->d = 0.0f;
@@ -198,7 +202,7 @@ ObjModel* ObjLoadModel(char *memory, size_t size)
if (memcmp(st, "map_Kd", 6) == 0)
sscanf(st, "map_Kd %s", mtl->map_Kd);
- /* got to next line */
+ /* go to next line */
while (*st++ != (char) 0x0a);
}
/* set the mtl */
@@ -215,6 +219,7 @@ ObjModel* ObjLoadModel(char *memory, size_t size)
size_t ObjLoadFile(char *szFileName, char **memory)
{
+ strcpy(obj_last_fname, szFileName); /* seems useful for tracking */
size_t bytes = 0;
FILE *file = fopen(szFileName, "rt");