![]() |
AW: OpenGL Pong
Du Veränderst nur die Koordinaten. Aber danach machst du nichts mehr. Die Koordinaten sind jetzt zwar nicht mehr die alten, zumindest im Speicher, aber auf dem Bildschirm betrachtest du immer noch die alte Ausgabe. D.h. du musst deine Grafiken neu rendern! Dies geschieht normalerweise in deiner Rendering-Methode, die du aus deiner Hauptschleife raus aufrufst. In der Rendering-Methode werden deine Objekte mit den neuen Koordinaten auf dem Bildschirm ausgegben. Die Änderungen, die du zuvor nur im Speicher vorgenommen hast, werden nun sichtbar.
Wie das genau funktioniert musst du in diversen Tutorials nachlesen. |
AW: OpenGL Pong
Zitat:
Beispiel!
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin GLDraw; if Spieler1hoch then begin s1:= s1+5; Spieler1hoch:= false; if Spieler1runter then begin s1:= s1-5; Spieler1runter:= false; end; end; end;
Delphi-Quellcode:
procedure DrawSchläger
begin //Spieler 1 glTranslatef(-60, 0, 0); glTranslated (0, s1, 0); glBegin(GL_QUADS); glColor3f(0, 1, 0); glVertex3f(-1,1,-1); glColor3f(0, 1, 0); glVertex3f(-1,-9,-1); glColor3f(0, 1, 0); glVertex3f(1,-9,-1); glColor3f(0, 1, 0); glVertex3f(1,1,-1); glEnd; end;
Delphi-Quellcode:
So in etwa aber das varriiert von Anwendung zur Anwendung...
procedure GLDraw;
begin // Clear The Screen And The Depth Buffer glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // Change Matrix Mode to Projection glMatrixMode(GL_PROJECTION); // Reset View glLoadIdentity; gluPerspective(45, (320 / 240), 1, 1000.0); // Change Projection to Matrix Mode glMatrixMode(GL_MODELVIEW); glLoadIdentity(); DrawSchläger // Update the display SwapBuffers(h_Dc); end; gruss |
AW: OpenGL Pong
Also brauche ich zusätzlich noch eine Prozedur, bei der die Bewegung steht, die im Timer derzeit ist und dann im Timer erwähnt wird?:oops:
|
AW: OpenGL Pong
Zitat:
gruss |
AW: OpenGL Pong
Also liegt der Fehler lediglich an der Projektion und nicht irgendwo an der Tastenbelegung oder irgendeinem anderen Fehler, den ich mit OpenGL gemacht hab?:roll:
|
AW: OpenGL Pong
Zitat:
Den GeräteContext ermitteln Renderkontext erstellen Renderkontext aktivieren
Delphi-Quellcode:
Dein Timer so wie ich es im Beispiel gezeigt habe mit dem Anstoßen von GLDraw sollte so in Ordnung sein.
// OpenGL-Funtionen initialisieren
InitOpenGL; // Gerätekontext holen h_DC := GetDC(_FNormal.Handle); // Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering) h_RC := CreateRenderingContext(h_DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0); // Erstellten Renderkontext aktivieren ActivateRenderingContext(h_DC, h_RC); Bedenke aber das meine perspektive nicht unbedingt deinen Ansprüchen gerecht wird. Gruss |
AW: OpenGL Pong
Brauche ich dann trotzdem noch den IdleHandler oder kann ich den auslassen, wegen dem Timer?
EDIT: h_DC & h_RC werden bei mir nicht erkannt, hab wohl einen veralteten Header :s |
AW: OpenGL Pong
Was dir bei deinem Projekt helfen könnte, wäre ein Blick auf diese Seite:
![]() Dort findest du auch eine schnelle Einführung in OpenGL: ![]() (habe ich bereits gepostet) Für die Mathematik empfehle ich dir zusätzlich diese Seite: ![]() - Dort findest du gute Videotutorials, die dir sicher helfen werden. DAS klassische OpenGL Tutorial findest du auf NeHe's Homepage: ![]() Viel Spaß und viel Glück h_DC und h_RC sind Variablen! Guck dir wirklich nochmal die Grundlagen an. BTW: Ich würde dir den OpenGL-Header von DelphiGL empfehlen |
AW: OpenGL Pong
Den hab ich ja auch, aber bei dem sind die beiden Variablen auch nicht deklariert
|
AW: OpenGL Pong
Die musst DU ja auch deklarieren! Das macht kein Header für dich. Erstell dir doch erstmal mit den Tutorials einen Rahmen für dein Projekt und versuche die Grundlagen zu verstehen. Ist schwer, dass weiß ich, aber sonst wird das nichts.
So sieht das Template aus (Quelle: DelphiGL):
Delphi-Quellcode:
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject); procedure IdleHandler(Sender: TObject; var Done: Boolean); procedure FormResize(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter Frames, DrawTime : Cardinal; //& Timebased Movement procedure SetupGL; procedure Render; procedure ErrorHandler; public { Public-Deklarationen } DC : HDC; //Handle auf Zeichenfläche RC : HGLRC;//Rendering Context end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz