⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glutmech.c

📁 学习c++必备
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -