- procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
- var _i: Integer;
- _j: Double;
- begin
- // In die Projektionsmatrix wechseln
- glMatrixMode(GL_PROJECTION);
- // Identitätsmatrix laden
- glLoadIdentity;
- // Viewport an Clientareal des Fensters anpassen
- glViewPort(0, 0, Panel1.Width, Panel1.ClientHeight);
- // Perspective, FOV und Tiefenreichweite setzen
- gluPerspective(60, ClientWidth/ClientHeight, 1, 128);
- // In die Modelansichtsmatrix wechseln
- glMatrixMode(GL_MODELVIEW);
- // Identitätsmatrix laden
- glLoadIdentity;
- // Farb- und Tiefenpuffer löschen
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- //1)
- gltranslatef(0,0,-Trackbar1.Position/4);
- //2)
- glrotatef(Trackbar2.Position,0,0,-1);
- glrotatef(Trackbar3.Position,0,-1,0);
- glrotatef(Trackbar4.Position,-1,0,0);
- //3)
- gltranslatef(-Trackbar5.Position/10,-Trackbar6.Position/10,-Trackbar7.Position/10);
- if KreuzAnAus.Checked = True then begin
- // Koordinatenkreuz!!!
- gllinewidth(1);
- glbegin(gl_lines);
- glcolor3f(1,0,0);
- glvertex3f(0,0,0);
- glvertex3f(2,0,0);
- // Pfeilspitze
- glcolor3f(0.8,0,0);
- glvertex3f(2,0,0);
- glvertex3f(1.8,0.2,0);
- glvertex3f(2,0,0);
- glvertex3f(1.8,-0.2,0);
- glcolor3f(0,1,0);
- glvertex3f(0,0,0);
- glvertex3f(0,2,0);
- // Pfeilspitze
- glcolor3f(0,0.8,0);
- glvertex3f(0,2,0);
- glvertex3f(0.2,1.8,0);
- glvertex3f(0,2,0);
- glvertex3f(-0.2,1.8,0);
- glcolor3f(0,0,1);
- glvertex3f(0,0,0);
- glvertex3f(0,0,2);
- // Pfeilspitze
- glcolor3f(0,0,0.8);
- glvertex3f(0,0,2);
- glvertex3f(0.2,0,1.8);
- glvertex3f(0,0,2);
- glvertex3f(-0.2,0,1.8);
- glend;
- end;
- // Bodenareal zeichnen ...
- glLineWidth(1);
- if GitterAnAus.Checked = True then begin
- // Textureinbindung verfälscht Farben. Deswegen ausblenden !
- glDisable(GL_TEXTURE_2D);
- glbegin(gl_lines);
- glcolor3f(0.75,0.75,0.75);
- _j := -7;
- repeat
- glvertex3f(-7,0,_j);
- glvertex3f(7,0,_j);
- _j := _j + 0.5;
- until _j > 7;
- _j := -7;
- repeat
- glvertex3f(_j,0,-7);
- glvertex3f(_j,0,7);
- _j := _j + 0.5;
- until _j > 7;
- glend;
- end;
- // Textur rendern
- if BodenAnAus.Checked = True then begin
- glcolor3f(1,1,1);
- FTex.Bind;
- glBegin(GL_QUADS);
- glTexCoord2f(0, 1); glVertex3f(- 3, -1.01, -3);
- glTexCoord2f(1, 1); glVertex3f( 3, -1.01, -3);
- glTexCoord2f(1, 0); glVertex3f( 3, -1.01, 3);
- glTexCoord2f(0, 0); glVertex3f(- 3, -1.01, 3);
- glEnd;
- glDisable(GL_TEXTURE_2D);
- end;
- glDisable(GL_TEXTURE_2D);
- //4)
- gltranslatef(Trackbar8.Position/10,Trackbar9.Position/10,Trackbar10.Position/10);
- //5)
- glrotatef(Trackbar11.Position,1,0,0);
- glrotatef(Trackbar12.Position,0,1,0);
- glrotatef(Trackbar13.Position,0,0,1);
- //6)
- glscalef(Trackbar14.Position/10,Trackbar15.Position/10,Trackbar16.Position/10);
- // Daten zeichnen
- glLineWidth(2);
- glBegin(GL_LINE_STRIP);
- for _i := 0 to length(x) - 1 do begin
- if length(x) = 0 then break;
- glPushMatrix;
- //glColor3b(Round(y[_i] * 40)+ 40,Round(y[_i] * 80) + 50,0);
- glcolor3b(127 - (speed[_i]-127) ,speed[_i]-127,speed[_i]-127);
- glVertex3f(x[_i], y[_i], z[_i]);
- glPopMatrix;
- end;
- glEnd();
- glLineWidth(1);
- // Schatten zeichnen
- if SchattenAnAus.Checked = True then begin
- glBegin(GL_LINE_STRIP);
- for _i := 0 to length(x) - 1 do begin
- if length(x) = 0 then break;
- glPushMatrix;
- glColor3b(70,70,70);
- glVertex3f(x[_i], 0, z[_i]);
- glPopMatrix;
- end;
- glEnd();
- // Schattenstriche nach unten zeichnen
- glBegin(GL_LINES);
- for _i := 0 to length(x) - 1 do begin
- if length(x) = 0 then break;
- glPushMatrix;
- if (_i mod trunc(SchattenStriche.Value)) = 0 then begin
- glColor3b(20,20,35);
- glVertex3f(x[_i],0, z[_i]);
- glVertex3f(x[_i], y[_i], z[_i]);
- end;
- glPopMatrix;
- end;
- glEnd();
- end;
- //glcolor3f(1,1,1);
- ShowText;
- // Hinteren Puffer nach vorne bringen
- SwapBuffers(DC);
- // Windows denken lassen, das wir noch nicht fertig wären
- Done := False;
- // Nummer des gezeichneten Frames erhöhen
- inc(Frames);
- // FPS aktualisieren
- if GetTickCount - StartTick >= 500 then begin
- FPS := Frames/(GetTickCount-StartTick)*1000;
- Frames := 0;
- StartTick := GetTickCount
- end;
- end;