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 :
  1. é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.
  2. é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.
  3. é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.
  4. é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 :

  1. 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.
  2. créer, positionner et activer la ou les sources de lumières
  3. 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.
  4. 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 ...)