Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1525 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ OpenGL] probleme avec les callback du glutess

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ OpenGL] probleme avec les callback du glutess

n°1471759
jojomillen​ium
Posté le 07-11-2006 à 17:30:34  profilanswer
 

Bonjour,
 
Ca fait plus d une semaine que je cherche l origine de l erreur et je ne trouve pas! Peut etre saurez vous d ou cela provient!
 
J'essaie betement de compiler une source fourni ans un bouquin (qui est la meme que sur le site de opengl tess.c) les erreurs sont a la suite du code:
 
 
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include <stdio.h>
 
#ifndef CALLBACK  
#define CALLBACK
#endif
 
GLuint startList;
 
void display (void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glCallList(startList);
glCallList(startList + 1);
glFlush();
}
 
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();
}
 
void CALLBACK vertexCallback(GLvoid *vertex)
{
const GLdouble *pointer;
 
pointer = (GLdouble *) vertex;
glColor3dv(pointer+3);
glVertex3dv(vertex);
}
 
/* combineCallback is used to create a new vertex when edges
* intersect. coordinate location is trivial to calculate,
* but weight[4] may be used to average color, normal, or texture
* coordinate data. In this program, color is weighted.
*/
void CALLBACK combineCallback(GLdouble coords[3],  
GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut )
{
GLdouble *vertex;
int i;
 
vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
 
vertex[0] = coords[0];
vertex[1] = coords[1];
vertex[2] = coords[2];
for (i = 3; i < 7; i++)
vertex[i] = weight[0] * vertex_data[0][i]  
+ weight[1] * vertex_data[1][i]
+ weight[2] * vertex_data[2][i]  
+ weight[3] * vertex_data[3][i];
*dataOut = vertex;
}
 
void init (void)  
{
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();
 
gluTessCallback(tobj, GLU_TESS_VERTEX,  
vertexCallback);
gluTessCallback(tobj, GLU_TESS_BEGIN,  
beginCallback);
gluTessCallback(tobj, GLU_TESS_END,  
endCallback);
gluTessCallback(tobj, GLU_TESS_ERROR,  
errorCallback);
gluTessCallback(tobj, GLU_TESS_COMBINE,  
combineCallback);
 
/* smooth shaded, self-intersecting star */
glNewList(startList + 1, GL_COMPILE);
glShadeModel(GL_SMOOTH);  
gluTessProperty(tobj, GLU_TESS_WINDING_RULE,
GLU_TESS_WINDING_POSITIVE);
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, star[0], star[0]);
gluTessVertex(tobj, star[1], star[1]);
gluTessVertex(tobj, star[2], star[2]);
gluTessVertex(tobj, star[3], star[3]);
gluTessVertex(tobj, star[4], star[4]);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
glEndList();
gluDeleteTess(tobj);
}
 
void reshape (int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);
}
 
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
 
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;  
}
 
Voila seulement j'ai des erreurs que voila:
 
-error C2664: 'glVertex3dv' : cannot convert parameter 1 from 'void *' to 'const double *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
-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
-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
-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
-error C2664: 'gluTessCallback' : cannot convert parameter 3 from 'void (void *)' to 'void (__stdcall *)(void)'
None of the functions with this name in scope match the target type
-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
-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
-error C2664: 'gluTessCallback' : cannot convert parameter 3 from 'void (double [],double *[],float [],double ** )' to 'void (__stdcall *)(void)'
None of the functions with this name in scope match the target type
 
Je programme sous VSC++ 6 et mes version de glu et gl sont 1.2 !
 
Pourquoi ca me fait ca et comment y remedier?
 
merci pour votre aide


Message édité par jojomillenium le 07-11-2006 à 17:32:56
mood
Publicité
Posté le 07-11-2006 à 17:30:34  profilanswer
 

n°1471790
IrmatDen
Posté le 07-11-2006 à 19:31:54  profilanswer
 

Salut,
 
1. Balise code stp ;)
2. Ce serait bien de marquer les lignes fautives en commentaires, ça évite de devoir les trouver soit-même
3. Arrêtes d'utiliser VC6, son compilateur est foireux; passe sur Visual C++ Express 2005 qui est gratuit.
 
La raison de l'erreur est simplement que les fonctions attendent un type de variables bien particulière, et que les appels en fournissent d'autres.
 
Par exemple:

Code :
  1. void CALLBACK vertexCallback(GLvoid *vertex)
  2. {
  3. const GLdouble *pointer;
  4. pointer = (GLdouble *) vertex;
  5. glColor3dv(pointer+3);
  6. glVertex3dv(vertex);
  7. }


tu devrais caster vertex en GLdouble*. (sans utiliser le cast C, préfères plutôt dynamic_cast<> ).
Et c'est du même acabit pour toutes les autres erreurs.
 
Par contre, tu devrais commencer par apprendre un peu le C++, tu buterais pas sur des erreurs comme ça.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ OpenGL] probleme avec les callback du glutess

 

Sujets relatifs
[resolu] Probleme passage iframe --> includeProblème de logique objet
Probleme avec fonction left() en vbaprobleme upload certains types de fichiers (mp3, guitarpro)
Problème de syntaxe ???probléme de select sous FF
Question sur une manière de modéliser mon problèmeProbleme cookies
[xHtml/CSS]Petit probleme validateur W3Cprobleme mysql 5
Plus de sujets relatifs à : [C++ OpenGL] probleme avec les callback du glutess


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR