- procedure TForm1.SetupGL;
- begin
- glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe
- glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren
- glDisable(GL_CULL_FACE); //Backface Culling deaktivieren, sonst Objekte transparent
- end;
- procedure TForm1.FormResize(Sender: TObject);
- var tmpBool : Boolean;
- begin
- glViewport(0, 0, 480, 640); //spannt die Fläche(640x480 Pixel) auf
- glMatrixMode(GL_PROJECTION); //wählt MatrixMode = Projektion aus....
- glLoadIdentity; //setzt die Worldmatrix auf (0,0,0)
- glOrtho(0,480,0,640, 0,128); //es wird mit glortho nur im 2D Bereich gearbeitet
- glMatrixMode(GL_MODELVIEW); //man geht über in die Modelviewansicht
- glLoadIdentity; //wiederum Worldmatrix auf (0,0,0), weil andere Matrix
- IdleHandler(Sender, tmpBool); //??
- end;
- procedure TForm1.Render;
- var i:integer;
- begin
- //Grundinitialisierung von OpenGL beim Rendern(Zeichnen)
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farbpuffer und Tiefenpuffer lehren; ist wie ein refresh bei Timer
- glMatrixMode(GL_PROJECTION); //bestimmt den MatrixMode = Projektion
- glLoadIdentity; //setzt die Worldmatrix auf (0,0,0)
- glViewport(0,0,480,640); //spannt die Fläche auf
- glOrtho(0,480,0,640, 0,256); //sagt das nur in 2D gearbeitet wird(z-Koordinate wird vernachlässigt)
- glMatrixMode(GL_MODELVIEW);
- //Ende Renderinitialisierung
- //Pfeiltasten belegen und Kontrolle ob nicht über den Rand hinaus...
- if GetAsyncKeyState(vk_left) < 0 then
- if btn_spieler.left-1>=0 then
- btn_spieler.Left:=btn_spieler.Left-1
- else
- btn_spieler.Left:=0;
- if GetAsyncKeyState(vk_right) < 0 then
- if btn_spieler.left+1<=form1.Width-btn_spieler.Width-6 then
- btn_spieler.left:=btn_spieler.Left+1
- else
- btn_spieler.Left:=form1.Width-btn_spieler.Width-6;
- //Ende Pfeiltastenkontrolle
- {---Kugel zeichnen---}
- glBegin(GL_TRIANGLE_FAN);
- for i:=0 to 150 do //Anzahl der Punkte
- glVertex2f(Sin(2*Pi/150*i)*r+xm,Cos(2*Pi/150*i)*r+ym); //Eine kugel zeichnen
- glEnd;
- xm:=xm+vx; //Bewegung in die Sache bringen
- ym:=ym+vy;
- {---bei Randberührung---}
- if xm+Sin(2*Pi/150*i)*r>=Form1.ClientWidth then //Rechts Rand
- vorz_wechsel_vx;
- if ym+Cos(2*Pi/150*i)*r>=Form1.ClientHeight then //Oben Rand
- vorz_wechsel_vy;
- if xm-Sin(2*Pi/150*i)*r<=0 then //links rand
- vorz_wechsel_vx;
- if ym-Cos(2*Pi/150*i)*r<=0 then //unten Rand =
- vorz_wechsel_vy;
- SwapBuffers(DC);
- end;