- {ASMMODE intel}
- {$MODE OBJFPC}
- program
- GlutLektion3FreePascal;
- uses
- glut, //für Openglfenster
- gl, //OpenGL Unit (gl.... Befehle)
- glu, //GL Utilities (glu... Befehle);
- glaux; //Dateihandlingbefehle
- var
- tex : GLuint;
-
- procedure DrawGL; cdecl;
- begin
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glLoadIdentity;
- glTranslatef(0,0,-5);
- glBindTexture(GL_TEXTURE_2D, tex);
- glBegin(GL_QUADS);
- glTexCoord2f(0,0); glVertex3f(-1,-1,0);
- glTexCoord2f(0,1); glVertex3f(-1,1,0);
- glTexCoord2f(1,1); glVertex3f(1,1,0);
- glTexCoord2f(1,0); glVertex3f(1,-1,0);
- glEnd;
- GlutSwapBuffers;
- end;
- procedure Tasten(key : byte; x,y : integer);
- begin
- x:=x+y;
- case char(key) of
- 'f','F': glutFullscreen;
- 'Q','q': halt;
- end;
- writeln(key);
- end;
- {------------------------------------------------------------------}
- { Initialisierung von OpenGL }
- {------------------------------------------------------------------}
- procedure InitGL; cdecl;
- begin
- glEnable(GL_TEXTURE_2D); // Aktiviert Texture Mapping
- glShadeModel(GL_SMOOTH); // Aktiviert weiches Shading
- glClearColor(0.0, 0.0, 0.0, 0.5); // Bildschirm löschen (schwarz)
- glClearDepth(1.0); // Depth Buffer Setup
- glEnable(GL_DEPTH_TEST); // Aktiviert Depth Testing
- glDepthFunc(GL_LEQUAL); // Bestimmt den Typ des Depth Testing
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- // Qualitativ bessere Koordinaten Interpolation
- end;
- {------------------------------------------------------------------}
- { Behandelt Größenveränderung des Fensters }
- {------------------------------------------------------------------}
- procedure ResizeWndgl(Width, Height : Integer); cdecl;
- begin
- if (Height = 0) then Height := 1;
- glViewport(0, 0, Width, Height); // Setzt den Viewport für das OpenGL Fenster
- glMatrixMode(GL_PROJECTION); // Matrix Mode auf Projection setzen
- glLoadIdentity(); // Reset View
- gluPerspective(45.0, GLfloat(Width)/Height, 1.0, 100.0); // Perspektive den neuen Maßen anpassen.
- glMatrixMode(GL_MODELVIEW); // Zurück zur Modelview Matrix
- glLoadIdentity(); // Reset View
- end;
- var
- texture1 : PTAUX_RGBImageRec;
- begin
- texture1 := auxDIBImageLoadA('wall.bmp');
- if not Assigned(texture1) then
- begin;
- writeln('Texturenpfad oder Dateiname falsch! Fehler beim Laden der Textur!');
- Halt;
- end;
-
- glGenTextures(1,@tex);
- glBindTexture(GL_TEXTURE_2D,tex);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D,0,3,texture1^.sizeX,texture1^.sizey,0,GL_RGBA,GL_UNSIGNED_BYTE,texture1^.data);
-
- writeln('Vollbild mit F, beenden mit Q');
- GlutInit(@argc,@argv);
- glutInitWindowSize(400,400);
- glutInitWindowPosition(100,100);
- glutInitDisplayMode(GLUT_RGB or GLUT_DOUBLE or GLUT_DEPTH);
- glutCreateWindow('OpenGL via Glut mit FreePascal.');
- glutReshapeFunc(@ResizeWndgl);
- glutDisplayFunc(@DrawGL);
- glutIdleFunc(@DrawGL); //Wird aufgerufen, wenn gerade kein Ereignis anfällt.
- glutKeyboardFunc(@Tasten);
- InitGl;
- GlutMainLoop;
- end.