Compilez le projet en tapant ''make''. Exécutez
le programme en tapant ''./run''. Dans la fenêtre
openGL rien ne s'affiche pour l'instant, c'est normal.
Comment dessine t-on un triangle en openGL ?
glVertex3f( 0.0, 0.0, 0.0 ); // Le premier point (0,0,0)
glVertex3f( 1.0, 0.0, 0.0 ); // Le deuxième point (1,0,0)
glVertex3f( 1.0, 1.0, 0.0 ); // Le troisième point (1,1,0)
glEnd(); // Termine le tracé de triangles (OBLIGATOIRE !)
Comment affecte t-on une couleur RGB à un triangle ? Il suffit d'ajouter la commande ''glColor3f'' avant le premier vertex (les couleurs vont de ''0.0'' à ''1.0'', ainsi le blanc s'écrit ''1.0,1.0,1.0''):
glColor3f( 1.0, 0.0, 0.0 ); // Rouge
glVertex3f( 0.0, 0.0, 0.0 ); // Le premier point (0,0,0)
glVertex3f( 1.0, 0.0, 0.0 ); // Le deuxième point (1,0,0)
glVertex3f( 1.0, 1.0, 0.0 ); // Le troisième point (1,1,0)
glEnd(); // Termine le tracé de triangles (OBLIGATOIRE !)
Exécutez maintenant le programme en tapant ''./run
-t 1'' (pour obtenir la liste des paramêtres utilisables, tapez ''./run
-h'').
Ouvrez les fichiers dessiner.h et dessiner.cpp.
Ces fichiers définissent les procédures (au départ incomplètes) qui
sont utilisées pour le rendu de maillages. La première procédure dessinerMaillageMat
est écrite pour permette de dessiner un maillage simple (de type ''matricielle''
comme mRosen).
Exécutez maintenant le programme en tapant ''./run
-t 2''.
Lorsque l'on a un maillage représentant une suite de triangles collés
les uns aux autres, il est possible de les dessiner par bande. La
commande openGL ''glBegin(GL_TRIANGLE_STRIP)''
permet de dessiner une suite de triangle en minimisant le nombre de
vertex envoyés. Il va dessiner triangles après triangles
en se basant sur paquets des 3 derniers vertex :
glVertex3f( 0.0, 0.0, 0.0 ); // Le premier point (0,0,0)
glVertex3f( 1.0, 0.0, 0.0 ); // Le deuxième point (1,0,0)
glVertex3f( 0.0, 1.0, 0.0 ); // Le troisième point (0,1,0) => le triangle (0,0,0),(1,0,0),(0,1,0) est dessiné
glVertex3f( 1.0, 1.0, 0.0 ); // Le quatrième point (1,1,0) => le triangle (1,0,0),(0,1,0),(1,1,0) est dessiné
glEnd(); // Termine le tracé de triangles (OBLIGATOIRE !)
Maintenant que vous savez visualiser un maillage simple, nous allons
régler ce problème de coloriage des triangles. L'aspect visuel de
la surface est très moyen car par défaut, openGL va effectuer le remplissage
d'un triangle par une seule et unique couleur, ce type de remplissage
est noté par ''GL_FLAT''. Si l'on veut utiliser
le modèle de Gouraud, il suffit d'appeler la procédure openGL ''glShadeModel(GL_SMOOTH)''.
La procédure dessinerMaillageMatGouraud est appelée
en tapant ''./run -t 3''.
Nous allons maintenant manipuler des maillages indexés. Reportez vous à la seconde partie du fichier Maillage.h pour la définition du nouveau type MaillageIndexe.
Vous pouvez voir un exemple de l'utilisation d'une telle structure de données dans la procédure initTetra qui remplit le maillage mTetra.
Dans la procédure main, décommentez le bout de code marqué ECLAIRAGE. Ceci active la fonctionnalité d'éclairage en openGL.
Maintenant qu'un lumière est présente (éclairant du haut vers le bas, dans la direction des Z négatifs), openGL applique un modèle d'illumination plus complet comportant de la diffusion et de la spécularité. Comme il a était vu en cours, de tels modèles sont principalement basés sur la connaissance d'un la normale de la surface. OpenGL utilise un modèle simplifié d'illumination où la normale est uniquement définie en chaque vertex. L'illumination (ie. la couleur) est calculée en chaque vertex et est ensuite interpolée pour le remplissage du triangle (comme vu précédemment).
Il est donc maintenant nécessaire de disposer d'une normale (unique !) en chaque vertex du maillage.
glColor3f( 1.0, 0.0, 0.0 );
glNormal3f( 0.5, 0.0, 0.5 ); // Le vecteur normal associé au vertex est (0.5,0,0.5)
glVertex3f( 0.0, 0.0, 0.0 ); // Le premier point (0,0,0)
[...]
glEnd()
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -show_section_numbers TP2.tex
The translation was initiated by Mathieu Coquerelle on 2005-10-07