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;
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);
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;
}
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;
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]);
glVertex3f(-30, -10, -30);
glEnd();
*/
+
+ glUseProgram(sdr);
scn->draw();
+ glUseProgram(0);
}