Sto continuando a fare esperimenti, stavolta con qualcosa di piu' costruttivo. Ho scaricato un codice d'esempio banale, che funziona con le openGL, ed ho provato a farci una classe. Ovviamente non funziona...
In particolare il codice funzionante definisce alcune funzioni, tipo
void display ( void )
void reshape(int w, int h)
void keyboard ( unsigned char key, int x, int y )
e poi le passa ad una funzione delle glut, in questo modo:
glutReshapeFunc ( reshape );
glutKeyboardFunc ( keyboard );
glutDisplayFunc ( display );
Io ho provato a fare una classe, e poi passare i suoi metodi esattamente allo stesso modo:
glutReshapeFunc ( MHgui.reshape );
glutKeyboardFunc ( MHgui.keyboard );
glutDisplayFunc ( MHgui.display );
Ma il compilatore mi restituisce un errore tipo:
error: argument of type `void (MHwindow::)(int, int)' does not match `void (*)(int, int)'
error: argument of type `void (MHwindow::)(unsigned char, int, int)' does not match `void (*)(unsigned char, int, int)'
argument of type `void (MHwindow::)()' does not match `void (*)()'
Per favore, datemi una mano!
qui sotto vi allego un link al codice che funziona e il listato di quello che non funziona...
Codice che funziona:
http://paulyg.f2s.com/prog1.htm
Codice che non funziona:
codice:#include <windows.h> #include <GL/glut.h> #include <stdio.h> #include <stdlib.h> class MHwindow { private: int width; int height; //*char title; public: int getWidth(); int getHeight(); void init(); void display(); void reshape(int w, int h); void keyboard(unsigned char key, int x, int y); } ; int MHwindow::getWidth(){return width;} int MHwindow::getHeight(){return height;} void MHwindow::display() { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix ( ); glPopMatrix ( ); glutSwapBuffers ( ); } void MHwindow::reshape(int w, int h) { glViewport ( 0, 0, w, h ); glMatrixMode ( GL_PROJECTION ); glLoadIdentity ( ); if ( h==0 ) gluPerspective ( 80, ( float ) w, 1.0, 5000.0 ); else gluPerspective ( 80, ( float ) w / ( float ) h, 1.0, 5000.0 ); glMatrixMode ( GL_MODELVIEW ); glLoadIdentity ( ); } void MHwindow::keyboard ( unsigned char key, int x, int y ) { switch ( key ) { case 27: /* Escape key */ exit ( 0 ); break; case 'f': glutFullScreen ( ); break; case 'w': glutReshapeWindow ( 100,100 ); break; default: break; } } /* Main Loop * Open window with initial window size, title bar, * RGBA display mode, and handle input events. */ MHwindow MHgui; int main ( int argc, char** argv ) { glutInit ( &argc, argv ); glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE ); glutInitWindowSize ( MHgui.getWidth(),MHgui.getHeight() ); glutCreateWindow ( "pippo" ); glEnable ( GL_DEPTH_TEST ); glClearColor ( 0.0, 0.0, 0.0, 0.0 ); glutReshapeFunc ( MHgui.reshape ); glutKeyboardFunc ( MHgui.keyboard ); glutDisplayFunc ( MHgui.display ); glutMainLoop ( ); return 0; }

Rispondi quotando