Beispiel #1
0
void Scene :: DrawSpotlight()
{
  GLfloat light_ambient[] = {0.1, 0.1, 0.1, 1.0};
  GLfloat light_diffuse[] = {0.5, 0.5, 0.5, 1.0};
  GLfloat light_specular[] = {0.5, 0.5, 0.5, 1.0};
  GLfloat light_position[] = {0, 15, 0, 1.0};
  GLfloat spot_direction[] = {-350, 700, 0};

  glLightfv(current_light, GL_AMBIENT, light_ambient);
  glLightfv(current_light, GL_DIFFUSE, light_diffuse);
  glLightfv(current_light, GL_SPECULAR, light_specular);
  glLightfv(current_light, GL_POSITION, light_position);
  glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);

  glLightf(current_light, GL_SPOT_CUTOFF, 45.0);
  glLightfv(current_light, GL_SPOT_DIRECTION, spot_direction);
  glLightf(current_light, GL_SPOT_EXPONENT, 2.0);

  glEnable(current_light);
  
  glPushMatrix();
    TaperedCylinder(13, 3, 3, 20);
    glTranslatef(0, 10, 0);
    glRotatef(45, 0, 0, 1);
    TaperedCylinder(0, 0, 12, 30);
    TaperedCylinder(20, 12, 12, 30);
    glTranslatef(0, 20, 0);
    TaperedCylinder(0, 0, 12, 30);
  glPopMatrix();
}  // DrawSpotlight
Beispiel #2
0
void Scene :: DrawFloor()
{
  GLfloat mat_ambient[] = {0.2, 0.2, 0.2, 1.0};
  GLfloat mat_diffuse[] = {0.2, 0.2, 0.2, 1.0};
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  GLdouble y_clip_pane[4] = {0.0, -1.0, 0.0, 0.0};
  glClipPlane(GL_CLIP_PLANE0, y_clip_pane);
  glEnable(GL_CLIP_PLANE0);
  
  glPushMatrix();
    glScalef(1, 0.3, 1);
    glutSolidSphere(1000, 30, 30);
  glPopMatrix();

  glDisable(GL_CLIP_PLANE0);

  glPushMatrix();
    TaperedCylinder(0, 1000, 0, 30);

    glBegin(GL_POLYGON);
	  glNormal3f(0, 1, 0);
	  glVertex3f(-380, 0, 925);
	  glVertex3f(380, 0, 925);
	  glVertex3f(380, 0, 1525);
	  glVertex3f(-380, 0, 1525);
	glEnd();
  glPopMatrix();
}  // DrawFloor
Beispiel #3
0
void Scene :: DrawPlatform()
{
  GLfloat mat_ambient[] = {0.4, 0.4, 0.4, 1.0};
  GLfloat mat_diffuse[] = {0.4, 0.4, 0.4, 1.0};
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  glPushMatrix();
    glTranslatef(0, 30, 0);
    TaperedCylinder(0, 185, 0, 30);
    glTranslatef(0, -6, 0);
    TaperedCylinder(6, 185, 185, 30);
    TaperedCylinder(0, 195, 0, 30);
    glTranslatef(0, -6, 0);
    TaperedCylinder(6, 195, 195, 30);
    TaperedCylinder(0, 205, 0, 30);
    glTranslatef(0, -6, 0);
    TaperedCylinder(6, 205, 205, 30);
    TaperedCylinder(0, 215, 0, 30);
    glTranslatef(0, -6, 0);
    TaperedCylinder(6, 215, 215, 30);
    TaperedCylinder(0, 225, 0, 30);
    glTranslatef(0, -6, 0);
    TaperedCylinder(6, 225, 225, 30);
  glPopMatrix();
  glPushMatrix();
    glRotatef(-45, 0, 1, 0);
    glTranslatef(185, 30, 0);
	current_light = GL_LIGHT1;
    DrawSpotlight();						// draw front right spotlight
  glPopMatrix();
  glPushMatrix();
    glRotatef(45, 0, 1, 0);
    glTranslatef(-185, 30, 0);
    glRotatef(180, 0, 1, 0);
    current_light = GL_LIGHT2;
    DrawSpotlight();							// draw front left spotlight
  glPopMatrix();
    glPushMatrix();
    glTranslatef(0, 30, -185);
    glRotatef(90, 0, 1, 0);
	current_light = GL_LIGHT3;
    DrawSpotlight();							// draw back spotlight
  glPopMatrix();
}  // DrawPlatform
Beispiel #4
0
void Scene :: DrawCageDome()
{
  GLdouble z_clip_pane[4] = {0.0, 0.0, -1.0, 925.0};
  GLdouble y_clip_pane[4] = {0.0, 1.0, 0.0, 0.0};
  glClipPlane(GL_CLIP_PLANE0, z_clip_pane);
  glClipPlane(GL_CLIP_PLANE4, y_clip_pane);
  glEnable(GL_CLIP_PLANE0);
  glEnable(GL_CLIP_PLANE4);

  glPushMatrix();
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
    DrawVerticalGirder();
    glRotatef(20, 0, 1, 0);
  glPopMatrix();

  glPushMatrix();
    DrawHorizontalGirder(-5);
	DrawHorizontalGirder(100);
	DrawHorizontalGirder(200);
	DrawHorizontalGirder(300);
	DrawHorizontalGirder(400);
	DrawHorizontalGirder(500);
	DrawHorizontalGirder(600);
	DrawHorizontalGirder(700);
	DrawHorizontalGirder(800);
	DrawHorizontalGirder(900);
	DrawHorizontalGirder(1000);
  glPopMatrix();
  
  glDisable(GL_CLIP_PLANE0);

  glPushMatrix();
    glTranslatef(0, 0, 700 + 225);
    glRotatef(90, 1, 0, 0);
    TaperedCylinder(600, 380, 380, 30);
  glPopMatrix();

  glDisable(GL_CLIP_PLANE4);
}  // DrawDome
Beispiel #5
0
void Decepticon :: DrawBody()
{
  if (anti_aliasing)
  {
    glEnable (GL_LINE_SMOOTH);
    glEnable (GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
    glLineWidth (1.5);
  }  // if statement

  GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};
  GLfloat mat_diffuse[] = {0.0, 0.0, 0.8, 1.0};
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  glBegin(display_mode);				// bottom left edge
    CalculateNormal(10, 10, -2.5, -2.5, 0, -2.5);
	glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-35, 0, 20);
	glVertex3f(-37.5, 0, 17.5);
	glVertex3f(-45, 10, 17.5);
	glVertex3f(-42.5, 10, 20);
  glEnd();

  glBegin(display_mode);				// bottom right edge
    CalculateNormal(2.5, 0, -2.5, 5, 10, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(35, 0, 20);
	glVertex3f(37.5, 0, 17.5);
	glVertex3f(45, 10, 17.5);
	glVertex3f(42.5, 10, 20);
  glEnd(); 

  glBegin(display_mode);				// left edge
    CalculateNormal(-2.5, 40, -2.5, -2.5, 0, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-42.5, 10, 20);
	glVertex3f(-45, 10, 17.5);
	glVertex3f(-45, 50, 17.5);
	glVertex3f(-42.5, 47.5, 20);
  glEnd();

  glBegin(display_mode);				// right edge
    CalculateNormal(2.5, 0, -2.5, 2.5, 40, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(42.5, 10, 20);
	glVertex3f(45, 10, 17.5);
	glVertex3f(45, 50, 17.5);
	glVertex3f(42.5, 47.5, 20);
  glEnd();

  glBegin(display_mode);				// top left edge
    CalculateNormal(30, 2.5, -2.5, 27.5, 2.5, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-42.5, 47.5, 20);
	glVertex3f(-45, 50, 17.5);
	glVertex3f(-15, 50, 17.5);
	glVertex3f(-15, 47.5, 20);
  glEnd();

  glBegin(display_mode);				// top right edge
    CalculateNormal(2.5, 2.5, -2.5, -27.5, 2.5, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(42.5, 47.5, 20);
	glVertex3f(45, 50, 17.5);
	glVertex3f(15, 50, 17.5);
	glVertex3f(15, 47.5, 20);
  glEnd();

  glBegin(display_mode);				// left inner wall
    glNormal3f(0, 0, 1);
    glVertex3f(-15, 50, 15);
    glVertex3f(-15, 50, 17.5);
	glVertex3f(-15, 47.5, 20);
	glVertex3f(-15, 45, 20);
	glVertex3f(-15, 45, 17.5);
  glEnd();

  glBegin(display_mode);				// right inner wall
    glNormal3f(0, 0, 1);
    glVertex3f(15, 50, 15);
    glVertex3f(15, 50, 17.5);
	glVertex3f(15, 47.5, 20);
	glVertex3f(15, 45, 20);
	glVertex3f(15, 45, 17.5);
  glEnd();

  glBegin(display_mode);				// middle flat wall
    glNormal3f(0, 1, 0);
    glVertex3f(-15, 45, 17.5);
	glVertex3f(-15, 45, 20);
	glVertex3f(15, 45, 20);
	glVertex3f(15, 45, 17.5);
  glEnd();

  glBegin(display_mode);			// middle slanted edge
    CalculateNormal(30, 5, -2.5, 0, 5, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-15, 45, 17.5);
	glVertex3f(-15, 50, 15);
	glVertex3f(15, 50, 15);
	glVertex3f(15, 45, 17.5);
  glEnd();

  glBegin(display_mode);				// bottom edge
    CalculateNormal(-2.5, 0, -2.5, 72.5, 0, -2.5);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-35, 0, 20);
	glVertex3f(-37.5, 0, 17.5);
	glVertex3f(37.5, 0, 17.5);
	glVertex3f(35, 0, 20);
  glEnd();

  glBegin(display_mode);			// back face
    glNormal3f(0, 0, -1);
    glVertex3f(-37.5, 0, -17.5);
	glVertex3f(-45, 10, -17.5);
	glVertex3f(-45, 50, -17.5);
	glVertex3f(45, 50, -17.5);
	glVertex3f(45, 10, -17.5);
	glVertex3f(37.5, 0, -17.5);
  glEnd();

  glBegin(display_mode);				// front bevelled left face
    glNormal3f(0, 0, 1);
    glVertex3f(-35, 0, 20);
	glVertex3f(-42.5, 10, 20);
	glVertex3f(-42.5, 47.5, 20);
    glVertex3f(-30, 40, 20);
	glVertex3f(-30, 15, 20);
	glVertex3f(-27.5, 12.5, 20);
  glEnd();

  glBegin(display_mode);				// front bevelled left edge
    glNormal3f(1, 0, 0);
	glVertex3f(-30, 40, 20);
	glVertex3f(-30, 15, 20);
	glVertex3f(-30, 15, 17.5);
	glVertex3f(-30, 40, 17.5);
  glEnd();

  glBegin(display_mode);				// front bevelled right face
    glNormal3f(0, 0, 1);
    glVertex3f(35, 0, 20);
	glVertex3f(42.5, 10, 20);
	glVertex3f(42.5, 47.5, 20);
    glVertex3f(30, 40, 20);
	glVertex3f(30, 15, 20);
	glVertex3f(27.5, 12.5, 20);
  glEnd();

  glBegin(display_mode);				// front bevelled right edge
    glNormal3f(-1, 0, 0);
    glVertex3f(30, 40, 20);
    glVertex3f(30, 15, 20);
    glVertex3f(30, 15, 17.5);
    glVertex3f(30, 40, 17.5);
  glEnd();

  glBegin(display_mode);				// front bevelled bottom face
    glNormal3f(0, 0, 1);
	glVertex3f(-35, 0, 20);
	glVertex3f(-27.5, 12.5, 20);
	glVertex3f(27.5, 12.5, 20);
	glVertex3f(35, 0, 20);
  glEnd();

  glBegin(display_mode);				// front bevelled bottom edge
    glNormal3f(0, 1, 0);
	glVertex3f(-27.5, 12.5, 20);
	glVertex3f(27.5, 12.5, 20);
	glVertex3f(27.5, 12.5, 17.5);
	glVertex3f(-27.5, 12.5, 17.5);
  glEnd();

  glBegin(display_mode);				// front bevelled bottom left edge
    CalculateNormal(-2.5, 2.5, -2.5, -2.5, 2.5, 0);
	glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-27.5, 12.5, 20);
	glVertex3f(-30, 15, 20);
	glVertex3f(-30, 15, 17.5);
	glVertex3f(-27.5, 12.5, 17.5);
  glEnd();

  glBegin(display_mode);				// front bevelled bottom right edge
    CalculateNormal(2.5, 2.5, 0, 2.5, 2.5, -2.5);
	glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(27.5, 12.5, 20);
    glVertex3f(30, 15, 20);
    glVertex3f(30, 15, 17.5);
    glVertex3f(27.5, 12.5, 17.5);
  glEnd();

  glBegin(display_mode);					// front bevelled top left face
    glNormal3f(0, 0, 1);
	glVertex3f(-30, 40, 20);
	glVertex3f(-42.5, 47.5, 20);
	glVertex3f(-15, 47.5, 20);
	glVertex3f(-15, 40, 20);
  glEnd();

  glBegin(display_mode);					// front bevelled top right face
    glNormal3f(0, 0, 1);
    glVertex3f(30, 40, 20);
    glVertex3f(42.5, 47.5, 20);
    glVertex3f(15, 47.5, 20);
    glVertex3f(15, 40, 20);
  glEnd();

  glBegin(display_mode);					// front bevelled top middle face
    glNormal3f(0, 0, 1);
	glVertex3f(-15, 45, 20);
	glVertex3f(-15, 40, 20);
	glVertex3f(15, 40, 20);
	glVertex3f(15, 45, 20);
  glEnd();

  glBegin(display_mode);					// front bevelled top edge
    glNormal3f(0, 1, 0);
    glVertex3f(-30, 40, 20);
    glVertex3f(30, 40, 20);
    glVertex3f(30, 40, 17.5);
    glVertex3f(-30, 40, 17.5);
  glEnd();

  glBegin(display_mode);				// bottom face
    glNormal3f(0, -1, 0);
    glVertex3f(-37.5, 0, 17.5);
	glVertex3f(-37.5, 0, -17.5);
	glVertex3f(37.5, 0, -17.5);
	glVertex3f(37.5, 0, 17.5);
  glEnd();

  glBegin(display_mode);				// bottom left face
    CalculateNormal(-7.5, 10, 35, -7.5, 10, 0);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-37.5, 0, 17.5);
	glVertex3f(-45, 10, 17.5);
	glVertex3f(-45, 10, -17.5);
	glVertex3f(-37.5, 0, -17.5);
  glEnd();
  
  glBegin(display_mode);				// bottom right face
    CalculateNormal(7.5, 10, 0, 7.5, 10, 35);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(37.5, 0, 17.5);
	glVertex3f(45, 10, 17.5);
	glVertex3f(45, 10, -17.5);
	glVertex3f(37.5, 0, -17.5);
  glEnd();

  glBegin(display_mode);				// left face
    glNormal3f(-1, 0, 0);
    glVertex3f(-45, 10, 17.5);
	glVertex3f(-45, 50, 17.5);
	glVertex3f(-45, 50, -17.5);
	glVertex3f(-45, 10, -17.5);
  glEnd();

  glBegin(display_mode);				// right face
    glNormal3f(1, 0, 0);
    glVertex3f(45, 10, 17.5);
	glVertex3f(45, 50, 17.5);
	glVertex3f(45, 50, -17.5);
	glVertex3f(45, 10, -17.5);
  glEnd();

  glBegin(display_mode);				// top face
    glNormal3f(0, 1, 0);
    glVertex3f(-45, 50, 17.5);
	glVertex3f(-15, 50, 17.5);
	glVertex3f(-15, 50, 15);
	glVertex3f(15, 50, 15);
	glVertex3f(15, 50, 17.5);
	glVertex3f(45, 50, 17.5);
	glVertex3f(45, 50, -17.5);
	glVertex3f(-45, 50, -17.5);
  glEnd();

  mat_ambient[0] = 1.0;
  mat_ambient[1] = 1.0;
  mat_ambient[2] = 0.0;
  mat_diffuse[0] = 0.8;
  mat_diffuse[1] = 0.8;
  mat_diffuse[2] = 0.0;
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  glBegin(display_mode);				// left upper stripe face
    glNormal3f(0, 0, 1);
    glVertex3f(-42.5, 35, 21);
	glVertex3f(-42.5, 31, 21);
	glVertex3f(-32.5, 31, 21);
	glVertex3f(-32.5, 35, 21);
  glEnd();

  glBegin(display_mode);				// right upper stripe face
    glNormal3f(0, 0, 1);
    glVertex3f(42.5, 35, 21);
	glVertex3f(42.5, 31, 21);
	glVertex3f(32.5, 31, 21);
	glVertex3f(32.5, 35, 21);
  glEnd();

  glBegin(display_mode);				// left lower stripe face
    glNormal3f(0, 0, 1);
    glVertex3f(-42.5, 29, 21);
	glVertex3f(-42.5, 25, 21);
	glVertex3f(-32.5, 25, 21);
	glVertex3f(-32.5, 29, 21);
  glEnd();

  glBegin(display_mode);				// right lower stripe face
    glNormal3f(0, 0, 1);
    glVertex3f(42.5, 29, 21);
	glVertex3f(42.5, 25, 21);
	glVertex3f(32.5, 25, 21);
	glVertex3f(32.5, 29, 21);
  glEnd();

  glBegin(display_mode);					// left upper stripe left rise
    glNormal3f(-1, 0, 0);
    glVertex3f(-42.5, 35, 21);
	glVertex3f(-42.5, 31, 21);
	glVertex3f(-42.5, 31, 20);
	glVertex3f(-42.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// right upper stripe right rise
    glNormal3f(1, 0, 0);
    glVertex3f(42.5, 35, 21);
	glVertex3f(42.5, 31, 21);
	glVertex3f(42.5, 31, 20);
	glVertex3f(42.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// left upper stripe upper rise
    glNormal3f(0, 1, 0);
    glVertex3f(-42.5, 35, 21);
	glVertex3f(-32.5, 35, 21);
	glVertex3f(-32.5, 35, 20);
	glVertex3f(-42.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// right upper stripe upper rise
    glNormal3f(0, 1, 0);
    glVertex3f(42.5, 35, 21);
	glVertex3f(32.5, 35, 21);
	glVertex3f(32.5, 35, 20);
	glVertex3f(42.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// left upper stripe right rise
    glNormal3f(1, 0, 0);
    glVertex3f(-32.5, 35, 21);
	glVertex3f(-32.5, 31, 21);
	glVertex3f(-32.5, 31, 20);
	glVertex3f(-32.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// right upper stripe left rise
    glNormal3f(-1, 0, 0);
    glVertex3f(32.5, 35, 21);
	glVertex3f(32.5, 31, 21);
	glVertex3f(32.5, 31, 20);
	glVertex3f(32.5, 35, 20);
  glEnd();

  glBegin(display_mode);					// left upper stripe lower rise
    glNormal3f(0, -1, 0);
    glVertex3f(-42.5, 31, 21);
	glVertex3f(-32.5, 31, 21);
	glVertex3f(-32.5, 31, 20);
	glVertex3f(-42.5, 31, 20);
  glEnd();

  glBegin(display_mode);					// right upper stripe lower rise
    glNormal3f(0, -1, 0);
    glVertex3f(42.5, 31, 21);
	glVertex3f(32.5, 31, 21);
	glVertex3f(32.5, 31, 20);
	glVertex3f(42.5, 31, 20);
  glEnd();

  glBegin(display_mode);					// left lower stripe left rise
    glNormal3f(-1, 0, 0);
    glVertex3f(-42.5, 29, 21);
	glVertex3f(-42.5, 25, 21);
	glVertex3f(-42.5, 25, 20);
	glVertex3f(-42.5, 29, 20);
  glEnd();

  glBegin(display_mode);					// right lower stripe right rise
    glNormal3f(1, 0, 0);
    glVertex3f(42.5, 29, 21);
	glVertex3f(42.5, 25, 21);
	glVertex3f(42.5, 25, 20);
	glVertex3f(42.5, 29, 20);
  glEnd();

  glBegin(display_mode);					// left lower stripe upper rise
    glNormal3f(0, 1, 0);
    glVertex3f(-42.5, 29, 21);
	glVertex3f(-32.5, 29, 21);
	glVertex3f(-32.5, 29, 20);
	glVertex3f(-42.5, 29, 20);
  glEnd();

  glBegin(display_mode);					// right lower stripe upper rise
    glNormal3f(0, 1, 0);
    glVertex3f(42.5, 29, 21);
	glVertex3f(32.5, 29, 21);
	glVertex3f(32.5, 29, 20);
	glVertex3f(42.5, 29, 20);
  glEnd();

  glBegin(display_mode);					// left lower stripe right rise
    glNormal3f(1, 0, 0);
    glVertex3f(-32.5, 29, 21);
	glVertex3f(-32.5, 25, 21);
	glVertex3f(-32.5, 25, 20);
	glVertex3f(-32.5, 29, 21);
  glEnd();

  glBegin(display_mode);					// right lower stripe left rise
    glNormal3f(-1, 0, 0);
    glVertex3f(32.5, 29, 21);
	glVertex3f(32.5, 25, 21);
	glVertex3f(32.5, 25, 20);
	glVertex3f(32.5, 29, 21);
  glEnd();

  glBegin(display_mode);					// left lower stripe lower rise
    glNormal3f(0, -1, 0);
    glVertex3f(-42.5, 25, 21);
	glVertex3f(-32.5, 25, 21);
	glVertex3f(-32.5, 25, 20);
	glVertex3f(-42.5, 25, 20);
  glEnd();

  glBegin(display_mode);					// right lower stripe lower rise
    glNormal3f(0, 0, -1);
    glVertex3f(42.5, 25, 21);
	glVertex3f(32.5, 25, 21);
	glVertex3f(32.5, 25, 20);
	glVertex3f(42.5, 25, 20);
  glEnd();

  mat_ambient[0] = 0.0;
  mat_ambient[1] = 0.0;
  mat_ambient[2] = 0.8;
  mat_diffuse[0] = 0.0;
  mat_diffuse[1] = 0.0;
  mat_diffuse[2] = 0.5;
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  glBegin(display_mode);				// back brace back left face
    glNormal3f(0, 0, -1);
	glVertex3f(-45, 20, -15);
	glVertex3f(-50, 25, -15);
	glVertex3f(-50, 50, -15);
	glVertex3f(-45, 50, -15);
  glEnd();

  glBegin(display_mode);				// back brace back right face
    glNormal3f(0, 0, -1);
	glVertex3f(45, 20, -15);
	glVertex3f(50, 25, -15);
	glVertex3f(50, 50, -15);
	glVertex3f(45, 50, -15);
  glEnd();

  glBegin(display_mode);				// back brace back top face
    glNormal3f(0, 0, -1);
	glVertex3f(-50, 50, -15);
	glVertex3f(-45, 55, -15);
	glVertex3f(45, 55, -15);
	glVertex3f(50, 50, -15);
  glEnd();

  glBegin(display_mode);				// back brace front left face
    glNormal3f(0, 0, 1);
	glVertex3f(-45, 20, -5);
	glVertex3f(-50, 25, -5);
	glVertex3f(-50, 50, -5);
	glVertex3f(-45, 50, -5);
  glEnd();

  glBegin(display_mode);				// back brace front right face
    glNormal3f(0, 0, 1);
	glVertex3f(45, 20, -5);
	glVertex3f(50, 25, -5);
	glVertex3f(50, 50, -5);
	glVertex3f(45, 50, -5);
  glEnd();

  glBegin(display_mode);				// back brace front top face
    glNormal3f(0, 0, 1);
	glVertex3f(-50, 50, -5);
	glVertex3f(-45, 55, -5);
	glVertex3f(45, 55, -5);
	glVertex3f(50, 50, -5);
  glEnd();

  glBegin(display_mode);				// front brace back left face
    glNormal3f(0, 0, -1);
	glVertex3f(-45, 20, 5);
	glVertex3f(-50, 25, 5);
	glVertex3f(-50, 50, 5);
	glVertex3f(-45, 50, 5);
  glEnd();

  glBegin(display_mode);				// front brace back right face
    glNormal3f(0, 0, -1);
	glVertex3f(45, 20, 5);
	glVertex3f(50, 25, 5);
	glVertex3f(50, 50, 5);
	glVertex3f(45, 50, 5);
  glEnd();

  glBegin(display_mode);				// front brace back top face
    glNormal3f(0, 0, 1);
	glVertex3f(-50, 50, 15);
	glVertex3f(-45, 55, 15);
	glVertex3f(45, 55, 15);
	glVertex3f(50, 50, 15);
  glEnd();

  glBegin(display_mode);				// front brace back left face
    glNormal3f(0, 0, 1);
	glVertex3f(-45, 20, 15);
	glVertex3f(-50, 25, 15);
	glVertex3f(-50, 50, 15);
	glVertex3f(-45, 50, 15);
  glEnd();

  glBegin(display_mode);				// front brace back right face
    glNormal3f(0, 0, 1);
	glVertex3f(45, 20, 15);
	glVertex3f(50, 25, 15);
	glVertex3f(50, 50, 15);
	glVertex3f(45, 50, 15);
  glEnd();

  glBegin(display_mode);				// front brace back top face
    glNormal3f(0, 0, 1);
	glVertex3f(-50, 50, 15);
	glVertex3f(-45, 55, 15);
	glVertex3f(45, 55, 15);
	glVertex3f(50, 50, 15);
  glEnd();

  glBegin(display_mode);				// back brace lower left edge
    CalculateNormal(-5, 5, 0, -5, 5, -10);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-45, 20, -5);
	glVertex3f(-50, 25, -5);
	glVertex3f(-50, 25, -15);
	glVertex3f(-45, 20, -15);
  glEnd();

  glBegin(display_mode);				// front brace lower left edge
    CalculateNormal(-5, 5, 10, -5, 5, 0);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-45, 20, 5);
	glVertex3f(-50, 25, 5);
	glVertex3f(-50, 25, 15);
	glVertex3f(-45, 20, 15);
  glEnd();

  glBegin(display_mode);				// back brace lower right edge
    CalculateNormal(5, 5, -10, 5, 5, 0);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(45, 20, -5);
	glVertex3f(50, 25, -5);
	glVertex3f(50, 25, -15);
	glVertex3f(45, 20, -15);
  glEnd();

  glBegin(display_mode);				// front brace lower right edge
    CalculateNormal(5, 5, 0, 5, 5, 10);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(45, 20, 5);
	glVertex3f(50, 25, 5);
	glVertex3f(50, 25, 15);
	glVertex3f(45, 20, 15);
  glEnd();

  glBegin(display_mode);				// back brace left edge
    glNormal3f(-1, 0, 0);
    glVertex3f(-50, 25, -5);
	glVertex3f(-50, 50, -5);
	glVertex3f(-50, 50, -15);
	glVertex3f(-50, 25, -15);
  glEnd();

  glBegin(display_mode);				// front brace left edge
    glNormal3f(-1, 0, 0);
    glVertex3f(-50, 25, 5);
	glVertex3f(-50, 50, 5);
	glVertex3f(-50, 50, 15);
	glVertex3f(-50, 25, 15);
  glEnd();

  glBegin(display_mode);				// back brace right edge
    glNormal3f(1, 0, 0);
    glVertex3f(50, 25, -5);
	glVertex3f(50, 50, -5);
	glVertex3f(50, 50, -15);
	glVertex3f(50, 25, -15);
  glEnd();

  glBegin(display_mode);				// front brace right edge
    glNormal3f(1, 0, 0);
    glVertex3f(50, 25, 5);
	glVertex3f(50, 50, 5);
	glVertex3f(50, 50, 15);
	glVertex3f(50, 25, 15);
  glEnd();

  glBegin(display_mode);				// back brace top left edge
    CalculateNormal(5, 5, 0, 5, 5, -10);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-50, 50, -5);
	glVertex3f(-45, 55, -5);
	glVertex3f(-45, 55, -15);
	glVertex3f(-50, 50, -15);
  glEnd();

  glBegin(display_mode);				// back brace top right edge
    CalculateNormal(-5, 5, -10, -5, 5, 0);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(50, 50, -5);
	glVertex3f(45, 55, -5);
	glVertex3f(45, 55, -15);
	glVertex3f(50, 50, -15);
  glEnd();

  glBegin(display_mode);				// front brace top left edge
    CalculateNormal(5, 5, 10, 5, 5, 0);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(-50, 50, 5);
	glVertex3f(-45, 55, 5);
	glVertex3f(-45, 55, 15);
	glVertex3f(-50, 50, 15);
  glEnd();

  glBegin(display_mode);				// front brace top right edge
    CalculateNormal(5, 5, 0, -5, 5, 10);
    glNormal3f(normal_vector[0], normal_vector[1], normal_vector[2]);
    glVertex3f(50, 50, 5);
	glVertex3f(45, 55, 5);
	glVertex3f(45, 55, 15);
	glVertex3f(50, 50, 15);
  glEnd();

  glBegin(display_mode);				// back brace top edge
    glNormal3f(0, 1, 0);
    glVertex3f(-45, 55, -5);
	glVertex3f(45, 55, -5);
	glVertex3f(45, 55, -15);
	glVertex3f(-45, 55, -15);
  glEnd();

  glBegin(display_mode);				// front brace top edge
    glNormal3f(0, 1, 0);
    glVertex3f(-45, 55, 5);
	glVertex3f(45, 55, 5);
	glVertex3f(45, 55, 15);
	glVertex3f(-45, 55, 15);
  glEnd();

  mat_ambient[0] = 1.0;
  mat_ambient[1] = 1.0;
  mat_ambient[2] = 1.0;
  mat_diffuse[0] = 1.0;
  mat_diffuse[1] = 1.0;
  mat_diffuse[2] = 1.0;
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  glBegin(display_mode);				// gun-mount front face
    glNormal3f(0, 0, 1);
    glVertex3f(22, 55, 12.5);
	glVertex3f(22, 60, 12.5);
	glVertex3f(32, 60, 12.5);
	glVertex3f(32, 55, 12.5);
  glEnd();

  glBegin(display_mode);				// gun-mount back face
    glNormal3f(0, 0, -1);
    glVertex3f(22, 55, 7.5);
	glVertex3f(22, 60, 7.5);
	glVertex3f(32, 60, 7.5);
	glVertex3f(32, 55, 7.5);
  glEnd();

  glBegin(display_mode);				// gun-mount left face
    glNormal3f(-1, 0, 0);
	glVertex3f(22, 55, 12.5);
	glVertex3f(22, 60, 12.5);
	glVertex3f(22, 60, 7.5);
	glVertex3f(22, 55, 7.5);
  glEnd();

  glBegin(display_mode);				// gun-mount right face
    glNormal3f(1, 0, 0);
	glVertex3f(32, 55, 12.5);
	glVertex3f(32, 60, 12.5);
	glVertex3f(32, 60, 7.5);
	glVertex3f(32, 55, 7.5);
  glEnd();

  glBegin(display_mode);				// gun-mount top face
    glNormal3f(0, 1, 0);
	glVertex3f(22, 60, 12.5);
	glVertex3f(22, 60, 7.5);
	glVertex3f(32, 60, 7.5);
	glVertex3f(32, 60, 12.5);
  glEnd();

  mat_ambient[0] = 0.0;
  mat_ambient[1] = 0.0;
  mat_ambient[2] = 1.0;
  mat_diffuse[0] = 0.0;
  mat_diffuse[1] = 0.0;
  mat_diffuse[2] = 0.8;
  glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

  if (display_mode == GL_LINE_LOOP)
  {
	glPushMatrix();
	  glTranslatef(-30, 67.5, -32.5);
	  glRotatef(90, 1, 0, 0);
	  TaperedWireCylinder(0, 12.5, 0, 20);
	  TaperedWireCylinder(15, 12.5, 12.5, 20);
	  glTranslatef(0, 15, 0);
	  TaperedWireCylinder(0, 12.5, 9.5, 20);
	  TaperedWireCylinder(3, 9.5, 9.5, 20);
	  glTranslatef(0, 3, 0);
	  TaperedWireCylinder(0, 9.5, 12.5, 20);
	  TaperedWireCylinder(30, 12.5, 12.5, 20);
	  glTranslatef(0, 30, 0);
	  TaperedWireCylinder(0, 12.5, 9.5, 20);
	  TaperedWireCylinder(2, 9.5, 9.5, 20);
	  glTranslatef(0, 2, 0);
	  TaperedWireCylinder(0, 9.5, 12.5, 20);
	  TaperedWireCylinder(4, 12.5, 12.5, 20);
	  glTranslatef(0, 4, 0);
	  TaperedWireCylinder(0, 12.5, 9.5, 20);
	  TaperedWireCylinder(5, 9.5, 9.5, 20);
	  glTranslatef(0, 5, 0);
	  TaperedWireCylinder(0, 9.5, 12.5, 20);
	  TaperedWireCylinder(4, 12.5, 12.5, 20);
	  glTranslatef(0, 4, 0);
	  TaperedWireCylinder(0, 12.5, 9.5, 20);
	  TaperedWireCylinder(2, 9.5, 9.5, 20);
	  glTranslatef(0, 2, 0);
	  TaperedWireCylinder(0, 9.5, 12.5, 20);
	  glPushMatrix();
	    glTranslatef(0, 5, 0);
		  mat_ambient[0] = 1.0;
          mat_ambient[1] = 0.0;
          mat_ambient[2] = 0.0;
          mat_diffuse[0] = 0.8;
          mat_diffuse[1] = 0.0;
          mat_diffuse[2] = 0.0;
          glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
          glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

		  TaperedWireCylinder(5, 12.5, 12.5, 20);
		  mat_ambient[0] = 0.0;
          mat_ambient[1] = 0.0;
          mat_ambient[2] = 1.0;
          mat_diffuse[0] = 0.0;
          mat_diffuse[1] = 0.0;
          mat_diffuse[2] = 1.0;
          glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
          glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
	  glPopMatrix();
	  TaperedWireCylinder(15, 12.5, 12.5, 20);
	  glTranslatef(0, 15, 0);
	  TaperedWireCylinder(0, 12.5, 9.5, 20);
	  glTranslatef(0, -2, 0);
	  TaperedWireCylinder(0, 9.5, 0, 20);
	  TaperedWireCylinder(2, 9.5, 9.5, 20);
	glPopMatrix();
  }  // if statement
  else if (display_mode == GL_POLYGON)
  {
	glPushMatrix();
	  glTranslatef(-30, 67.5, -32.5);
	  glRotatef(90, 1, 0, 0);
	  TaperedCylinder(0, 12.5, 0, 20);
	  TaperedCylinder(15, 12.5, 12.5, 20);
	  glTranslatef(0, 15, 0);
	  TaperedCylinder(0, 12.5, 9.5, 20);
	  TaperedCylinder(3, 9.5, 9.5, 20);
	  glTranslatef(0, 3, 0);
	  TaperedCylinder(0, 9.5, 12.5, 20);
	  TaperedCylinder(30, 12.5, 12.5, 20);
	  glTranslatef(0, 30, 0);
	  TaperedCylinder(0, 12.5, 9.5, 20);
	  TaperedCylinder(2, 9.5, 9.5, 20);
	  glTranslatef(0, 2, 0);
	  TaperedCylinder(0, 9.5, 12.5, 20);
	  TaperedCylinder(4, 12.5, 12.5, 20);
	  glTranslatef(0, 4, 0);
	  TaperedCylinder(0, 12.5, 9.5, 20);
	  TaperedCylinder(5, 9.5, 9.5, 20);
	  glTranslatef(0, 5, 0);
	  TaperedCylinder(0, 9.5, 12.5, 20);
	  TaperedCylinder(4, 12.5, 12.5, 20);
	  glTranslatef(0, 4, 0);
	  TaperedCylinder(0, 12.5, 9.5, 20);
	  TaperedCylinder(2, 9.5, 9.5, 20);
	  glTranslatef(0, 2, 0);
	  TaperedCylinder(0, 9.5, 12.5, 20);
	  glPushMatrix();
	    glTranslatef(0, 5, 0);
		  mat_ambient[0] = 1.0;
          mat_ambient[1] = 0.0;
          mat_ambient[2] = 0.0;
          mat_diffuse[0] = 0.8;
          mat_diffuse[1] = 0.0;
          mat_diffuse[2] = 0.0;
          glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
          glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

		  TaperedCylinder(5, 12.6, 12.6, 20);
		  mat_ambient[0] = 0.0;
          mat_ambient[1] = 0.0;
          mat_ambient[2] = 1.0;
          mat_diffuse[0] = 0.0;
          mat_diffuse[1] = 0.0;
          mat_diffuse[2] = 1.0;
          glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
          glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
	  glPopMatrix();
	  TaperedCylinder(15, 12.5, 12.5, 20);
	  glTranslatef(0, 15, 0);
	  TaperedCylinder(0, 12.5, 9.5, 20);
	  glTranslatef(0, -2, 0);
	  TaperedCylinder(0, 9.5, 0, 20);
	  TaperedCylinder(2, 9.5, 9.5, 20);
	glPopMatrix();
  }  // else statement
}  // DrawBody