- hover_gear = pick_gear(prev_mx, prev_my);
-}
-
-static void set_light(int idx, const Vec3 &pos, const Vec3 &color)
-{
- unsigned int lt = GL_LIGHT0 + idx;
- float posv[] = { pos.x, pos.y, pos.z, 1 };
- float colv[] = { color.x, color.y, color.z, 1 };
-
- glEnable(lt);
- glLightfv(lt, GL_POSITION, posv);
- glLightfv(lt, GL_DIFFUSE, colv);
- glLightfv(lt, GL_SPECULAR, colv);
-}
-
-static void display()
-{
- unsigned int msec = glutGet(GLUT_ELAPSED_TIME) - start_time;
- float dt = (float)(msec - prev_msec) / 1000.0f;
- prev_msec = msec;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- view_matrix = Mat4::identity;
- 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);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(view_matrix[0]);
-
- static const Vec3 lpos[] = { Vec3(-50, 75, 100), Vec3(100, 0, 30), Vec3(-10, -10, 60) };
- set_light(0, lpos[0], Vec3(1.0, 0.8, 0.7) * 0.8);
- set_light(1, lpos[1], Vec3(0.6, 0.7, 1.0) * 0.6);
- set_light(2, lpos[2], Vec3(0.8, 1.0, 0.8) * 0.3);
-
- update(dt);
-
- // shadowmap pass
- begin_shadow_pass(lpos[0], Vec3(0, 0, 0), 0.2, 100, 150);
- draw_scene();
- end_shadow_pass();
-
- // regular pass
- const Mat4 &shadow_matrix = get_shadow_matrix();
- Mat4 env_matrix = transpose(view_matrix.upper3x3());
- set_uniform_matrix4(sdr_shadow_notex, "envmap_matrix", env_matrix[0]);
-
- glActiveTexture(GL_TEXTURE1);
- glBindTexture(GL_TEXTURE_2D, get_shadow_tex());
- glMatrixMode(GL_TEXTURE);
- glLoadMatrixf(shadow_matrix[0]);
-
- glActiveTexture(GL_TEXTURE2);
- glBindTexture(GL_TEXTURE_CUBE_MAP, envmap->get_id());
-
- glActiveTexture(GL_TEXTURE0);
- glMatrixMode(GL_MODELVIEW);
-
- draw_scene();