Illumination
Copiez le programme
main.C
. Pour le compiler à l'aide du
Makefile
, il vous faut aussi
traqueboule.h
et
matrix.h
. Exécutez-le. La scène représente un maillage polygonal de la fonction de Rosenbrock sur l'intervalle
.
question 1
Où dans le programme les normales sont-elles calculées ?
question 2
En décommentant la ligne glEnable(GL_NORMALIZE) le résultat est beaucoup plus intéressant. Pourquoi ?
question 3 En commentant les valeurs
intitiales, modifiez les diverses couleurs pour obtenir différents
effets (lumière émissive, ambiante, réflection diffuse et spéculaire,
largeur des reflets...). Pas de compte-rendu pour cette question.
Il y a trois sources de lumière dans la scène:
- un éclairage ambiant, très faible
- un éclairage provenant de la caméra, qu'on peut (des)activer en appuyant sur '0', initialement allumé
- un éclairage provenant d'une source qu'on peut faire tourner autour
de l'objet au moyen des flèches du clavier, et (des)activer au moyen de
la touche '1', initialement éteint
question 4 Identifiez dans le programme où ces
différentes sources sont définies et utilisées. Vous pouvez utiliser
les numéros de lignes du programme original.
question 5
On visualise mal l'emplacement de la source mobile. Faites-la apparaître sous forme d'un cube blanc en fil de fer (glutWireCube(0.1)).
question 6
Le cube n'est pas vraiment blanc, car on est en mode GL_LIGHTING et il subit donc l'éclairage. À l'aide des instructions glPushAttrib(GL_LIGHTING_BIT), glDisable( GL_LIGHTING ) et glPopAttrib(), désactivez temporairement l'éclairage au moment d'afficher le cube.
question 7 Les reflets causés par la lumière
mobile sont jaunâtres. Que faire pour en obtenir de franchements verts
, tout en gardant la surface rouge hors des reflets?
Francois Faure
2003-02-10