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

📄 glutmech.c

📁 学习c++必备
💻 C
📖 第 1 页 / 共 3 页
字号:
/*** program	: glutmech V1.1* author	: Simon Parkinson-Bates.* E-mail	: sapb@yallara.cs.rmit.edu.au* Copyright Simon Parkinson-Bates.* "source if freely avaliable to anyone to copy as long as they*  acknowledge me in their work."** Funtional features * ------------------* * online menu system avaliable by pressing left mouse button* * online cascading help system avaliable, providing information on*	the several  key strokes and what they do.* * animation sequence coded which makes the mech walk through an*	environment.  Shadows will soon be added to make it look*	more realistic.* * menu control to view mech in wireframe or sold mode.* * various key strokes avaliable to control idependently the mechs*	many joints.* * various key strokes avaliable to view mech and environment from *	different angles* * various key strokes avaliable to alter positioning of the single*	light source.*** Program features* ----------------* * uses double buffering* * uses display lists* * uses glut to manage windows, callbacks, and online menu.* * uses glpolygonfill() to maintain colors in wireframe and solid*	mode.***//* start of compilation conditions */#define SPHERE#define COLOR#define LIGHT#define TORSO#define HIP#define SHOULDER#define UPPER_ARM#define LOWER_ARM#define ROCKET_POD#define UPPER_LEG#define LOWER_LEG#define NO_NORM#define ANIMATION#define DRAW_MECH#define DRAW_ENVIRO#define MOVE_LIGHT/* end of compilation conditions *//* start various header files needed */#include <stdlib.h>#include <math.h>#define GLUT#define GLUT_KEY#define GLUT_SPEC#include <GL/glut.h>/* end of header files *//* start of display list definitions */#define SOLID_MECH_TORSO       	1#define SOLID_MECH_HIP          2#define SOLID_MECH_SHOULDER     3#define SOLID_MECH_UPPER_ARM    4#define SOLID_MECH_FOREARM	5#define SOLID_MECH_UPPER_LEG   	6#define SOLID_MECH_FOOT        	7#define SOLID_MECH_ROCKET      	8#define SOLID_MECH_VULCAN	9#define SOLID_ENVIRO		10/* end of display list definitions *//* start of motion rate variables */#define ANKLE_RATE	3#define HEEL_RATE	3#define ROTATE_RATE	10#define TILT_RATE	10#define ELBOW_RATE	2#define SHOULDER_RATE	5#define LAT_RATE	5#define CANNON_RATE	40#define UPPER_LEG_RATE	3#define UPPER_LEG_RATE_GROIN 10#define LIGHT_TURN_RATE	10#define VIEW_TURN_RATE	10/* end of motion rate variables *//* start of motion  variables *//* Some <math.h> files do not define M_PI... */#ifndef M_PI#define M_PI 3.14159265358979323846#endifGLUquadricObj *qobj;char leg = 0;int shoulder1 = 0, shoulder2 = 0, shoulder3 = 0, shoulder4 = 0, lat1 = 20, lat2 = 20,  elbow1 = 0, elbow2 = 0, pivot = 0, tilt = 10, ankle1 = 0, ankle2 = 0, heel1 = 0,  heel2 = 0, hip11 = 0, hip12 = 10, hip21 = 0, hip22 = 10, fire = 0, solid_part = 0,  anim = 0, turn = 0, turn1 = 0, lightturn = 0, lightturn1 = 0;float elevation = 0.0, distance = 0.0, frame = 3.0 /* foot1v[] = {} foot2v[] = {} */ ;/* end of motion variables *//* start of material definitions */#ifdef LIGHTGLfloat mat_specular[] ={0.628281, 0.555802, 0.366065, 1.0};GLfloat mat_ambient[] ={0.24725, 0.1995, 0.0745, 1.0};GLfloat mat_diffuse[] ={0.75164, 0.60648, 0.22648, 1.0};GLfloat mat_shininess[] ={128.0 * 0.4};GLfloat mat_specular2[] ={0.508273, 0.508273, 0.508373};GLfloat mat_ambient2[] ={0.19225, 0.19225, 0.19225};GLfloat mat_diffuse2[] ={0.50754, 0.50754, 0.50754};GLfloat mat_shininess2[] ={128.0 * 0.6};GLfloat mat_specular3[] ={0.296648, 0.296648, 0.296648};GLfloat mat_ambient3[] ={0.25, 0.20725, 0.20725};GLfloat mat_diffuse3[] ={1, 0.829, 0.829};GLfloat mat_shininess3[] ={128.0 * 0.088};GLfloat mat_specular4[] ={0.633, 0.727811, 0.633};GLfloat mat_ambient4[] ={0.0215, 0.1745, 0.0215};GLfloat mat_diffuse4[] ={0.07568, 0.61424, 0.07568};GLfloat mat_shininess4[] ={128 * 0.6};GLfloat mat_specular5[] ={0.60, 0.60, 0.50};GLfloat mat_ambient5[] ={0.0, 0.0, 0.0};GLfloat mat_diffuse5[] ={0.5, 0.5, 0.0};GLfloat mat_shininess5[] ={128.0 * 0.25};#endif/* end of material definitions *//* start of the body motion functions */voidHeel1Add(void){  heel1 = (heel1 + HEEL_RATE) % 360;}voidHeel1Subtract(void){  heel1 = (heel1 - HEEL_RATE) % 360;}voidHeel2Add(void){  heel2 = (heel2 + HEEL_RATE) % 360;}voidHeel2Subtract(void){  heel2 = (heel2 - HEEL_RATE) % 360;}voidAnkle1Add(void){  ankle1 = (ankle1 + ANKLE_RATE) % 360;}voidAnkle1Subtract(void){  ankle1 = (ankle1 - ANKLE_RATE) % 360;}voidAnkle2Add(void){  ankle2 = (ankle2 + ANKLE_RATE) % 360;}voidAnkle2Subtract(void){  ankle2 = (ankle2 - ANKLE_RATE) % 360;}voidRotateAdd(void){  pivot = (pivot + ROTATE_RATE) % 360;}voidRotateSubtract(void){  pivot = (pivot - ROTATE_RATE) % 360;}voidMechTiltSubtract(void){  tilt = (tilt - TILT_RATE) % 360;}voidMechTiltAdd(void){  tilt = (tilt + TILT_RATE) % 360;}voidelbow1Add(void){  elbow1 = (elbow1 + ELBOW_RATE) % 360;}voidelbow1Subtract(void){  elbow1 = (elbow1 - ELBOW_RATE) % 360;}voidelbow2Add(void){  elbow2 = (elbow2 + ELBOW_RATE) % 360;}voidelbow2Subtract(void){  elbow2 = (elbow2 - ELBOW_RATE) % 360;}voidshoulder1Add(void){  shoulder1 = (shoulder1 + SHOULDER_RATE) % 360;}voidshoulder1Subtract(void){  shoulder1 = (shoulder1 - SHOULDER_RATE) % 360;}voidshoulder2Add(void){  shoulder2 = (shoulder2 + SHOULDER_RATE) % 360;}voidshoulder2Subtract(void){  shoulder2 = (shoulder2 - SHOULDER_RATE) % 360;}voidshoulder3Add(void){  shoulder3 = (shoulder3 + SHOULDER_RATE) % 360;}voidshoulder3Subtract(void){  shoulder3 = (shoulder3 - SHOULDER_RATE) % 360;}voidshoulder4Add(void){  shoulder4 = (shoulder4 + SHOULDER_RATE) % 360;}voidshoulder4Subtract(void){  shoulder4 = (shoulder4 - SHOULDER_RATE) % 360;}voidlat1Raise(void){  lat1 = (lat1 + LAT_RATE) % 360;}voidlat1Lower(void){  lat1 = (lat1 - LAT_RATE) % 360;}voidlat2Raise(void){  lat2 = (lat2 + LAT_RATE) % 360;}voidlat2Lower(void){  lat2 = (lat2 - LAT_RATE) % 360;}voidFireCannon(void){  fire = (fire + CANNON_RATE) % 360;}voidRaiseLeg1Forward(void){  hip11 = (hip11 + UPPER_LEG_RATE) % 360;}voidLowerLeg1Backwards(void){  hip11 = (hip11 - UPPER_LEG_RATE) % 360;}voidRaiseLeg1Outwards(void){  hip12 = (hip12 + UPPER_LEG_RATE_GROIN) % 360;}voidLowerLeg1Inwards(void){  hip12 = (hip12 - UPPER_LEG_RATE_GROIN) % 360;}voidRaiseLeg2Forward(void){  hip21 = (hip21 + UPPER_LEG_RATE) % 360;}voidLowerLeg2Backwards(void){  hip21 = (hip21 - UPPER_LEG_RATE) % 360;}voidRaiseLeg2Outwards(void){  hip22 = (hip22 + UPPER_LEG_RATE_GROIN) % 360;}voidLowerLeg2Inwards(void){  hip22 = (hip22 - UPPER_LEG_RATE_GROIN) % 360;}/* end of body motion functions *//* start of light source position functions */voidTurnRight(void){  turn = (turn - VIEW_TURN_RATE) % 360;}voidTurnLeft(void){  turn = (turn + VIEW_TURN_RATE) % 360;}voidTurnForwards(void){  turn1 = (turn1 - VIEW_TURN_RATE) % 360;}voidTurnBackwards(void){  turn1 = (turn1 + VIEW_TURN_RATE) % 360;}voidLightTurnRight(void){  lightturn = (lightturn + LIGHT_TURN_RATE) % 360;}voidLightTurnLeft(void){  lightturn = (lightturn - LIGHT_TURN_RATE) % 360;}voidLightForwards(void){  lightturn1 = (lightturn1 + LIGHT_TURN_RATE) % 360;}voidLightBackwards(void){  lightturn1 = (lightturn1 - LIGHT_TURN_RATE) % 360;}/* end of light source position functions *//* start of geometric shape functions */voidBox(float width, float height, float depth, char solid){  char i, j = 0;  float x = width / 2.0, y = height / 2.0, z = depth / 2.0;  for (i = 0; i < 4; i++) {    glRotatef(90.0, 0.0, 0.0, 1.0);    if (j) {      if (!solid)        glBegin(GL_LINE_LOOP);      else        glBegin(GL_QUADS);      glNormal3f(-1.0, 0.0, 0.0);      glVertex3f(-x, y, z);      glVertex3f(-x, -y, z);      glVertex3f(-x, -y, -z);      glVertex3f(-x, y, -z);      glEnd();      if (solid) {        glBegin(GL_TRIANGLES);        glNormal3f(0.0, 0.0, 1.0);        glVertex3f(0.0, 0.0, z);        glVertex3f(-x, y, z);        glVertex3f(-x, -y, z);        glNormal3f(0.0, 0.0, -1.0);        glVertex3f(0.0, 0.0, -z);        glVertex3f(-x, -y, -z);        glVertex3f(-x, y, -z);        glEnd();      }      j = 0;    } else {      if (!solid)        glBegin(GL_LINE_LOOP);      else        glBegin(GL_QUADS);      glNormal3f(-1.0, 0.0, 0.0);      glVertex3f(-y, x, z);      glVertex3f(-y, -x, z);      glVertex3f(-y, -x, -z);      glVertex3f(-y, x, -z);      glEnd();      if (solid) {        glBegin(GL_TRIANGLES);        glNormal3f(0.0, 0.0, 1.0);        glVertex3f(0.0, 0.0, z);        glVertex3f(-y, x, z);        glVertex3f(-y, -x, z);        glNormal3f(0.0, 0.0, -1.0);        glVertex3f(0.0, 0.0, -z);        glVertex3f(-y, -x, -z);        glVertex3f(-y, x, -z);        glEnd();      }      j = 1;    }  }}voidOctagon(float side, float height, char solid){  char j;  float x = sin(0.785398163) * side, y = side / 2.0, z = height / 2.0, c;  c = x + y;  for (j = 0; j < 8; j++) {    glTranslatef(-c, 0.0, 0.0);    if (!solid)      glBegin(GL_LINE_LOOP);    else      glBegin(GL_QUADS);    glNormal3f(-1.0, 0.0, 0.0);    glVertex3f(0.0, -y, z);    glVertex3f(0.0, y, z);    glVertex3f(0.0, y, -z);    glVertex3f(0.0, -y, -z);    glEnd();    glTranslatef(c, 0.0, 0.0);    if (solid) {      glBegin(GL_TRIANGLES);      glNormal3f(0.0, 0.0, 1.0);      glVertex3f(0.0, 0.0, z);      glVertex3f(-c, -y, z);      glVertex3f(-c, y, z);      glNormal3f(0.0, 0.0, -1.0);      glVertex3f(0.0, 0.0, -z);      glVertex3f(-c, y, -z);      glVertex3f(-c, -y, -z);      glEnd();    }    glRotatef(45.0, 0.0, 0.0, 1.0);  }}/* end of geometric shape functions */#ifdef NORMvoidNormalize(float v[3]){  GLfloat d = sqrt(v[1] * v[1] + v[2] * v[2] + v[3] * v[3]);  if (d == 0.0) {    printf("zero length vector");    return;  }  v[1] /= d;  v[2] /= d;  v[3] /= d;}voidNormXprod(float v1[3], float v2[3], float v[3], float out[3]){  GLint i, j;  GLfloat length;  out[0] = v1[1] * v2[2] - v1[2] * v2[1];  out[1] = v1[2] * v2[0] - v1[0] * v2[2];  out[2] = v1[0] * v2[1] - v1[1] * v2[0];  Normalize(out);}#endifvoidSetMaterial(GLfloat spec[], GLfloat amb[], GLfloat diff[], GLfloat shin[]){  glMaterialfv(GL_FRONT, GL_SPECULAR, spec);  glMaterialfv(GL_FRONT, GL_SHININESS, shin);  glMaterialfv(GL_FRONT, GL_AMBIENT, amb);  glMaterialfv(GL_FRONT, GL_DIFFUSE, diff);}voidMechTorso(char solid){  glNewList(SOLID_MECH_TORSO, GL_COMPILE);#ifdef LIGHT  SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess);#endif  glColor3f(1.0, 1.0, 0.0);  Box(1.0, 1.0, 3.0, solid);  glTranslatef(0.75, 0.0, 0.0);#ifdef LIGHT  SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -