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é :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
GLuint listId = 0; // id of display list
J'ai une fonction initGL() appelée juste avant le glutMainLoop() dans le main() :
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();
}
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
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;
}
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
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();
}
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.

Je vous remercie de vos futures réponses