📄 glutmech.c
字号:
glPopMatrix(); } else disable();#endif#ifdef DRAW_MECH glPushMatrix(); glTranslatef(0.0, elevation, 0.0); DrawMech(); glPopMatrix();#endif#ifdef DRAW_ENVIRO glPushMatrix(); if (distance >= 20.136) distance = 0.0; glTranslatef(0.0, -5.0, -distance); glCallList(SOLID_ENVIRO); glTranslatef(0.0, 0.0, 10.0); glCallList(SOLID_ENVIRO); glPopMatrix();#endif glPopMatrix(); glFlush(); glutSwapBuffers();}voidmyinit(void){ char i = 1; qobj = gluNewQuadric();#ifdef LIGHT SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2);#endif glEnable(GL_DEPTH_TEST); MechTorso(i); MechHip(i); Shoulder(i); RocketPod(i); UpperArm(i); ForeArm(i); UpperLeg(i); Foot(i); VulcanGun(i); Enviro(i);}voidmyReshape(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 1.2, -5.5); /* viewing transform */}#ifdef ANIMATIONvoidanimation_walk(void){ float angle; static int step; if (step == 0 || step == 2) { /* for(frame=3.0; frame<=21.0; frame=frame+3.0){ */ if (frame >= 0.0 && frame <= 21.0) { if (frame == 0.0) frame = 3.0; angle = (180 / M_PI) * (acos(((cos((M_PI / 180) * frame) * 2.043) + 1.1625) / 3.2059)); if (frame > 0) { elevation = -(3.2055 - (cos((M_PI / 180) * angle) * 3.2055)); } else elevation = 0.0; if (step == 0) { hip11 = -(frame * 1.7); if (1.7 * frame > 15) heel1 = frame * 1.7; heel2 = 0; ankle1 = frame * 1.7; if (frame > 0) hip21 = angle; else hip21 = 0; ankle2 = -hip21; shoulder1 = frame * 1.5; shoulder2 = -frame * 1.5; elbow1 = frame; elbow2 = -frame; } else { hip21 = -(frame * 1.7); if (1.7 * frame > 15) heel2 = frame * 1.7; heel1 = 0; ankle2 = frame * 1.7; if (frame > 0) hip11 = angle; else hip11 = 0; ankle1 = -hip11; shoulder1 = -frame * 1.5; shoulder2 = frame * 1.5; elbow1 = -frame; elbow2 = frame; } if (frame == 21) step++; if (frame < 21) frame = frame + 3.0; } } if (step == 1 || step == 3) { /* for(x=21.0; x>=0.0; x=x-3.0){ */ if (frame <= 21.0 && frame >= 0.0) { angle = (180 / M_PI) * (acos(((cos((M_PI / 180) * frame) * 2.043) + 1.1625) / 3.2029)); if (frame > 0) elevation = -(3.2055 - (cos((M_PI / 180) * angle) * 3.2055)); else elevation = 0.0; if (step == 1) { elbow2 = hip11 = -frame; elbow1 = heel1 = frame; heel2 = 15; ankle1 = frame; if (frame > 0) hip21 = angle; else hip21 = 0; ankle2 = -hip21; shoulder1 = 1.5 * frame; shoulder2 = -frame * 1.5; } else { elbow1 = hip21 = -frame; elbow2 = heel2 = frame; heel1 = 15; ankle2 = frame; if (frame > 0) hip11 = angle; else hip11 = 0; ankle1 = -hip11; shoulder1 = -frame * 1.5; shoulder2 = frame * 1.5; } if (frame == 0.0) step++; if (frame > 0) frame = frame - 3.0; } } if (step == 4) step = 0; distance += 0.1678; glutPostRedisplay();}voidanimation(void){ animation_walk();}#endif#ifdef GLUT#ifdef GLUT_KEY/* ARGSUSED1 */voidkeyboard(unsigned char key, int x, int y){ int i = 0; switch (key) { /* start arm control functions */ case 'q':{ shoulder2Subtract(); i++; } break; case 'a':{ shoulder2Add(); i++; } break; case 'w':{ shoulder1Subtract(); i++; } break; case 's':{ shoulder1Add(); i++; } break; case '2':{ shoulder3Add(); i++; } break; case '1':{ shoulder4Add(); i++; } break; case '4':{ shoulder3Subtract(); i++; } break; case '3':{ shoulder4Subtract(); i++; } break; case 'z':{ lat2Raise(); i++; } break; case 'Z':{ lat2Lower(); i++; } break; case 'x':{ lat1Raise(); i++; } break; case 'X':{ lat1Lower(); i++; } break; case 'A':{ elbow2Add(); i++; } break; case 'Q':{ elbow2Subtract(); i++; } break; case 'S':{ elbow1Add(); i++; } break; case 'W':{ elbow1Subtract(); i++; } break; /* end of arm control functions */ /* start of torso control functions */ case 'd':{ RotateAdd(); i++; } break; case 'g':{ RotateSubtract(); i++; } break; case 'r':{ MechTiltAdd(); i++; } break; case 'f':{ MechTiltSubtract(); i++; } break; /* end of torso control functions */ /* start of leg control functions */ case 'h':{ RaiseLeg2Forward(); i++; } break; case 'y':{ LowerLeg2Backwards(); i++; } break; case 'Y':{ RaiseLeg2Outwards(); i++; } break; case 'H':{ LowerLeg2Inwards(); i++; } break; case 'j':{ RaiseLeg1Forward(); i++; } break; case 'u':{ LowerLeg1Backwards(); i++; } break; case 'U':{ RaiseLeg1Outwards(); i++; } break; case 'J':{ LowerLeg1Inwards(); i++; } break; case 'N':{ Heel2Add(); i++; } break; case 'n':{ Heel2Subtract(); i++; } break; case 'M':{ Heel1Add(); i++; } break; case 'm':{ Heel1Subtract(); i++; } break; case 'k':{ Ankle2Add(); i++; } break; case 'K':{ Ankle2Subtract(); i++; } break; case 'l':{ Ankle1Add(); i++; } break; case 'L':{ Ankle1Subtract(); i++; } break; /* end of leg control functions */ /* start of light source position functions */ case 'p':{ LightTurnRight(); i++; } break; case 'i':{ LightTurnLeft(); i++; } break; case 'o':{ LightForwards(); i++; } break; case '9':{ LightBackwards(); i++; } break; /* end of light source position functions */ } if (i) glutPostRedisplay();}#endif#ifdef GLUT_SPEC/* ARGSUSED1 */voidspecial(int key, int x, int y){ int i = 0; switch (key) { /* start of view position functions */ case GLUT_KEY_RIGHT:{ TurnRight(); i++; } break; case GLUT_KEY_LEFT:{ TurnLeft(); i++; } break; case GLUT_KEY_DOWN:{ TurnForwards(); i++; } break; case GLUT_KEY_UP:{ TurnBackwards(); i++; } break; /* end of view postions functions */ /* start of miseclleneous functions */ case GLUT_KEY_PAGE_UP:{ FireCannon(); i++; } break; /* end of miscelleneous functions */ } if (i) glutPostRedisplay();}#endif#endifvoidmenu_select(int mode){ switch (mode) {#ifdef ANIMATION case 1: glutIdleFunc(animation); break;#endif case 2: glutIdleFunc(NULL); break; case 3: Toggle(); glutPostRedisplay(); break; case 4: exit(EXIT_SUCCESS); }}/* ARGSUSED */voidnull_select(int mode){}voidglutMenu(void){ int glut_menu[13]; glut_menu[5] = glutCreateMenu(null_select); glutAddMenuEntry("forward : q,w", 0); glutAddMenuEntry("backwards : a,s", 0); glutAddMenuEntry("outwards : z,x", 0); glutAddMenuEntry("inwards : Z,X", 0); glut_menu[6] = glutCreateMenu(null_select); glutAddMenuEntry("upwards : Q,W", 0); glutAddMenuEntry("downwards : A,S", 0); glutAddMenuEntry("outwards : 1,2", 0); glutAddMenuEntry("inwards : 3,4", 0); glut_menu[1] = glutCreateMenu(null_select); glutAddMenuEntry(" : Page_up", 0); glut_menu[8] = glutCreateMenu(null_select); glutAddMenuEntry("forward : y,u", 0); glutAddMenuEntry("backwards : h.j", 0); glutAddMenuEntry("outwards : Y,U", 0); glutAddMenuEntry("inwards : H,J", 0); glut_menu[9] = glutCreateMenu(null_select); glutAddMenuEntry("forward : n,m", 0); glutAddMenuEntry("backwards : N,M", 0); glut_menu[9] = glutCreateMenu(null_select); glutAddMenuEntry("forward : n,m", 0); glutAddMenuEntry("backwards : N,M", 0); glut_menu[10] = glutCreateMenu(null_select); glutAddMenuEntry("toes up : K,L", 0); glutAddMenuEntry("toes down : k,l", 0); glut_menu[11] = glutCreateMenu(null_select); glutAddMenuEntry("right : right arrow", 0); glutAddMenuEntry("left : left arrow", 0); glutAddMenuEntry("down : up arrow", 0); glutAddMenuEntry("up : down arrow", 0); glut_menu[12] = glutCreateMenu(null_select); glutAddMenuEntry("right : p", 0); glutAddMenuEntry("left : i", 0); glutAddMenuEntry("up : 9", 0); glutAddMenuEntry("down : o", 0); glut_menu[4] = glutCreateMenu(NULL); glutAddSubMenu("at the shoulders? ", glut_menu[5]); glutAddSubMenu("at the elbows?", glut_menu[6]); glut_menu[7] = glutCreateMenu(NULL); glutAddSubMenu("at the hip? ", glut_menu[8]); glutAddSubMenu("at the knees?", glut_menu[9]); glutAddSubMenu("at the ankles? ", glut_menu[10]); glut_menu[2] = glutCreateMenu(null_select); glutAddMenuEntry("turn left : d", 0); glutAddMenuEntry("turn right : g", 0); glut_menu[3] = glutCreateMenu(null_select); glutAddMenuEntry("tilt backwards : f", 0); glutAddMenuEntry("tilt forwards : r", 0); glut_menu[0] = glutCreateMenu(NULL); glutAddSubMenu("move the arms.. ", glut_menu[4]); glutAddSubMenu("fire the vulcan guns?", glut_menu[1]); glutAddSubMenu("move the legs.. ", glut_menu[7]); glutAddSubMenu("move the torso?", glut_menu[2]); glutAddSubMenu("move the hip?", glut_menu[3]); glutAddSubMenu("rotate the scene..", glut_menu[11]);#ifdef MOVE_LIGHT glutAddSubMenu("rotate the light source..", glut_menu[12]);#endif glutCreateMenu(menu_select);#ifdef ANIMATION glutAddMenuEntry("Start Walk", 1); glutAddMenuEntry("Stop Walk", 2);#endif glutAddMenuEntry("Toggle Wireframe", 3); glutAddSubMenu("How do I ..", glut_menu[0]); glutAddMenuEntry("Quit", 4); glutAttachMenu(GLUT_LEFT_BUTTON); glutAttachMenu(GLUT_RIGHT_BUTTON);}intmain(int argc, char **argv){#ifdef GLUT /* start of glut windowing and control functions */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("glutmech: Vulcan Gunner"); myinit(); glutDisplayFunc(display); glutReshapeFunc(myReshape);#ifdef GLUT_KEY glutKeyboardFunc(keyboard);#endif#ifdef GLUT_SPEC glutSpecialFunc(special);#endif glutMenu(); glutMainLoop(); /* end of glut windowing and control functions */#endif return 0; /* ANSI C requires main to return int. */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -