Les bases d'OpenGL
Par Xavier Michelon


 
 

La fonction de rappel du clavier :

Nous avons enregistré précédemment une fonction nommée clavier() grâce à la fonction glutKeyboardFunc(). La dernière étape de la création de notre programme va consister à écrire cette fonction. Son prototype est défini par glut :

void clavier(unsigned char touche,int x,int y);

Lorsque l'utilisateur appuiera sur une touche du clavier, la boucle de gestion effectuera un appel à clavier(). La variable touche contiendra le caractère correspondant à la touche pressée, x et y indiqueront la position de la souris lors de la frappe sur le clavier. x et y sont données relativement à la fenêtre OpenGL. Dans la plupart des cas, la fonction de rappel pour les événements de type clavier est constituée d'une structure switch dont la clause de test porte sur le caractère passé en paramètre. Voici notre fonction clavier :

void clavier(unsigned char touche,int x,int y)
{
  switch (touche)
    {
    case 'p': /* affichage du carre plein */
      glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
      glutPostRedisplay();
      break;
    case 'f': /* affichage en mode fil de fer */
      glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
      glutPostRedisplay();
      break;
    case 's' : /* Affichage en mode sommets seuls */
      glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);
      glutPostRedisplay();
      break;
    case 'q' : /*la touche 'q' permet de quitter le programme */
      exit(0);
    }
}

La touche 'q' est associée à la fonction exit() permettant de quitter le programme. Cette méthode n'est pas très 'propre', et nous l'améliorerons le mois prochain. Les touches 'p','f' et 's' vont permettre à l'utilisateur de choisir le mode de tracé des polygones. Pour cela, il suffit de modifier l'état de la machine OpenGL, par un appel à la fonction

void glPolygonMode(GLenum face,GLenum mode);

chaque polygone possède une face avant et une face arrière définie par l'ordre de saisie des sommets du polygone. Il est possible d'associer un mode de dessin différent pour la face avant et arrière d'un polygone. Le paramètre face indique la face dont on veut changer le mode de dessin :

Le paramètre mode définit le mode de dessin souhaité pour la ou les faces choisies :

En changeant la valeur d'une variable d'état, nous modifions le processus de rendu de notre image, il est donc nécessaire d'effectuer une demande de réaffichage de la scène en appelant glutPostRedisplay(), dont l'effet et de générer un événement qui va amener la boucle de gestion des événements à lancer la fonction d'affichage.