Bonjour,
quelle est la façon la plus simple de créer une lumière ambiante d'une couleur donnée ?
Est-il nécessaire d'en définir la position ?
En effet ce code produit un résultat étrange :
l'initialisation :
le rendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, {0.0f, 1.0f, 0.0f, 1.0f});
Tout se passe comme si il y avait une lumière ambiante blanche et deux lumière vertes directionnelles placées sur l'axe X comme l'illustrent les miniatures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); glRotated(angle, 0, 1, 0); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glBegin(GL_QUADS); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, {1.0f, 1.0f, 1.0f, 1.0f}); glVertex3d(-1, 1, 0); glVertex3d(-1, -1, 0); glVertex3d(1, -1, 0); glVertex3d(1, 1, 0); glEnd();
- la 1ère : état initial,
- la 2ème : après rotation à gauche,
- la 3ème : après rotation à droite.
En revanche si dans l'initialisation la lumière "LIGHT0" est positionnée n'importe où l'effet de lumière ambiante est bon :
le nouveau code d'initialisation :
Le résultat à est la 4ème miniature; de plus la couleur reste bien la même après rotation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, {0.0f, 1.0f, 0.0f, 1.0f}); glLightfv(GL_LIGHT0, GL_POSITION, {0, 0, 0, 0});
Auriez vous des explications sur ce phénomène ?
Quelle est la bonne façon de définir une lumière ambiante ?
Merci.
Partager