summaryrefslogtreecommitdiffstats
path: root/objloader.c
diff options
context:
space:
mode:
Diffstat (limited to 'objloader.c')
-rw-r--r--objloader.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/objloader.c b/objloader.c
index 34de2b9..1374530 100644
--- a/objloader.c
+++ b/objloader.c
@@ -9,7 +9,7 @@
*
* todo: move obj files and texures into folder named e.g. "obj", or find some way
* of figuring out the current directory, hmm, could modify a path string, e.g.
- * "./cube/cube.obj" -> "/cube/*", I would need to loop for last occurence of "/"
+ * "./cube/cube.obj" -> "/cube/X", I would need to loop for last occurence of "/"
*
*/
@@ -43,7 +43,7 @@ static void resize(int w, int h)
SDL_SetVideoMode(w, h, 32, SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_RESIZABLE);
}
-static void setup_opengl()
+static void setup_opengl(ObjModel *model)
{
/* light values and coordinates */
GLfloat whiteLight[] = { 0.05f, 0.05f, 0.05f, 1.0f };
@@ -73,15 +73,23 @@ static void setup_opengl()
/* gray background */
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
-#if 0
/* example of loading a targa file, note: RLE compression is not supported */
GLbyte *pBytes;
GLint iWidth, iHeight, iComponents;
GLenum eFormat;
+
+ /* get the filename from obj file */
+ char *fname = (char *) malloc(sizeof(char) * 31);
+ char *delimeter = strrchr(obj_last_fname, '/');
+ unsigned int offset = delimeter - obj_last_fname;
+ strncpy(fname, obj_last_fname, offset + 1);
+ strcat(fname, model->mtl->map_Ka); /* ambient texture map */
+ if (model->mtl != NULL)
+ printf("ambient texture map: %s\n", model->mtl->map_Ka);
/* load texture */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- pBytes = gltLoadTGA("stone.tga", &iWidth, &iHeight, &iComponents, &eFormat);
+ pBytes = gltLoadTGA(fname, &iWidth, &iHeight, &iComponents, &eFormat);
if (!pBytes)
fprintf(stderr, "gltLoadTGA: failed to load texture!\n");
@@ -97,7 +105,6 @@ static void setup_opengl()
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
-#endif
}
/* process SDL events */
@@ -149,22 +156,25 @@ void render(ObjModel *model)
glPushMatrix();
glScalef(0.1f, 0.1f, 0.1f);
- glTranslatef(0.0f, 0.0f, -150.0f);
- glColor3f(1.0f, 0.0f, 0.0f);
+ glTranslatef(5.0f, 0.0f, -150.0f);
glBegin(GL_QUADS);
int i;
for (i = 0; i < model->nFace; i++)
- {
+ {
glNormal3f(model->NormalArray[model->FaceArray[i].Normal[0] - 1].x, model->NormalArray[model->FaceArray[i].Normal[0] - 1].y, model->NormalArray[model->FaceArray[i].Normal[0] - 1].z );
+ glTexCoord2f(model->TexCoordArray[model->FaceArray[i].TexCoord[0] - 1].u, model->TexCoordArray[model->FaceArray[i].TexCoord[0] - 1].v);
glVertex3f(model->VertexArray[model->FaceArray[i].Vertex[0] - 1].x, model->VertexArray[model->FaceArray[i].Vertex[0] - 1].y, model->VertexArray[model->FaceArray[i].Vertex[0] - 1].z );
glNormal3f(model->NormalArray[model->FaceArray[i].Normal[1] - 1].x, model->NormalArray[model->FaceArray[i].Normal[1] - 1].y, model->NormalArray[model->FaceArray[i].Normal[1] - 1].z );
+ glTexCoord2f(model->TexCoordArray[model->FaceArray[i].TexCoord[1] - 1].u, model->TexCoordArray[model->FaceArray[i].TexCoord[1] - 1].v);
glVertex3f(model->VertexArray[model->FaceArray[i].Vertex[1] - 1].x, model->VertexArray[model->FaceArray[i].Vertex[1] - 1].y, model->VertexArray[model->FaceArray[i].Vertex[1] - 1].z );
glNormal3f(model->NormalArray[model->FaceArray[i].Normal[2] - 1].x, model->NormalArray[model->FaceArray[i].Normal[2] - 1].y, model->NormalArray[model->FaceArray[i].Normal[2] - 1].z );
+ glTexCoord2f(model->TexCoordArray[model->FaceArray[i].TexCoord[2] - 1].u, model->TexCoordArray[model->FaceArray[i].TexCoord[2] - 1].v);
glVertex3f(model->VertexArray[model->FaceArray[i].Vertex[2] - 1].x, model->VertexArray[model->FaceArray[i].Vertex[2] - 1].y, model->VertexArray[model->FaceArray[i].Vertex[2] - 1].z );
- glNormal3f(model->NormalArray[model->FaceArray[i].Normal[3] - 1].x, model->NormalArray[model->FaceArray[i].Normal[3] - 1].y, model->NormalArray[model->FaceArray[i].Normal[3] - 1].z );
+ glNormal3f(model->NormalArray[model->FaceArray[i].Normal[3] - 1].x, model->NormalArray[model->FaceArray[i].Normal[3] - 1].y, model->NormalArray[model->FaceArray[i].Normal[3] - 1].z );
+ glTexCoord2f(model->TexCoordArray[model->FaceArray[i].TexCoord[3] - 1].u, model->TexCoordArray[model->FaceArray[i].TexCoord[3] - 1].v);
glVertex3f(model->VertexArray[model->FaceArray[i].Vertex[3] - 1].x, model->VertexArray[model->FaceArray[i].Vertex[3] - 1].y, model->VertexArray[model->FaceArray[i].Vertex[3] - 1].z );
}
@@ -213,17 +223,13 @@ int main(void)
else
fprintf(stdout, "status: using GLEW %s\n", glewGetString(GLEW_VERSION));
- /* setup few stuff before rendring */
- setup_opengl();
-
/* OBJ Loading */
char *memory = NULL;
size_t bytes = ObjLoadFile("./cube/cube.obj", &memory);
-
ObjModel *model = ObjLoadModel(memory, bytes);
- printf("Object Model has: %d faces!\n", model->nFace);
- if (model->mtl != NULL)
- printf("ambient texture map: %s\n", model->mtl->map_Ka);
+
+ /* setup few stuff before rendring */
+ setup_opengl(model);
/* main loop */
while (program_running)