| Université Montpellier II Mountaz Hascoët |
Module Visualisation | Master Informatique |
glNormalfvglNormalfv, mais les coordonnées
ne sont pas correctes -> afficher les avec le reste de votre volume
pour les vérifier. Alternativement, vous pouvez aussi remplacer votre
objet par affichage d'un objet prédéfini comme le cube ou la sphere
pour lesquels les normales sont correctes (cf glutSolidCube
/ glutSolidSphere.)gluLookAt,
glRotate, glTranslate, etc...)glMaterialfv(mode,couleur) à la place
de glColor3f(couleur), c'est alors glMaterialfv qui déterminera la couleur de votre objet. Attention, le paramètre
mode explicite la composante de la lumière émise qui prendra la
couleur du paramètre color. Pour un vertex donné, on peut mettre
un niveau de gris pour la composante ambiante, une couleur franche
en diffuse et un mélange en spéculaire par exemple. glColorMaterial(face,mode), vous
pouvez continuer de spécifier les couleurs par glColor*.
En d'autres termes, un appel à glColorMaterial(GL_FRONT,
GL_DIFFUSE) par exemple aura pour effet de donner un sens particulier à tous
les prochains appels de glColor*: la couleur spécifiée par glColor ne concernera plus que la composante diffuse des faces avant. Attention à deux choses: (1) pour que
les appels à glColorMaterial soient suivi d'effet,
il faut avoir activé ce mode par un appel à glEnable(GL_COLOR_MATERIAL)et (2) l'instruction vaut seulement pour la composante
stipulée dans mode et portera sur tous les sommets définis après
sauf à faire un appel à disable(GL_COLOR_MATERIAL). Les autres composantes seront aux valeurs par défautglColor* pour définir les couleurs
de vos objets et que tout est gris mais l'impression de lumière existe:
vous devez utiliser les paramètres des matériaux pour
changer la couleur (et éventuellement abandonner vos appels
à glColor*). glEnable(GL_CULL_FACE) GLUT_DEPTH
dans la liste des paramètres de glutInitDisplayMode
comme par exemple comme cela: glutInitDisplayMode(GLUT_RGB |
GLUT_DEPTH | GLUT_DOUBLE);glClearDepth(1.0);
glClear(GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE))
pour l'élimination des faces arrières, du coup vous n'avez plus de faces
arrières et la transparence est calculée comme un mélange avec le fond.
Cela peut donner des résultats divers, parfois même passer inaperçu en
fonction de l'objet transparent et de son fond. Parfois même donner l'effet
souhaité... Mais sauf à savoir vraiment ce que l'on fait, en règle générale,
on n'utilisera pas le culling lorsque l'on veut faire de la transparence
(NB: il peut être activé sur d'autres régions de la scène et on le désactive
lors du dessins des facettes intéressantes en faisant glDisable(GL_CULL_FACE)) glDepthMask(GL_FALSE)
-> read-only, glDepthMask(GL_TRUE)->mode normal.Il y a plusieurs manières possible une ligne, une première solution est
dans le programme d'exemple pickSquare.c
extrait des exemples SGI.
Quelques explications supplémentaires ne sont pas de trop. Elles
se trouvent ici:
Une alternative plus légère est aussi possible avec l'utilisation
des fonctions gluProject ou gluUnProject.