Bonjour à tous,

Je réalise un projet graphique grâce à Opengl. Je suis actuellement au stade du mapping, pour tout ce qui est figure convexe j'y arrive sans problème mais les figure concave c'est vraiment autre chose ...

J'ai créé une figure concave (un carré avec un demi cercle en moins) avec la tesselation et là j'essaye de plaquer ma texture (voir le code) mais je n'obtient qu'un fond gris.





Voici ma fonction

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
28
29
30
31
32
33
34
35
36
GLvoid TrouRempart (GLint TextureId)
 
{
 
GLUtesselator      *tess;
tess = gluNewTess();
gluTessCallback(tess, GLU_BEGIN, glBegin);
gluTessCallback(tess, GLU_END, glEnd);
gluTessCallback(tess, GLU_VERTEX, glVertex3dv);
 
  int i;
  float mycos, mysin;
  static GLdouble demi_cercle[51][3];
  for (i=0; i<51 ; i++)
    {
      demi_cercle[i][0] = 1 + cos(i*2* M_PI /100);
      demi_cercle[i][1] =  sin(i*2* M_PI /100);
      demi_cercle[i][2]= 0;
    }
 
  static GLdouble carre_avant[][3] = {{0, 0,  0}, {2, 0,  0}, {2, 2,  0}, {0, 2, 0}};
  static GLdouble carre_haut[][3] = {{0, 2,  0}, {2, 2,  0}, {2, 2,  -2}, {0, 2,  -2} };
  static GLdouble carre_texture[][2] = {{0, 1}, {0, 0}, {1, 0}, {1, 1} };
 
glBindTexture(GL_TEXTURE_2D, TextureId);
gluTessBeginPolygon(tess,(GLvoid *)0);
	   gluTessBeginContour(tess);
     	 	for (i = 0; i < 4 ; i++)
       	   gluTessVertex(tess,carre_avant[i],carre_avant[i]);  glTexCoord2f(carre_texture[i][0], carre_texture[i][1]);
    	 gluTessEndContour(tess); 
 
     	 gluTessBeginContour(tess);
      		for (i = 0; i < 51 ; i++)
       	   gluTessVertex(tess,demi_cercle[i],demi_cercle[i] );
      gluTessEndContour(tess); 
gluTessEndPolygon(tess);

L'appelle de ma fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
// Trou rempart
  glPushMatrix();
    glTranslatef(5, -1, 1);
glEnable(GL_TEXTURE_2D);
    TrouRempart(IdTex[0]);
glPopMatrix();