Fragmentation glutess ...

jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007 - 2 nov. 2006 à 13:32
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007 - 5 nov. 2006 à 15:23
  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

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 15:51
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
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
2 nov. 2006 à 16:39
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!
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 17:12
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
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
2 nov. 2006 à 17:16
ca marche, j essaie ca

merci pour ton aide

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 17:20
heu mais pourquoi tu fais pas un for avec
gluTessVertex(tobj, v1, v1);

comme sur le site ?

_______________________

Omnia vincit labor improbus
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
2 nov. 2006 à 17:21
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?
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
2 nov. 2006 à 19:57
Si je fais une boucle ca plante! :(
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
3 nov. 2006 à 15:41
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!
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
4 nov. 2006 à 10:25
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.
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
5 nov. 2006 à 15:23
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
Rejoignez-nous