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();
}