Placage de texture (2/2) Par Xavier Michelon |
Léclairage des textures se fait de la même manière que pour les objets non texturés, nous y avons déjà consacré un didacticiel. La seule différence est que lutilisation de textures a pour effet datténuer fortement léclairage spéculaire (les tâches lumineuses donnant un aspect brillant aux objets). Pour remédier à ce problème, OpenGL permet de séparer le calcul de léclairage spéculaire grâce à lappel suivant :
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR);
Pour désactiver cette fonctionnalité, remplacez GL_SEPARATE_SPECULAR_COLOR par GL_SINGLE_COLOR. Dans le programme exemple, la touche s permet de basculer entre ces deux modes de calcul de léclairage.
Brouillard
Il est relativement facile de créer un effet de brouillard avec OpenGL. En effet, le rendu utilise la notion de profondeur (distance dun objet à lobservateur) pour le rendu. En mixant la couleur dun objet avec une couleur du brouillard en fonction de la distance (plus lobjet est éloigné, plus la couleur de fond est prépondérante), on crée un joli brouillard.
Lactivation et la désactivation du brouillard se fait respectivement avec glEnable(GL_FOG) et glDisable(GL_FOG). La modification des paramètres du brouillard se fait avec la fonction
glFogf(GLenum nomparam,Glfloat valeur)
paramètre est le nom du paramètre à modifier, et valeur est évidemment la nouvelle valeur du paramètre. Il existe plusieurs modes de brouillard, correspondant à différentes fonctions de mélange de la couleur de lobjet et de la couleur du brouillard. Je ne vais pas détailler tous les modes aujourdhui (vous trouverez tout ça dans le livre [1]), je vous livre simplement les paramètres utilisés pour le programme exemple. Il sagit dun brouillard de type exponentiel :
glFogi(GL_FOG_MODE,GL_EXP); /* Réglage du type de brouillard */
glFogfv(GL_FOG_COLOR,couleurAP); /* Couleur du brouillard, généralement la identique à la couleur de fond définie avec glClearColor()*/
glFogf(GL_FOG_START,0); /* distance de début du brouillard (relativement à lobservateur) */
glFogf(GL_FOG_END,15); /* distance de fin du brouillard */
glFogf(GL_FOG_DENSITY,0.35); /* Densité du brouillard */
|