J'essais de me remettre à OpenGL.
Actuellement, j'arrive à afficher des objets sans problème, utiliser des translations et des rotations pour placer mes objets, et me déplacer autour.
Le problème, c'est la lumière : pas moyen de la faire fonctionner.

Voici ce que j'utilise comme valeur pour la matière et la lumière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
   Matiere_Ambiente: array[0..3] of GLfloat = (0.4, 0.4, 0.0, 1.0);
   Matiere_Diffuse: array[0..3] of GLfloat = (0.4, 0.4, 0.0, 1.0);
   Matiere_Speculaire: array[0..3] of GLfloat = (1.0, 1.0, 1.0, 1.0);
 
   Lumiere_Ambiente: array[0..3] of GLfloat = (0.4, 0.4, 0.0, 1.0);
   Lumiere_Diffuse: array[0..3] of GLfloat = (0.5, 0.3, 0.0, 1.0);
   Lumiere_Speculaire: array[0..3] of GLfloat = (0.7, 0.7, 0.0, 1.0);
   Lumiere_Position: array[0..3] of GLfloat = (0.0, 0.0, 1.0, 0.0);
   Lumiere_Direction: array[0..2] of GLfloat = (0.0, 0.0, -1.0);
Voila comment j'initialise :
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
19
   glMaterialfv(GL_FRONT, GL_AMBIENT, @Matiere_Ambiente);
   glMaterialfv(GL_FRONT, GL_DIFFUSE, @Matiere_Diffuse);
   glMaterialfv(GL_FRONT, GL_SPECULAR, @Matiere_Speculaire);
   glMaterialf(GL_FRONT, GL_SHININESS, 20);
 
   glLightfv(GL_LIGHT0, GL_AMBIENT, @Lumiere_Ambiente);
   glLightfv(GL_LIGHT0, GL_DIFFUSE, @Lumiere_Diffuse);
   glLightfv(GL_LIGHT0, GL_SPECULAR, @Lumiere_Speculaire);
   glLightfv(GL_LIGHT0, GL_POSITION, @Lumiere_Position);
   glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, @Lumiere_Direction);
 
   //.Activation de l'éclairage.
   glEnable(GL_LIGHTING);
 
   //.Activation de la première lumière.
   glEnable(GL_LIGHT0);
 
   //.Activation du buffer de profondeur.
   glEnable(GL_DEPTH_TEST);
Un exemple de définition d'un objet :
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
   glPushMatrix;
      glEnable(GL_LINE_SMOOTH);
 
      glBegin(GL_QUADS);
         //.Haut.
         glNormal3f(0, 1, 0);
         glVertex3d((dLargeur / 2), (dHauteur / 2), -(dEpaisseur / 2));   glVertex3d(-(dLargeur / 2), (dHauteur / 2), -(dEpaisseur / 2));
         glVertex3d(-(dLargeur / 2), (dHauteur / 2), (dEpaisseur / 2));   glVertex3d((dLargeur / 2), (dHauteur / 2), (dEpaisseur / 2));
 
...
 
      glEnd;
 
      glEnable(GL_NORMALIZE);
   glPopMatrix;      //.Reprend la matrice de la pile.
Résultat, je vois bien mes objets, mais comme ils sont de même couleur, je n'ai aucun effet de 3D, vu qu'il n'y a pas de lumière (donc pas d'ombre).
J'ai raté quelque chose ?
J'ai mal défini quelque chose ?

Merci de votre aide ...