procedure TForm1.ErstelleOpenGL;
begin
InitOpenGL;
FDeviceContext := GetDC(
Handle);
FRenderContext := CreateRenderingContext(FDeviceContext, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
ActiveRenderingContext(FDeviceContext, FDeviceContext);
OpenGlZuruecksetzen;
end;
procedure TForm1.OpenGlZuruecksetzen;
begin
// Den Buffer leeren
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT
or GL_DEPTH_BUFFER_BIT);
// Die Identitätsmatrix laden
glLoadIdentity;
end;
procedure TForm1.LadeTextur;
var tex : PSDL_Surface;
begin
tex := IMG_Load('
C:\Dokumente und Einstellungen\Mein Name\Eigene Dateien\Eigene Bilder.Bild1.jpg');
if assigned(tex)
then
begin
glGenTextures(1, @FTexture);
glBindTexture(GL_TEXTURE_2D, FTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Achtung! Einige Bildformate erwarten statt GL_RGB, GL_BGR. Diese Konstante fehlt in den Standard-Headern
glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
SDL_FreeSurface(tex);
end;
end;
procedure TForm1.ZeichneAlles;
begin
OpenGlZuruecksetzen;
// Texturen aktivieren
glEnable(GL_TEXTURE_2D);
// Unsere Textur als aktuelle Textur setzen
glBindTexture(GL_TEXTURE_2D, FTexture);
// noch ein paar Sachen intialisieren
glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);
// Nun ein einfaches Viereck zeichen
glBegin(GL_QUADS);
// mit glTexCoord2f sagen wir OpenGL, welche Ecke der Textur an welche Ecke
// des Vertex "aufgehängt wird"
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -5.0);
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -5.0);
glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -5.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -5.0);
glEnd;
// Und nun auf den Bildschirm bringen
SwapBuffers(FDeviceContext);
end;