X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fapp.cc;h=3426c99e23630d174e0225d36c7b215cb2567746;hp=08693997da1ae9b5bccdd6770f46363302ff9daf;hb=8137121400748ee8afb1608253aae15323c5e3a2;hpb=516e9be0443cfd7f844feb9b8299f909075b7c3c diff --git a/src/app.cc b/src/app.cc index 0869399..3426c99 100644 --- a/src/app.cc +++ b/src/app.cc @@ -14,7 +14,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 +24,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 +40,57 @@ 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; + 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_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; + } + set_uniform_int(sdr, "texmap", 0); + set_uniform_int(sdr, "lightmap", 1); + glUseProgram(0); return true; } @@ -79,6 +121,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 +156,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 +186,10 @@ static void draw_scene() glVertex3f(-30, -10, -30); glEnd(); */ + + glUseProgram(sdr); scn->draw(); + glUseProgram(0); }