Fragmentation glutess ...

Signaler
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007
-
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007
-
  Bonjour,


j'essaie de fragmenter des polygones, je commence par refaire un code ecrit dans un bouquin, et ca ne marche pas!


voici le code suivit des erreurs:


void CALLBACK beginCallback(GLenum which)

{

   glBegin(which);

}


void CALLBACK errorCallback(GLenum errorCode)

{

   const GLubyte *estring;


   estring = gluErrorString(errorCode);

   fprintf(stderr, "Tessellation Error: %s\n", estring);

   exit(0);

}


void CALLBACK endCallback(void)

{

   glEnd();

}


GLUtesselator *tobj;

   GLdouble rect[4][3] = {50.0, 50.0, 0.0,

                         
200.0, 50.0, 0.0,

                         
200.0, 200.0, 0.0,

                         
50.0, 200.0, 0.0};

   GLdouble tri[3][3] = {75.0, 75.0, 0.0,

                        
125.0, 175.0, 0.0,

                        
175.0, 75.0, 0.0};

   GLdouble star[5][6] = {250.0, 50.0, 0.0, 1.0, 0.0, 1.0,

                         
325.0, 200.0, 0.0, 1.0, 1.0, 0.0,

                         
400.0, 50.0, 0.0, 0.0, 1.0, 1.0,

                         
250.0, 150.0, 0.0, 1.0, 0.0, 0.0,

                         
400.0, 150.0, 0.0, 0.0, 1.0, 0.0};


   glClearColor(0.0, 0.0, 0.0, 0.0);


   startList = glGenLists(2);


   tobj = gluNewTess();

   gluTessCallback(tobj, GLU_TESS_VERTEX,

                   glVertex3dv);

   gluTessCallback(tobj, GLU_TESS_BEGIN,

                   beginCallback);

   gluTessCallback(tobj, GLU_TESS_END,

                   endCallback);

   gluTessCallback(tobj, GLU_TESS_ERROR,

                   errorCallback);


   /*  rectangle with triangular hole inside  */

   glNewList(startList, GL_COMPILE);

   glShadeModel(GL_FLAT);   

   gluTessBeginPolygon(tobj, NULL);

      gluTessBeginContour(tobj);

         gluTessVertex(tobj, rect[0], rect[0]);

         gluTessVertex(tobj, rect[1], rect[1]);

         gluTessVertex(tobj, rect[2], rect[2]);

         gluTessVertex(tobj, rect[3], rect[3]);

      gluTessEndContour(tobj);

      gluTessBeginContour(tobj);

         gluTessVertex(tobj, tri[0], tri[0]);

         gluTessVertex(tobj, tri[1], tri[1]);

         gluTessVertex(tobj, tri[2], tri[2]);

      gluTessEndContour(tobj);

   gluTessEndPolygon(tobj);

   glEndList();

   gluDeleteTess(tobj);


Erreur :

:\vc6\3d_visu\display.cpp(129) : error C2664: 'gluTessCallback' :
cannot convert parameter 3 from 'void (const double *)' to 'void
(__stdcall *)(void)'

        None of the functions with this name in scope match the target type

d:\vc6\3d_visu\display.cpp(131) : error C2664: 'gluTessCallback' :
cannot convert parameter 3 from 'void (unsigned int)' to 'void
(__stdcall *)(void)'

        None of the functions with this name in scope match the target type

d:\vc6\3d_visu\display.cpp(135) : error C2664: 'gluTessCallback' :
cannot convert parameter 3 from 'void (unsigned int)' to 'void
(__stdcall *)(void)'

        None of the functions with this name in scope match the target type


Par la suite j aimerai dessiner mes polygones qui sont dans un
vertexPointer car j'ai un tableau avec toutes mes coordonnées du style

{x1,y1,z1,x2,y2,z2,x3,y3,z3,...), comment j'integre ca dans la fragmentation?


Merci beaucoup!

10 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ohlàlà c'est quoi ces callbacks dans tous les sens ? c'est laid ... enfin bon c'est pas ta faute ^^

error C2664: 'gluTessCallback' : cannot convert parameter 3 from 'void (const double *)' to 'void (__stdcall *)(void)'

L'erreur vient de là:
void CALLBACK beginCallback(GLenum which)

gluTessCallback demande une fonction ne prenant pas de paramètre, ne reournant aucune valeur, écrite en convention standard C++.
Tu lui files la même chose sauf que la tienne prend une valeur en param.

void __stdcall beginCallback(void)
{
   glBegin(GL_POLYGON);
}

_______________________

Omnia vincit labor improbus
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

Merci pour ton aide,

J'ai fait comme tu as dis, j'ai aussi mis un void pour le callback de l erreur,

mais il me reste l erreur pour le

gluTessCallback(tobj, GLU_TESS_VERTEX, glVertex3dv);


Comment je fais pour celui la?


Dois je declarer une fonction du genre de

void CALLBACK glVertex3dv(void)
{
    glVertexPointer(3,GL_FLOAT,0,LLayer[i].quad[loop_q].bottom);

}

et apres pour dessiner je fait:


glNewList(startList, GL_COMPILE);

   glShadeModel(GL_FLAT);  

   gluTessBeginPolygon(tobj, NULL);

      gluTessBeginContour(tobj);

       

          for(int e=0; e<LLayer[i].quad[loop_q].num_pts;e++)

             gluTessVertex(tobj,
glArrayElement(e)
, glArrayElement(e);


      gluTessEndContour(tobj);

   gluTessEndPolygon(tobj);

   glEndList();

   gluDeleteTess(tobj);

Ce que je viens d ecrire ne marche deja pas parcque je
sais pas comment envoyer dans mon callback du glvertex3dv min i et mon
loop_q vu que ca ne prend rien comme parametre!
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
erm... je vais voir ça, en attendant tu peux toujours les mettre en global ( avant le main ). c'est moche mais ça marchera, ça te permetrra de continuer

_______________________

Omnia vincit labor improbus
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

ca marche, j essaie ca

merci pour ton aide
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
heu mais pourquoi tu fais pas un for avec
gluTessVertex(tobj, v1, v1);

comme sur le site ?

_______________________

Omnia vincit labor improbus
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

Alors maintenant ma seule erreur est :


d:\vc6\3d_visu\display.cpp(159) : error C2664: 'gluTessVertex' : cannot convert parameter 2 from 'void' to 'double []'


avec cette ligne : gluTessVertex(tobj, glArrayElement(e), glArrayElement(e));


car je déclare un VertexPointer avec mon tableau de coordonné LLayer[i].quad[loop_q].bottom qui est rempli de la sorte:

{x1,y1,z1,x2,y2,z2,x3,y3,z3, ...}!

Comment remedier a ce probleme?
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

Si je fais une boucle ca plante! :(
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

quelqu'un peut m'aider! meme l'exemple simple d'un bouquin ne marche pas!!! pourquoi?

Quelles sont toutes les etapes pour pouvoir dessiner mon polygone concave par GLU?

Les exemples que je trouve sur internet sont les meme que mon bouquin et donc me font les erreurs cité précédement!


Merci pour votre aide!
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Je pense que ton problème vient des headers OpenGL fournis avec VC++ 6.0, qui ne doivent pas être bon. Essaie de compiler sous CodeBlocks, et dit nous si ça fait les mêmes erreurs.
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

oui, meme probleme!

Y a pas un tot bien clair sur comment utiliser ces fonctions? Ce qu'il ne faut pas oublier de faire, ...etc

En plus ma boucle for() dans mes precedent message fait tout planter!


bref! Ou alors quelqu'un maitrise t il cette methode et pourrai m expliquer la marche a suivre?

Merci beaucoup