Les bases d'OpenGL
Par Xavier Michelon


 
 

La fonction d'affichage :

La fonction d'affichage constitue le coeur du programme. C'est ici que nous allons décrire la scène. Pour être plus exact, la fonction d'affichage contient la procédure à appliquer pour redessiner notre scène dans la fenêtre, en commençant par un remplissage de la fenêtre avec la couleur de fond que nous avons défini dans la phase d'initialisation. On utilise pour cela

void glClear(GLbitfield masque);

OpenGL travaille avec plusieurs zone tampons en plus de la zone d'image (tampon de profondeur, d'accumulation...). Le paramètre masque permet de spécifier les tampons que l'on souhaite effacer. Nous n'utilisons aujourd'hui que le tampon d'image. Notre masque vaudra GL_COLOR_BUFFER_BIT.

Il nous faut ensuite décrire la scène 3D. La méthode de représentation d'un scène d'OpenGL est la plus classique qui soit :

Si vous êtes un de fan de Quake 3, vous savez sans doute que cette méthode de description n'est pas la seule : OpenGL autorise l'utilisation de courbes de Bézier et autres NURBS pour la description des objets. Oublions ceci pour l'instant. Pour spécifier notre scène 3D, nous allons devoir énumérer la liste des polygones. La méthode est la suivante : on indique le début de la description du polygone, on explicite chaque point du polygone, puis on indique la fin de l'énumération. A chaque déclaration de points, on peut modifier certaines variables d'état, comme la couleur active. Notre scène ne comportant qu'un polygone, la description sera vite faite.

  glBegin(GL_POLYGON);
  glColor3f(1.0,0.0,0.0);
  glVertex2f(-0.5,-0.5);
  glColor3f(0.0,1.0,0.0);
  glVertex2f(0.5,-0.5);
  glColor3f(0.0,0.0,1.0);
  glVertex2f(0.5,0.5);
  glColor3f(1.0,1.0,1.0);
  glVertex2f(-0.5,0.5);
  glEnd();

Chaque description de polygone commence par un appel à

void glBegin(GLenum mode);

Le paramètre mode auquel nous donnons la valeur GL_POLYGON indique la technique utilisée pour relier par des arêtes les différents points du polygone. En mode GL_POLYGON, chaque sommet et relié à son prédécesseur, et pour fermer le polygone, le dernier point est relié au premier.

La primitive de spécification d'un sommet du polygone est glVertex(). comme nous travaillons dans le plan d'équation z=0, nous utiliserons la variante à deux arguments de type GLfloat :

void glVertex2f(GLfloat x,GLfloat y);

Bien entendu, x et y sont les coordonnées cartésiennes du sommet. La commande glColor3f() modifie la couleur dite active. Son prototype est :

void glColor3f(GLfloat    r, GLfloat v,GLfloat b);

Chaque sommet d'un polygone possède une couleur, qui est la couleur active lors de la création du sommet avec glVertex(). En associant à chaque point de notre carré une couleur différente, et compte tenu du mode de remplissage de polygone proposé par défaut, notre carré sera rempli en interpolant les couleurs des sommets. En termes simples, on obtient un dégradé.

La fin de la description d'un polygone est marquée par un simple glEnd().Dans le cadre d'un cube, il faudrait réitérer 5 fois l'opération de description de polygone. Pour nous simplifier la tâche, OpenGL dispose d'un certain nombre des fonctionnalités comme des liste d'affichage.

Pour terminer notre fonction d'affichage, un glFlush() permet de s'assurer que toutes les commandes ont bien été transmises au serveur.