nuclear@8: #include nuclear@8: #include nuclear@8: #include nuclear@8: nuclear@8: #ifndef __APPLE__ nuclear@8: #include nuclear@8: #else nuclear@8: #include nuclear@8: #endif nuclear@8: nuclear@8: #include nuclear@8: #include "anim.h" nuclear@8: nuclear@8: struct body_part { nuclear@8: vec3_t pos, pivot, sz, color; nuclear@8: } parts[] = { nuclear@8: /* position pivot size color */ nuclear@8: {{0, 1, 0}, {0, -1, 0}, {1.8, 2.8, 0.8},{1, 0, 1}}, /* torso */ nuclear@8: nuclear@8: {{-0.5, -2.5, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {1, 0, 0}}, /* left-upper leg */ nuclear@8: {{0.5, -2.5, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {0, 1, 0}}, /* right-upper leg */ nuclear@8: nuclear@8: {{0, -2.1, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {1, 0.5, 0.5}}, /* left-lower leg */ nuclear@8: {{0, -2.1, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {0.5, 1, 0.5}}, /* right-lower leg */ nuclear@8: nuclear@8: {{0, 2.6, 0}, {0, -0.5, 0}, {1.2, 1.2, 1.2},{0, 1, 1}}, /* head */ nuclear@8: nuclear@8: {{-1.3, 0.4, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {0, 0, 1}}, /* left-upper arm */ nuclear@8: {{1.3, 0.4, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {1, 1, 0}}, /* right-upper arm */ nuclear@8: nuclear@8: {{0, -2.1, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {0.5, 0.5, 1}}, /* left-lower arm */ nuclear@8: {{0, -2.1, 0}, {0, 1, 0}, {0.8, 2, 0.8}, {1, 1, 0.5}}, /* right-lower arm */ nuclear@8: }; nuclear@8: nuclear@8: enum { nuclear@8: NODE_TORSO, nuclear@8: NODE_LEFT_UPPER_LEG, nuclear@8: NODE_RIGHT_UPPER_LEG, nuclear@8: NODE_LEFT_LOWER_LEG, nuclear@8: NODE_RIGHT_LOWER_LEG, nuclear@8: NODE_HEAD, nuclear@8: NODE_LEFT_UPPER_ARM, nuclear@8: NODE_RIGHT_UPPER_ARM, nuclear@8: NODE_LEFT_LOWER_ARM, nuclear@8: NODE_RIGHT_LOWER_ARM, nuclear@8: nuclear@8: NUM_NODES nuclear@8: }; nuclear@8: nuclear@8: int init(void); nuclear@8: void disp(void); nuclear@8: void idle(void); nuclear@8: void reshape(int x, int y); nuclear@8: void keyb(unsigned char key, int x, int y); nuclear@8: void mouse(int bn, int state, int x, int y); nuclear@8: void motion(int x, int y); nuclear@8: nuclear@8: float cam_theta = 20, cam_phi = 20, cam_dist = 15; nuclear@8: struct anm_node *root; nuclear@8: nuclear@8: struct anm_node *nodes[NUM_NODES]; nuclear@8: nuclear@8: int main(int argc, char **argv) nuclear@8: { nuclear@8: glutInitWindowSize(800, 600); nuclear@8: glutInit(&argc, argv); nuclear@8: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); nuclear@8: glutCreateWindow("libanim example"); nuclear@8: nuclear@8: glutDisplayFunc(disp); nuclear@8: glutIdleFunc(idle); nuclear@8: glutReshapeFunc(reshape); nuclear@8: glutKeyboardFunc(keyb); nuclear@8: glutMouseFunc(mouse); nuclear@8: glutMotionFunc(motion); nuclear@8: nuclear@8: if(init() == -1) { nuclear@8: return 1; nuclear@8: } nuclear@8: glutMainLoop(); nuclear@8: return 0; nuclear@8: } nuclear@8: nuclear@8: int init(void) nuclear@8: { nuclear@8: int i; nuclear@8: nuclear@8: glPointSize(3); nuclear@8: nuclear@8: glEnable(GL_DEPTH_TEST); nuclear@8: glEnable(GL_CULL_FACE); nuclear@8: glEnable(GL_LIGHTING); nuclear@8: glEnable(GL_LIGHT0); nuclear@8: nuclear@8: root = nodes[0]; nuclear@8: nuclear@8: for(i=0; i 90) { nuclear@8: cam_phi = 90; nuclear@8: } nuclear@8: glutPostRedisplay(); nuclear@8: } nuclear@8: if(bnstate[2]) { nuclear@8: cam_dist += dy * 0.1; nuclear@8: if(cam_dist < 0.0) { nuclear@8: cam_dist = 0.0; nuclear@8: } nuclear@8: glutPostRedisplay(); nuclear@8: } nuclear@8: }