# HG changeset patch # User John Tsiombikas # Date 1327301519 -7200 # Node ID 5562a637e5aaa22280b10e7e880fd98494795225 # Parent 75e4377f3cdc01caf7008746cbcb0c80f3625c97 load multiple files and concatenate them diff -r 75e4377f3cdc -r 5562a637e5aa src/main.c --- a/src/main.c Sat Jan 21 18:20:14 2012 +0200 +++ b/src/main.c Mon Jan 23 08:51:59 2012 +0200 @@ -26,7 +26,6 @@ void sball_button(int bn, int state); int parse_args(int argc, char **argv); -char *scene_fname; int win_width, win_height; int stereo; int flip_winding; @@ -48,13 +47,9 @@ float ldir[] = {-1, 1, 1, 0}; float dx, dy, dz, diag; + glutInitWindowSize(800, 600); glutInit(&argc, argv); - - if(parse_args(argc, argv) == -1) { - return 1; - } - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | (stereo ? GLUT_STEREO : 0)); glutCreateWindow("OpenGL 3D viewer"); @@ -82,10 +77,16 @@ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb); - if((load_scene(&scn, scene_fname)) == -1) { - fprintf(stderr, "failed to load: %s\n", scene_fname); + + init_scene(&scn); + if(parse_args(argc, argv) == -1) { return 1; } + if(verbose) { + printf("scene bounds: %.2f %.2f %.2f -> %.2f %.2f %.2f\n", scn.bbox.min[0], scn.bbox.min[1], + scn.bbox.min[2], scn.bbox.max[0], scn.bbox.max[1], scn.bbox.max[2]); + } + dx = scn.bbox.max[0] - scn.bbox.min[0]; dy = scn.bbox.max[1] - scn.bbox.min[1]; dz = scn.bbox.max[2] - scn.bbox.min[2]; @@ -352,7 +353,7 @@ int parse_args(int argc, char **argv) { - int i; + int i, num_loaded = 0; for(i=1; imeshes = 0; + scn->lights = 0; + + scn->bbox.min[0] = scn->bbox.min[1] = scn->bbox.min[2] = FLT_MAX; + scn->bbox.max[0] = scn->bbox.max[1] = scn->bbox.max[2] = -FLT_MAX; + return 0; +} + int load_scene(struct scene *scn, const char *fname) { int i, j; @@ -37,9 +47,6 @@ printf("scene: %s (%d meshes, %d lights)\n", fname, aiscn->mNumMeshes, aiscn->mNumLights); } - scn->meshes = 0; - scn->lights = 0; - for(i=0; imNumLights; i++) { struct light *lt; struct aiLight *ailt = aiscn->mLights[i]; @@ -97,9 +104,7 @@ scn->lights = lt; } - scn->bbox.min[0] = scn->bbox.min[1] = scn->bbox.min[2] = FLT_MAX; - scn->bbox.max[0] = scn->bbox.max[1] = scn->bbox.max[2] = -FLT_MAX; - + /* load meshes and calculate bounding box */ for(i=0; imNumMeshes; i++) { struct mesh *m; @@ -120,11 +125,6 @@ scn->meshes = m; } - if(verbose) { - printf("scene bounds: %.2f %.2f %.2f -> %.2f %.2f %.2f\n", scn->bbox.min[0], scn->bbox.min[1], - scn->bbox.min[2], scn->bbox.max[0], scn->bbox.max[1], scn->bbox.max[2]); - } - aiReleaseImport(aiscn); return 0; } diff -r 75e4377f3cdc -r 5562a637e5aa src/scene.h --- a/src/scene.h Sat Jan 21 18:20:14 2012 +0200 +++ b/src/scene.h Mon Jan 23 08:51:59 2012 +0200 @@ -42,6 +42,7 @@ }; +int init_scene(struct scene *scn); int load_scene(struct scene *scn, const char *fname); void render_scene(struct scene *scn);