L'exécutable

 

Fichier source : Animation4.cpp

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

static void display1(void) {
  glClearColor(0.25F,0.25F,0.25F,0.25F);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPushMatrix();
  gluLookAt(12.0,4.0,0.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(image*15.0F);
  glTranslatef(0.0F,0.0F,-15.0F);
  glRotatef(image,0.0F,1.0F,0.0F);
  damier();
  glPopMatrix();
  glFlush();
  glutSwapBuffers();
  int error = glGetError();
  if ( error != GL_NO_ERROR )
    printf("Attention erreur %d\n",error);
}

static void display2(void) {
  glClearColor(0.25F,0.25F,0.25F,0.25F);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPushMatrix();
  double angle = image*3.14159/180.0;
  double dirx = -cos(angle);
  double diry = -0.333;
  double dirz = -sin(angle);
  double ex = -15.0F*sin(angle)-12.0*dirx;
  double ey = 4.0F;
  double ez = 15.0F*cos(angle)-12.0*dirz;
  double pvx = ex+dirx;
  double pvy = ey+diry;
  double pvz = ez+dirz;
  gluLookAt(ex,ey,ez,pvx,pvy,pvz,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);
  damier();
  glRotatef(-image,0.0F,1.0F,0.0F);
  glTranslatef(0.0F,0.0F,15.0F);
  mobile(image*15.0F);
  glPopMatrix();
  glFlush();
  glutSwapBuffers();
  int error = glGetError();
  if ( error != GL_NO_ERROR )
    printf("Attention erreur %d\n",error);
}

static void display3(void) {
  glClearColor(0.25F,0.25F,0.25F,0.25F);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPushMatrix();
  double angle = image*3.14159/180.0;
  double dirx = -cos(angle);
  double diry = -0.333;
  double dirz = -sin(angle);
  double ex = -15.0F*sin(angle)-12.0*dirx;
  double ey = 4.0F;
  double ez = 15.0F*cos(angle)-12.0*dirz;
  double pvx = ex+dirx;
  double pvy = ey+diry;
  double pvz = ez+dirz;
  gluLookAt(ex,ey,ez,pvx,pvy,pvz,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);
  damier();
  glRotatef(-image,0.0F,1.0F,0.0F);
  glTranslatef(0.0F,0.0F,15.0F);
  mobile(image*15.0F);
  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) {
  image++;
  glutPostRedisplay();
}

RETOUR