MIM Images
année 2003-2004
http://www710.univ-lyon1.fr/~jciehl/
TD5 - Couleurs, Lumières et matières
L'objectif de ce TD est d'améliorer la qualité
de la visualisation de surfaces développée lors des TD précédents.
En effet, utiliser une couleur uniforme pour dessiner les carreaux de la
surface n'est pas une solution très lisible. Pour faire mieux, il
va falloir éclairer la surface et définir une matière
associée. De cette manière, la couleur des éléments
de la surface changera en fonction de leur orientation.
Partie 1. Le modèle d'éclairement d'openGL
openGL utilise un modèle d'éclairement simplifié
(cf. cours sur l'éclairement global physiquement réaliste/plausible)
représentant l'énergie et les propriétés des
matières sur 3 canaux : le rouge, le vert et le bleu. Les sources
de lumière sont représentées par une position (un point)
et une description de l'énergie émise dans la scène.
Les propriétés des matières sont également décrites
sur les trois canaux. Le modèle d"éclairement local disponible
dans openGL considère que l'énérgie réfléchie
par les matières des objets est constitué d'un mélange
de plusieurs composantes idéales :
- énergie ambiante : lorsque la lumière interagit avec
un grand nombre d'objets et de matières, openGL consière qu'elle
n'a plus de direction de propagation observable et que l'on peut représenter
son effet sur l'aspect des objets par une constante. Cette énergie
est diffusée dans toutes les directions de la même manière.
- énergie diffusée : lorsque la lumière provient
d'une direction particulière, son effet sur l'aspect des objets diminue
lorsque l'angle d'incidence augmente. Par exemple, la portion de sol directement
sous un plafonnier est plus éclairée qu'une dalle placée
à l'autre extrémité de la pièce. C'est l'angle
entre la normale du sol et la direction vers la source de lumière
qui détermine l'effet observable. Cette énergie est diffusée
dans toutes les directions de la même manière.
- énergie spéculaire : lorsque la lumière provient
d'une direction particulière, elle se réfléchit principalement
vers une direction privilégiée, généralement
symétrique par rapport à la normale de l'objet. Par exemple,
un miroir réfléchit presque toute la lumière incidente
dans une seule direction.
- énergie emise : certaines matières émettent de
l'énergie, les sources de lumières notamment.
Les composants ambiant, diffus et spéculaire
des sources de lumières sont différents selon la contribution
de la source à l'éclairement de la scène. Par exemple,
une source de lumière blanche dans une pièce avec des mûrs
rouges aura une composante ambiante rouge et une composante diffuse blanche.
De la même manière, les propriétés
des matières constituant les objets sont décrit par la quantité
d'énergie réfléchie pour chaque composante idéale
et chaque canal (rouge vert et bleu). Ces valeurs sont comprises entre 0
et 1.
openGL permet de décrire plusieurs sources de
lumière et de les activer séparement les unes des autres.
Q1. expérimentez l'effet de chaque composante
avec les openGL tutors de N. Robins (cf.
TD 2).
Partie 2. Spécifier les propriétés des matières
et des sources de lumière
Il y a plusieurs éléments à spécifier
pour utiliser le modèle d'éclairement de openGL :
- la normale de chaque sommet des polygones à dessiner. Ces normales
permettent de déterminer l'orientation d'un élément
de surface par rapport à la source de lumière et de calculer
la lumière réfléchie vers l'observateur.
- créer, positionner et activer la ou les sources de lumières
- créer et activer un modèle d'éclairement. L'énergie
ambiante globale (en plus de celle associée aux sources de lumière)
doit également être décrite. Plus important la position,
de l'observateur ou de la camera doit être spécifiée.
- spécifier des matières et les associer aux primitives
à dessiner.
Le plus simple est sans doute de parcourir cet
exemple du manuel de programmation pour vous faire une idée des
fonctions à appeler.
Voici les fonctions les plus importantes :
glNormal3f(v_norm) : définit la normale
du prochain sommet (à utiliser entre glBegin(..); ...; glEnd())
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular)
: définit la composante spéculaire d'une matière (à
utiliser entre glBegin(..); ...; glEnd())
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess)
: définit la composante "brillance" d'une matière (à
utiliser entre glBegin(..); ...; glEnd())
glLightfv(GL_LIGHT0, GL_POSITION, light_position) :
définit la position de la source de lumière 0
glEnable(GL_LIGHTING) : active le calcul d'éclairement
glEnable(GL_LIGHT0) : active la source de lumière
0
glShadeModel(GL_SMOOTH) : spécifie le modèle
d'éclairement
Q1. modifiez votre TD 4 et éclairez votre surface
(ou modifiez la correction du TD 2).
Reportez vous au man pour connaître les valeurs
possibles des différents paramètres (GL_SPECULAR, GL_AMBIENT,
GL_POSITION ...)