OpenGl Fehler
-
Hallo,
ich wollte ein Testprogramm von einem Kumpel in VC++ 9.0 einbinden und es testen - allerdings klappt es nicht. Ich bekomme eine Menge Fehlermeldungen wie zb:
c:\programme\microsoft sdks\windows\v6.0a\include\gl\gl.h(1152) : error C2144: Syntaxfehler: 'void' sollte auf ';' folgen
c:\programme\microsoft sdks\windows\v6.0a\include\gl\gl.h(1152) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\programme\microsoft sdks\windows\v6.0a\include\gl\gl.h(1152) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'glAccum'
usw.
Das Programm läuft aber, der Kumpel hat mir die .exe mitgeschickt.Was mache ich falsch? Hier der Quellcode:
#include <math.h> #include <GL/gl.h> #include <GL/glut.h> #include <gl/glaux.h> float angle = 0.0, deltaAngle = 0.0, ratio; float angleUp = 0.0, deltaAngleUp = 0.0; float x = 0.0f, y = 1.75f, z = 5.0f; float lx = 0.0f, ly = 0.0f, lz = -1.0f; int deltaMove = 0, deltaStrafe = 0; int xAxis = 0, yAxis = 0, zAxis = 0, deltaXAxis = 0, deltaYAxis = 0, deltaZAxis = 0; int item = 1; void changeSize(int w, int h) { // Prevent a divide by zero, when window is too short // (you cant make a window of zero width). if(h == 0) h = 1; ratio = 1.0f * w / h; // Reset the coordinate system before modifying glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Set the viewport to be the entire window glViewport(0, 0, w, h); // Set the clipping volume gluPerspective(45, ratio, 1, 1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(x, y, z, x + lx, y + ly, z + lz, 0.0f, 1.0f, 0.0f); } // Draw Quad void drawQuad() { glBegin(GL_QUADS); // Draw A Quad glColor3f(0.0f,1.0f,0.0f); // Set The Color To Blue glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top) glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top) glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top) glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top) glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom) glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom) glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom) glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom) glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front) glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front) glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front) glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front) glColor3f(1.0f,1.0f,0.0f); // Set The Color To Yellow glVertex3f( 1.0f,-1.0f,-1.0f); // Top Right Of The Quad (Back) glVertex3f(-1.0f,-1.0f,-1.0f); // Top Left Of The Quad (Back) glVertex3f(-1.0f, 1.0f,-1.0f); // Bottom Left Of The Quad (Back) glVertex3f( 1.0f, 1.0f,-1.0f); // Bottom Right Of The Quad (Back) glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left) glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left) glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left) glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Left) glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right) glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right) glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right) glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right) glEnd(); // Done Drawing The Quad } // Draw Pyramid void drawPyramid() { glBegin(GL_TRIANGLES); // Start Drawing A Triangle glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front) glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front) glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right) glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right) glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back) glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back) glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Left) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f(-1.0f,-1.0f,-1.0f); // Left Of Triangle (Left) glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f(-1.0f,-1.0f, 1.0f); // Right Of Triangle (Left) glEnd(); // Done Drawing The Pyramid glBegin(GL_QUADS); glColor3f(0.5f,0.0f,1.0f); // Set The Color To Dark Violet glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom) glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom) glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom) glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom) glEnd(); } void drawObjects() { // Place object over the ground glTranslatef(0.0f , 1.75f, 0.0f); // Rotate directions glRotatef ((GLfloat) xAxis, 1.0, 0.0, 0.0); glRotatef ((GLfloat) yAxis, 0.0, 1.0, 0.0); glRotatef ((GLfloat) zAxis, 0.0, 0.0, 1.0); // choose object to be shown if (item == 1) drawQuad(); if (item == 2) drawPyramid(); if (item == 3) { glColor3f(1.0f, 0.0f, 0.0f); glutSolidSphere(1.0f, 20, 20); } if (item == 4) { glColor3f(1.0f, 0.0f, 0.0f); glutWireSphere(1.0f, 20, 20); } if (item == 5) { glColor3f(0.0f, 1.0f, 0.0f); glutSolidCone(0.75f, 1.5f, 50, 12); } if (item == 6) { glColor3f(0.0f, 1.0f, 0.0f); glutWireCone(0.75f, 1.5f, 50, 12); } // Hier wollte ich alle Objekte gleichzeitig darstellen & diese immer um die selbe Achse drehen lassen. // Jedoch funktionier GLLoadIdentity() nicht richtig zum zurücksetzen von glRotateF & glTranslatef /*glLoadIdentity(); glTranslatef(5.0f, 1.75f, 5.0f); glRotatef ((GLfloat) xAxis, 1.0, 0.0, 0.0); glRotatef ((GLfloat) yAxis, 0.0, 1.0, 0.0); glRotatef ((GLfloat) zAxis, 0.0, 0.0, 1.0); glutWireSphere(0.75f, 20, 20); glLoadIdentity(); glTranslatef(5.0f, 1.75f, 10.0f); glRotatef ((GLfloat) xAxis, 1.0, 0.0, 0.0); glRotatef ((GLfloat) yAxis, 0.0, 1.0, 0.0); glRotatef ((GLfloat) zAxis, 0.0, 0.0, 1.0); glutWireCone(0.75f, 1.5f, 4, 12); glLoadIdentity(); glTranslatef(0.0f, 1.75f, 15.0f); glRotatef ((GLfloat) xAxis, 1.0, 0.0, 0.0); glRotatef ((GLfloat) yAxis, 0.0, 1.0, 0.0); glRotatef ((GLfloat) zAxis, 0.0, 0.0, 1.0); glutWireCone(0.75f, 1.5f, 50, 12); */ } // Turning left and right void orientMe(float ang) { /* Camera is only moving in the xz-plane lx & lz are mapped onto a unitary circle on the xz-plane */ lx = sin(ang); lz = -cos(ang); glLoadIdentity(); /* First line: camera position Second line: line of sight Third line: up vector */ gluLookAt(x, y, z, x + lx,y + ly,z + lz, 0.0f, 1.0f, 0.0f); } // Looking up and down void lookUpDown(float ang) { // If sin(ang) = 0 then the line of sight is straight forward. ly = sin(ang); glLoadIdentity(); gluLookAt(x, y, z, x + lx,y + ly,z + lz, 0.0f, 1.0f, 0.0f); } // Moving forward and backward void moveMe(int i) { /* Camera position must be along the line of sight while we move forward or backward. "0.1" is the speed value of the movement. To implement running and walking just change it. */ x = x + i*(lx)*0.1; z = z + i*(lz)*0.1; glLoadIdentity(); gluLookAt(x, y, z, x + lx, y + ly, z + lz, 0.0f, 1.0f, 0.0f); } // Moving left and right void strafeMe(int i) { /* Camera position must be against the line of sight while we move forward or backward. Therefore lx & lz are changed to the other coordinate. */ x = x + i*(lz)*0.1; z = z + i*(lx)*0.1; glLoadIdentity(); gluLookAt(x, y, z, x + lx, y + ly, z + lz, 0.0f, 1.0f, 0.0f); } // Rendering the scene from the actual point of view void renderScene() { if (deltaMove) moveMe(deltaMove); if (deltaStrafe) strafeMe(deltaStrafe); if (deltaAngle) { angle += deltaAngle; orientMe(angle); } if (deltaAngleUp) { angleUp += deltaAngleUp; lookUpDown(angleUp); } if (deltaXAxis) xAxis += deltaXAxis % 360; if (deltaYAxis) yAxis += deltaYAxis % 360; if (deltaZAxis) zAxis += deltaZAxis % 360; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Draw ground glColor3f(0.7f, 0.7f, 0.7f); glBegin(GL_QUADS); glVertex3f(-50.0f, 0.0f, -50.0f); glVertex3f(-50.0f, 0.0f, 50.0f); glVertex3f( 50.0f, 0.0f, 50.0f); glVertex3f( 50.0f, 0.0f, -50.0f); glEnd(); // Draw sky glColor3f(0.0f, 0.0f, 1.0f); glBegin(GL_QUADS); glVertex3f(-1000.0f, 200.0f, -1000.0f); glVertex3f(-1000.0f, 200.0f, 1000.0f); glVertex3f( 1000.0f, 200.0f, 1000.0f); glVertex3f( 1000.0f, 200.0f, -1000.0f); glEnd(); // Draw objects glPushMatrix(); drawObjects(); glPopMatrix(); glutSwapBuffers(); } void initScene() { glEnable(GL_DEPTH_TEST); renderScene(); } // Controls the objects, "w" resets its position to default, "n" & "m" let the camera strafe void keyDown(unsigned char key, int x, int y) { switch (key) { case 'w' : xAxis = 0; yAxis = 0; zAxis=0; break; case 'a': deltaXAxis = 1; break; case 's' : deltaYAxis = 1; break; case 'd' : deltaZAxis = 1; break; case '1' : item = 1; break; case '2' : item = 2; break; case '3' : item = 3; break; case '4' : item = 4; break; case '5' : item = 5; break; case '6' : item = 6; break; case 'n' : deltaStrafe = 1; break; case 'm' : deltaStrafe = -1; break; } } // Controls the key release and resets the delta* variables. void keyUp(unsigned char key, int x, int y) { switch (key) { case 'a' : deltaXAxis = 0; break; case 's' : deltaYAxis = 0; break; case 'd' : deltaZAxis = 0; break; case 'n' : case 'm' : deltaStrafe = 0; break; } } /* Controls the camera and its point of view. The delta* variables let the camera continue to move while the key is pressed. The "home" key resets the camera position in the yAxis */ void specialKeyDown(int key, int x, int y) { switch (key) { case GLUT_KEY_LEFT : deltaAngle = -0.01f; break; case GLUT_KEY_RIGHT : deltaAngle = 0.01f; break; case GLUT_KEY_UP : deltaMove = 1; break; case GLUT_KEY_DOWN : deltaMove = -1; break; case GLUT_KEY_HOME : angleUp = 0.0f; deltaAngleUp = 0.0f; lookUpDown(deltaAngleUp); break; case GLUT_KEY_PAGE_UP : deltaAngleUp = 0.005f; break; case GLUT_KEY_PAGE_DOWN : deltaAngleUp = -0.005f; break; } } // Controls the key release and resets the delta* variables. void specialKeyUp(int key, int x, int y) { switch (key) { case GLUT_KEY_LEFT : case GLUT_KEY_RIGHT : deltaAngle = 0.0f; break; case GLUT_KEY_UP : case GLUT_KEY_DOWN : deltaMove = 0; break; case GLUT_KEY_PAGE_UP : case GLUT_KEY_PAGE_DOWN : deltaAngleUp = 0.0f; break; } } // Glut main function int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(640,480); glutCreateWindow("Wii_PP Uebungssgruppe 4"); initScene(); glutIgnoreKeyRepeat(1); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutDisplayFunc(renderScene); glutIdleFunc(renderScene); glutReshapeFunc(changeSize); glutMainLoop(); return(0); }
-
Hallo
Hast du die Forenbeschreibung gelesen?
chrische