Bonjour,
Je suis en Master 1 et je travaille actuellement sur un TP, je poste ce message car je suis confronté à un problème avec les Display List, j'ai voulu implémenter ce principe dans mon programme OpenGL car l'affichage saccadait mais maintenant rien ne s'affiche, j'explique :
J'ai une classe Polygone (en 2D) avec une méthode colorer(...), dans cette méthode, il y a des calculs d'arêtes actives et d'intersections, en fait c'est un coloriage "à la main" (c'est le but du TP) et donc à la fin, on trouve les glBegin(); glVertex*(), glEnd()...
Dans mon fichier tp03.cpp (où il a le main()), j'ai déclaré :
J'ai une fonction initGL() appelée juste avant le glutMainLoop() dans le main() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part GLuint listId = 0; // id of display list
Et voici le détail de la fonction createPolygonesDL() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void initGL(void) { glClearColor(bg_color[0], bg_color[1], bg_color[2], bg_color[3]); listId = createPolygonesDL(); }
Enfin, voici mon callback display :
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
20
21
22
23
24
25
26
27 GLuint createPolygonesDL() { GLuint id = 0; id = glGenLists(1); if(!id) return id; // failed to create a list, return 0 /* remplissage de notre liste */ glNewList(id, GL_COMPILE); /* start */ for (int i=0; i<lPoly.size(); i++) { if (Coloration) lPoly[i].colorer(poly_color); if (AffichageCoords) lPoly[i].afficherCoords(wHeight); glColor3f(0.0, 0.0, 1.0); lPoly[i].tracerAretes(ModeAffichage); lPoly[i].tracerSommets(); lPoly[i].tracerTrous(ModeAffichage); } glEndList(); /* stop */ return id; }
Donc le "poly" s'affiche correctement (il s'agit du polygone en cours de construction, en appuyant sur 'a', il est ajouté à la liste de Polygone lPoly. Mais les polygones contenus dans la liste ne s'affichent pas.
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 void affichage (void) { glClear(GL_COLOR_BUFFER_BIT); if (!lPoly.empty()) { glPushMatrix(); glCallList(listId); glPopMatrix(); } glColor3f(0.0, 1.0, 1.0); poly.tracerAretes(ModeAffichage); poly.tracerSommets(); glutSwapBuffers(); }
Je vous remercie de vos futures réponses
Partager