X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fapp.cc;h=6cb808c9fd050f6e28a68f6322f2eac8a6d4df1b;hb=572bf1ef8d54ef5a7cba7cdf38515cb16c4c312c;hp=08693997da1ae9b5bccdd6770f46363302ff9daf;hpb=ab9fd0ac34f8107ff8067607fad229d08b1c3935;p=laserbrain_demo diff --git a/src/app.cc b/src/app.cc index 0869399..6cb808c 100644 --- a/src/app.cc +++ b/src/app.cc @@ -7,6 +7,7 @@ #include "mesh.h" #include "meshgen.h" #include "scene.h" +#include "datamap.h" static void draw_scene(); @@ -14,7 +15,7 @@ long time_msec; int win_width, win_height; bool opt_gear_wireframe; -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 +25,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 +41,53 @@ 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; + datamap_set_path("data"); + if(!datamap_load_map("data.map")) { + fprintf(stderr, "failed to load datafile mappings\n"); + } + + 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"); return false; } + // hardcoded texture assignment hack + Texture *tex_kolones_lightmap = texman.get_texture("data/testscene/kolones_lighmap.jpg", TEX_2D); + Texture *tex_patoma_lightmap = texman.get_texture("data/testscene/patomacorona_lightmap.jpg", TEX_2D); + + /* + 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_patoma_lightmap, MTL_TEX_LIGHTMAP); + } else if(obj->mtl.name == "BrownMarble") { + obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP); + } else if(obj->mtl.name == "GiroGiroMarmaro") { + obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP); + } else if(obj->mtl.name == "KentrikoKafeMarmaro") { + obj->mtl.add_texture(tex_patoma_lightmap, MTL_TEX_LIGHTMAP); + + } else if(obj->mtl.name == "SkouroGrizoMarmaro") { + obj->mtl.add_texture(tex_kolones_lightmap, MTL_TEX_LIGHTMAP); + } else if(obj->mtl.name == "PalioMarmaro") { + 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; + } + set_uniform_int(sdr, "texmap", 0); + set_uniform_int(sdr, "lightmap", 1); + glUseProgram(0); return true; } @@ -64,7 +103,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 +118,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 +153,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 +183,10 @@ static void draw_scene() glVertex3f(-30, -10, -30); glEnd(); */ + + glUseProgram(sdr); scn->draw(); + glUseProgram(0); } @@ -148,7 +196,7 @@ 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)