000
28.09.2006, 19:50 Uhr
WindDancer1
|
Hi Leute,
ich hab hier nen kleinen Glut code , wenn ich den Code aus der Klasse in die cpp mit der main schreibe Klapps, mit Klasse krieg ich aber Fehler, hier mal der Code und die Fehlermeldung : code in der cpp:
C++: |
#include <windows.h>
#include "cCube.h"
static void Key(unsigned char key, int x, int y); static void SpecialKey(int key, int x, int y);
cCube cube;
int main(int argc, char **argv) {
glutInit(&argc, argv);
// Ausgabefenster definieren glutInitWindowPosition(0, 0); glutInitWindowSize( 400, 640); // Renderkontext mit Z-Buffer, Doublebuffer fuer RGB-Modus anfordern. glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE);
if (glutCreateWindow("Sample1") == GL_FALSE) { exit(1); } cube.Init();
// Callback Funktionen vereinbaren // glutReshapeFunc(cube.Reshape); glutKeyboardFunc(Key); glutSpecialFunc(SpecialKey); glutDisplayFunc(cube.Display);
// Kontrolle an GLUT Eventloop uebergeben glutMainLoop();
return 0; }
static void Key(unsigned char key, int x, int y) { if (key==27) exit(1); if (key==' ') { if (cube.polygonMode==GL_FILL) cube.polygonMode=GL_LINE; else cube.polygonMode=GL_FILL; // Polygondarstellung zw. Outline und Gefuellt umschalten... glPolygonMode (GL_FRONT_AND_BACK, cube.polygonMode); // ... und Bild erneut rendern glutPostRedisplay (); } }
static void SpecialKey(int key, int x, int y) { switch (key) { case GLUT_KEY_UP: cube.rotX -= 5; break; case GLUT_KEY_DOWN: cube.rotX += 5; break; case GLUT_KEY_LEFT: cube.rotZ -= 5; break; case GLUT_KEY_RIGHT :cube.rotZ += 5; break; default: return; } glutPostRedisplay(); }
|
Hier der Code in der cTest.h:
C++: |
#include <GL/glut.h>
class cCube { private: public: cCube(){} ~cCube(){} GLenum polygonMode; float rotX, rotY , rotZ;
void Init(); static void DrawCube (); static void Display (); static void Reshape (int , int); };
void cCube::DrawCube () { glBegin(GL_QUADS); glColor3d(0.0 ,1.0 ,0.0); // GRÜN glVertex3d( 0.0 , 0.0, 0.0); // Oben rechts (OBEN) glVertex3d( 0.0 , 0.0, -1.0); // Oben links (OBEN) glVertex3d( 0.5 , 0.0, -1.0); // Unten links (OBEN) glVertex3d( 0.5 , 0.0, 0.0); // Unten rechts (OBEN) glColor3d(1.0 ,0.5 ,0.0 ); // ORANGE glVertex3d( 0.0 , -1.0 , 0.0 ); // Oben rechts (UNTEN) glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (UNTEN) glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (UNTEN) glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (UNTEN) glColor3d(1.0 ,0.0 ,0.0 ); // ROT glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (VORNE) glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben links (VORNE) glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten links (VORNE) glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (VORNE) glColor3d(1.0 ,1.0 ,0.0 ); // GELB glVertex3d( 0.0 , 0.0 , -1.0 ); // Unten links (HINTEN) glVertex3d( 0.5 , 0.0 , -1.0 ); // Unten rechts (HINTEN) glVertex3d( 0.5 , -1.0 , -1.0 ); // Oben rechts (HINTEN) glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (HINTEN) glColor3d(0.0 ,0.0 ,1.0 ); // BLAU glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (LINKS) glVertex3d( 0.0 , 0.0 , -1.0 ); // Oben links (LINKS) glVertex3d( 0.0 , -1.0 , -1.0 ); // Unten links (LINKS) glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (LINKS) glColor3d(1.0 ,0.0 ,1.0 ); // VIOLETT glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben rechts (RECHTS) glVertex3d( 0.5 , 0.0 , -1.0 ); // Oben links (RECHTS) glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (RECHTS) glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (RECHTS) glEnd (); }
void cCube::Init() { // Z-Buffer f. Berechnung verdeckter Flaechen einschalten glEnable(GL_DEPTH_TEST); // Vorder- u. Rueckseite der Polygone nur als Randlinien darstellen glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); }
void cCube::Reshape(int width, int height) { // Darstellung auf gesamten Clientbereich des Fensters zulassen glViewport(0, 0, (GLint)width, (GLint)height); // Projektionsmatix initialisieren auf 60 Grad horizontales // Sichtfeld, Verhaeltnis Breite:Hoehe = 1:1, Clipping fuer z<1 // und z>200 */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); // angle, aspect, near Clip, far Clip */ gluPerspective(60.0, 1.0, 1.0, 200.0); // Modelview Matrix wieder zur aktuellen Matrix machen glMatrixMode(GL_MODELVIEW); }
void cCube::Display(void) { // FrameBuffer unf Z-Buffer loeschen */ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Modelview Matrix initialisieren */ glLoadIdentity (); // Modeltransformation ausfuehren... glTranslatef (0.0, 0.0 ,-5.0); // Verschiebung um -3 in z-Richtung glRotatef (rotY, 0.0, 1.0, 0.0); // Rotation um die Y-Achse glRotatef (rotX, 1.0, 0.0, 0.0); // Rotation um die X-Achse glRotatef (rotZ, 0.0, 0.0, 1.0); // Rotation um die Z-Achse glTranslatef (-0.5, -0.5 , -0.5); // Verschieb. um -0.5, alle Richt. glScalef(1.0 , 1.0, 1.0); // ...und den Wuerfel unter der Modeltransformation zeichnen. DrawCube (); // Back-Buffer in den Front-Buffer kopieren. glutSwapBuffers(); }
|
Und hier die Fehler:
Code: |
Kompilierung läuft... TestGlut1.cpp d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(107) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotY' in einer statischen Member-Funktion d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(108) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotX' in einer statischen Member-Funktion d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(109) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotZ' in einer statischen Member-Funktion Fehler beim Ausführen von cl.exe.
Glut 1.exe - 3 Fehler, 0 Warnung(en)
|
Hoffe Ihr könnt mir helfen, vielen Dank vorab WD
Dieser Post wurde am 28.09.2006 um 22:30 Uhr von FloSoft editiert. |