L = La + kd cos q + ks cos n a
Le terme n dans l'expression de la réflexion spéculaire est appelé "coefficient de surbrillance". C'est lui
qui va déterminer l'étendue du reflet (saturation sur une portion de surface) que l'on peut observer sur une
surface brillante lorsque certains rayons réfléchis se rapprochent de l'axe d'observation (a proche de 0).
Cette valeur caractérise les propriétés physiques de la surface éclairée. Un miroir parfait sera caractérisé
par une valeur de n égal à l'infini : l'observateur n'est ébloui que si le rayon réfléchi coïncide avec l'axe
d'observation.
b) Eclairage sous OpenGL
On peut mettre en place jusqu'à 8 lumières (GL_LIGHT0, ..., GL_LIGHT7) dont on peut spécifier de
nombreux attributs par :
glLightfv(GL_LIGHT0, attribut, vecteur de float)
la position : GL_POSITION . Sous OpenGL, une lumière est assimilée à un objet de la scène et subit les
transformations géométriques définit pour GL_MODELVIEW. On peut donc la rendre fixe, la lier
éventuellement à un objet, à la scène ou au point de vue : tout dépend de l’instant où on positionne cette
lumière.
GLfloat Lposition1 [4] = {-5.0, 0.0, 3.0, 0.0}; /* lumière a l’infini */
GLfloat Lposition2 [4] = {-5.0, 0.0, 3.0, 1.0}; /* position réelle */
glLightfv (GL_LIGHT0, GL_POSITION, Lposition1);
On notera dans cet exemple qu’une lumière peut être positionnée à l’infini (rayons parallèles) en mettant
sa 4ème coordonnée à 0 (cf. les espaces projectifs). Les trois premières coordonnées définissent alors une
direction et non plus une position.
la couleur : GL_AMBIENT , GL_DIFFUSE et GL_SPECULAR . On donne séparément les composantes
ambiante, diffuse et spéculaire, ce qui permet de faire des choses peu physiques, comme des sources qui
ne génèrent pas de reflets, ou que des reflets, ou qui ne contrôlent que la lumière ambiante. Chaque
composante est un tableau de float définissant les 4 coefficients de base RVBA.
GLfloat Lambiant [4] = {0.4, 0.4, 0.4, 1.0};
GLfloat Lblanche [4] = {1.0, 1.0, 1.0, 1.0};
glLightfv (GL_LIGHT0, GL_AMBIENT, Lambiant);
glLightfv (GL_LIGHT0, GL_DIFFUSE, Lblanche);
glLightfv (GL_LIGHT0, GL_ SPECULAR, Lblanche);