X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=inline;f=src%2Fapp.cc;h=60209477591434fc6d9d8c0bb9e952936bcb57bc;hb=dbcb9345c23c5c027d808915962843e7db2d14aa;hp=08693997da1ae9b5bccdd6770f46363302ff9daf;hpb=ab9fd0ac34f8107ff8067607fad229d08b1c3935;p=laserbrain_demo diff --git a/src/app.cc b/src/app.cc index 0869399..6020947 100644 --- a/src/app.cc +++ b/src/app.cc @@ -7,14 +7,17 @@ #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 = 10.0; +static float cam_dist = 0.0; static float cam_theta, cam_phi = 20; static Vec3 cam_pos; static int prev_mx, prev_my; @@ -24,12 +27,14 @@ static bool keystate[256]; static Mat4 view_matrix; static TextureSet texman; static Scene *scn; +static unsigned int sdr; static long prev_msec; bool app_init() { + glEnable(GL_FRAMEBUFFER_SRGB); glEnable(GL_MULTISAMPLE); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); @@ -38,17 +43,21 @@ bool app_init() Mesh::use_custom_sdr_attr = false; - float ambient[] = {0.1, 0.1, 0.1, 0.0}; + float ambient[] = {0.0, 0.0, 0.0, 0.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); - unsigned int sflags = 0; - scn = new Scene; - if(!(scn->load("data/testscene/patoma.fbx", sflags)) || - !(scn->load("data/testscene/kolones.fbx", sflags))) { - fprintf(stderr, "failed to load test scene\n"); + scn = new Scene(&texman); + if(!load_scene(scn, "data/museum.scene")) { return false; } + if(!(sdr = create_program_load("sdr/test.v.glsl", "sdr/test.p.glsl"))) { + fprintf(stderr, "failed to load test shaders\n"); + return false; + } + set_uniform_int(sdr, "texmap", 0); + set_uniform_int(sdr, "lightmap", 1); + glUseProgram(0); return true; } @@ -64,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']) { @@ -79,6 +88,12 @@ static void update(float dt) if(keystate[(int)'a']) { dir.x -= walk_speed; } + if(keystate[(int)'q']) { + cam_pos.y += walk_speed; + } + if(keystate[(int)'z']) { + cam_pos.y -= walk_speed; + } float theta = M_PI * cam_theta / 180.0f; cam_pos.x += cos(theta) * dir.x - sin(theta) * dir.z; @@ -108,7 +123,7 @@ void app_display() view_matrix.pre_translate(0, 0, -cam_dist); view_matrix.pre_rotate(deg_to_rad(cam_phi), 1, 0, 0); view_matrix.pre_rotate(deg_to_rad(cam_theta), 0, 1, 0); - view_matrix.pre_translate(-cam_pos.x, 0, -cam_pos.z); + view_matrix.pre_translate(-cam_pos.x, -cam_pos.y, -cam_pos.z); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(view_matrix[0]); @@ -138,7 +153,22 @@ static void draw_scene() glVertex3f(-30, -10, -30); glEnd(); */ + + 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(); + } } @@ -148,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; } }