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 :
Voila comment j'initialise :
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);
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
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);
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).
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.
J'ai raté quelque chose ?
J'ai mal défini quelque chose ?
Merci de votre aide ...
![]()
Partager