Précédent   Forum des professionnels en informatique > Applications > Développement 2D, 3D et Jeux > API graphiques > OpenGL
OpenGL Forum d'entraide sur le développement en OpenGL. Avant de poster -> FAQ OpenGL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2012, 16h36   #1
Invité de passage
 
Inscription : septembre 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 9
Points : 0
Points : 0
Par défaut Plaquage de texture sur une surface concave

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 :
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 :
1
2
3
4
5
6
// Trou rempart
  glPushMatrix();
    glTranslatef(5, -1, 1);
glEnable(GL_TEXTURE_2D);
    TrouRempart(IdTex[0]);
glPopMatrix();
Hekinox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h24   #2
Membre à l'essai
 
Inscription : septembre 2009
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 61
Points : 23
Points : 23
Ben de ce que je vois, tu crées tes positions pour tes surfaces carrées ainsi que les coordonnées de textures qui vont avec, mais pas pour ton arc ?

Si tu arrives a générer l'arc, tu ne devrais avoir aucun problème à générer les coordonnées qui vont avec. Il faut juste que tu limites leurs valeurs entre 0.0 et 1.0.

Par ex, tu prends la valeur XY d'un des points de l'arc, et tu fais une règle de trois pour trouver le UV correspondant.
le_ptit_lutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 18h56   #3
Invité de passage
 
Inscription : septembre 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 9
Points : 0
Points : 0
Merci pour ta réponse j'ai essayé et ça ne marchait toujours pas. Alors j'ai finalement décidé de faire mon demi cercle à partir de triangles du coup plus de problème de figure concave .
Hekinox est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h11.


 
 
 
 
Partenaires

Hébergement Web