Re: Bild in opengl_würfel
Ich seh gerade, dass du TexID nicht deklariert hast. Schreib folgendes hin:
Delphi-Quellcode:
Aber du solltest dir wirklich mal die Tutorials auf DelphiGL.com anschauen, so wie du das machst kann es überhaupt nicht funktionieren.
var
tex : PSDL_Surface; // Die Texture-ID // Du kannst entweder GLUint (GL unsigned integer) // oder TGLUint (Type GL unsigned integer) // oder DWORD (in der Windows.pas: type DWORD = cardinal; // oder einfach cardinal benutzen TexID : GLUint; begin tex := IMG_Load('C:\Dokumente und Einstellungen\Mein Name\Eigene Dateien\Eigene Bilder.Bild1.jpg'); { ... } end; Hier mal ein ganz grobes (ungetesteted) Beispiel:
Delphi-Quellcode:
So, danach brauchen wir ein paar Variablen und Funktionen in der TForm1-Klasse:
// Zuerst mal die richtigen Units einbinden
uses // Von TForm und von TTimer sowie noch ein paar andere Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, // OpenGL und Hilf-Units dglOpenGl, sdl, sdl_image;
Delphi-Quellcode:
So, jetzt füllen wir die Funktionen mit leben
type
TForm1 = class(TForm) { ... noch nicht wichtig ... } private { Private-Deklarationen } { Der Render-Context an sich } FDeviceContext : HDC; FRenderContext : HGLRC; { Die Textur } FTexture : GLUint; { Noch ein Paar Funktionen } procedure ErstelleOpenGL; // OpenGL laden und RenderContext erstellen procedure OpenGlZuruecksetzen; // OpenGL zurücksetzen procedure LadeTextur; // Läd eine Textur in "FTexture" procedure ZeichneAlles; // muss wohl nicht weiter erklärt werden public { Public-Deklarationen } end;
Delphi-Quellcode:
Nun brauchen wir einen Timer mit Intervall 1 und das FormCreate-Event:
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;
Delphi-Quellcode:
Fertig. Ich hab den Quelltext jetzt nicht getestet, hab ihn einfach so ausm Kopf heruntergeschrieben. Hab auch schon länger nichts mehr mit OpenGL gemacht, daher kann es sein, dass manches nicht stimmt.
procedure TForm1.FormCreate(Sender: TObject);
begin ErstelleOpenGL; LadeTextur; end; procedure TForm1.Timer1Timer(Sender: TObject); begin ZeichneAlles; end; |
Re: Bild in opengl_würfel
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal deine Version übernommen. Füre ich das Programm aus (F9) erscheint dieser Bildschierm (siehe Anhang). Bitte, Bitte hilf mir. Vielen, Vielen Dank schon mal im voraus.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz