L'exécutable

Fichier source : Animation2.cpp

/* Une roue                                     */

 static void roue(void) {
  glPushMatrix();
  glPushMatrix();
  glScalef(1.0F,1.0F,2.0F);
  glutSolidTorus(0.1,0.9F,18,72);
  glPopMatrix();
  for ( int i = 0 ; i < 8 ; i++ ) {
    glPushMatrix();
    glRotatef(22.5F*i,0.0F,0.0F,1.0F);
    glScalef(1.8F,0.04F,0.04F);
    glutSolidCube(1.0);
    glPopMatrix(); }
  glPopMatrix();
}

/* Un essieu                                    */

static void essieu(void) {
  glPushMatrix();
  glPushMatrix();
  glScalef(0.1F,0.1F,2.2F);
  glutSolidCube(1.0);
  glPopMatrix();
  glTranslatef(0.0F,0.0F,1.1F);
  glScalef(0.4F,0.4F,0.4F);
  roue();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0.0F,0.0F,-1.1F);
  glScalef(0.4F,0.4F,0.4F);
  roue();
  glPopMatrix();
}

/* Une automobile stylisee                      */

static void mobile(float rotationRoue) {
  glPushMatrix();
  glPushMatrix();
  glTranslatef(0.0F,0.6F,0.0F);
  glPushMatrix();
  glScalef(5.0F,0.7F,1.7F);
  glutSolidSphere(0.65,72,72);
  glPopMatrix();
  glPushMatrix();
  glTranslatef(2.5F,0.3F,0.0F);
  glScalef(0.3F,0.3F,0.3F);
  glutSolidSphere(0.25,72,72);
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0.5F,0.35F,0.0F);
  glScalef(2.8F,0.7F,1.7F);
  glutSolidSphere(0.5,72,72);
  glPopMatrix();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(1.7F,0.4F,0.0F);
  glRotatef(rotationRoue,0.0F,0.0F,1.0F);
  essieu();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(-1.8F,0.4F,0.0F);
  glRotatef(rotationRoue,0.0F,0.0F,1.0F);
  essieu();
  glPopMatrix();
  glPopMatrix();
}

/* Fonction executee lors d'un rafraichissement */
/* de la fenetre de dessin                      */

static void display(void) {
  glClearColor(0.25F,0.25F,0.25F,0.25F);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPushMatrix();
  gluLookAt(0.0,0.0,18.0,0.0,0.0,0.0,0.0,1.0,0.0);
  glLightfv(GL_LIGHT0,GL_POSITION,light0_position);
  glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
  glLightfv(GL_LIGHT2,GL_POSITION,light2_position);
  mobile(r);
  glPopMatrix();
  glFlush();
  glutSwapBuffers();
  int error = glGetError();
  if ( error != GL_NO_ERROR )
    printf("Attention erreur %d\n",error);
}

/* Fonction executee lorsqu'aucun evenement     */
/* n'est en file d'attente                      */

static void idle(void) {
  r += 1.0F;
  glutPostRedisplay();
}

RETOUR