metadata, walk polygons, stuff...
[laserbrain_demo] / src / app.cc
index 3426c99..6020947 100644 (file)
@@ -7,12 +7,15 @@
 #include "mesh.h"
 #include "meshgen.h"
 #include "scene.h"
+#include "metascene.h"
+#include "datamap.h"
 
 static void draw_scene();
 
 long time_msec;
 int win_width, win_height;
 bool opt_gear_wireframe;
+bool show_walk_mesh;
 
 static float cam_dist = 0.0;
 static float cam_theta, cam_phi = 20;
@@ -43,47 +46,11 @@ bool app_init()
        float ambient[] = {0.0, 0.0, 0.0, 0.0};
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
 
-       unsigned int sflags = SCNLOAD_FLIPTEX;
        scn = new Scene(&texman);
-       if(!(scn->load("data/testscene/patoma.fbx", sflags)) ||
-                       !(scn->load("data/testscene/kolones.fbx", sflags))) {
-               fprintf(stderr, "failed to load test scene\n");
+       if(!load_scene(scn, "data/museum.scene")) {
                return false;
        }
 
-       // hardcoded texture assignment hack
-       Texture *tex_girogiromarmaro = texman.get("data/testscene/girogiromarmarodiffuse.jpg");
-       Texture *tex_kafemarble = texman.get("data/testscene/kafemarblediffuse.jpg");
-       Texture *tex_kentrikokafemarble = texman.get("data/testscene/kentrikokafemarblediffuse.jpg");
-       Texture *tex_paliomarmaro = texman.get("data/testscene/paliomarmarodiffuse.jpg");
-       Texture *tex_steelgreygranite = texman.get("data/testscene/steel-grey-granitediffuse.jpg");
-       Texture *tex_whitemarble = texman.get("data/testscene/whitemarblediffuse.jpg");
-       Texture *tex_kolones_lightmap = texman.get("data/testscene/kolones_lighmap.jpg");
-       Texture *tex_patoma_lightmap = texman.get("data/testscene/patomacorona_lightmap.jpg");
-
-       for(int i=0; i<(int)scn->objects.size(); i++) {
-               Object *obj = scn->objects[i];
-               if(obj->mtl.name == "WiteMarble") {
-                       obj->mtl.add_texture(tex_whitemarble, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP);
-               } else if(obj->mtl.name == "BrownMarble") {
-                       obj->mtl.add_texture(tex_kafemarble, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP);
-               } else if(obj->mtl.name == "GiroGiroMarmaro") {
-                       obj->mtl.add_texture(tex_girogiromarmaro, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP);
-               } else if(obj->mtl.name == "KentrikoKafeMarmaro") {
-                       obj->mtl.add_texture(tex_kentrikokafemarble, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP);
-               } else if(obj->mtl.name == "SkouroGrizoMarmaro") {
-                       obj->mtl.add_texture(tex_steelgreygranite, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_kolones_lightmap, MTL_TEX_LIGHTMAP);
-               } else if(obj->mtl.name == "PalioMarmaro") {
-                       obj->mtl.add_texture(tex_paliomarmaro, MTL_TEX_DIFFUSE);
-                       obj->mtl.add_texture(tex_kolones_lightmap, MTL_TEX_LIGHTMAP);
-               }
-       }
-
        if(!(sdr = create_program_load("sdr/test.v.glsl", "sdr/test.p.glsl"))) {
                fprintf(stderr, "failed to load test shaders\n");
                return false;
@@ -106,7 +73,7 @@ static void update(float dt)
 
        scn->update(dt);
 
-       float walk_speed = 10.0 * dt;
+       float walk_speed = 2000.0 * dt;
        Vec3 dir;
 
        if(keystate[(int)'w']) {
@@ -190,6 +157,18 @@ static void draw_scene()
        glUseProgram(sdr);
        scn->draw();
        glUseProgram(0);
+
+       if(show_walk_mesh && scn->walk_mesh) {
+               glPushAttrib(GL_ENABLE_BIT);
+               glEnable(GL_BLEND);
+               glBlendFunc(GL_ONE, GL_ONE);
+               glDisable(GL_LIGHTING);
+
+               glColor3f(0.5, 0.4, 0.05);
+               scn->walk_mesh->draw();
+
+               glPopAttrib();
+       }
 }
 
 
@@ -199,16 +178,23 @@ void app_reshape(int x, int y)
 
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
-       gluPerspective(50.0, (float)x / (float)y, 0.5, 1000.0);
+       gluPerspective(50.0, (float)x / (float)y, 1.0, 10000.0);
 }
 
 void app_keyboard(int key, bool pressed)
 {
        if(pressed) {
+               printf("key: %d (mod: %x)\n", key, app_get_modifiers());
                switch(key) {
                case 27:
                        app_quit();
                        break;
+
+               case 'w':
+                       if(app_get_modifiers() & MOD_CTRL) {
+                               show_walk_mesh = !show_walk_mesh;
+                       }
+                       break;
                }
        }