12 static void cleanup();
13 static void display();
14 static void reshape(int x, int y);
15 static void keydown(unsigned char key, int x, int y);
16 static void mouse(int bn, int st, int x, int y);
17 static void motion(int x, int y);
19 static std::vector<Mesh*> meshes;
20 static Mesh *mesh_head;
22 int win_width, win_height;
23 float cam_theta, cam_phi = 25, cam_dist = 8;
25 int main(int argc, char **argv)
27 glutInit(&argc, argv);
28 glutInitWindowSize(800, 600);
29 glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
30 glutCreateWindow("hair test");
32 glutDisplayFunc(display);
33 glutReshapeFunc(reshape);
34 glutKeyboardFunc(keydown);
36 glutMotionFunc(motion);
51 glEnable(GL_DEPTH_TEST);
52 glEnable(GL_CULL_FACE);
53 glEnable(GL_COLOR_MATERIAL);
55 glEnable(GL_LIGHTING);
58 glClearColor(1, 0.5, 0.5, 1);
59 meshes = load_meshes("data/head.fbx");
61 fprintf(stderr, "Failed to load mesh.\n");
65 for(size_t i=0; i<meshes.size(); i++) {
66 meshes[i]->calc_bbox();
68 Vec3 v0 = meshes[i]->bbox.v0;
69 Vec3 v1 = meshes[i]->bbox.v1;
71 printf("mesh: %s\n", meshes[i]->name.c_str());
72 printf("AABB mesh %d: v0: (%f, %f, %f) v1: (%f, %f, %f)\n",
73 (int)i, v0.x, v0.y, v0.z, v1.x, v1.y, v1.z);
75 meshes[i]->update_vbo(MESH_ALL);
76 printf("num vertices: %d num triangles: %d\n",
77 (int)meshes[i]->vertices.size(),
78 (int)meshes[i]->indices.size() / 3);
80 if(meshes[i]->name == "head") {
81 mesh_head = meshes[i];
94 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
96 glMatrixMode(GL_MODELVIEW);
98 glTranslatef(0, 0, -cam_dist);
99 glRotatef(cam_phi, 1, 0, 0);
100 glRotatef(cam_theta, 0, 1, 0);
102 glTranslatef(0, -16, 0);
104 for(size_t i=0; i<meshes.size(); i++) {
109 assert(glGetError() == GL_NO_ERROR);
112 static void reshape(int x, int y)
114 glViewport(0, 0, x, y);
118 glMatrixMode(GL_PROJECTION);
120 gluPerspective(50.0, (float)x / (float)y, 0.5, 500.0);
123 static void keydown(unsigned char key, int /*x*/, int /*y*/)
134 static void mouse(int bn, int st, int x, int y)
136 bnstate[bn] = st == GLUT_DOWN;
141 static void motion(int x, int y)
148 if(!dx && !dy) return;
151 cam_theta += dx * 0.5;
154 if(cam_phi < -90) cam_phi = -90;
155 if(cam_phi > 90) cam_phi = 90;
159 cam_dist += dy * 0.1;
160 if(cam_dist < 0) cam_dist = 0;