// Zum erzeugen
procedure TForm1.Rendering;
begin
glClear(GL_COLOR_BUFFER_BIT
or GL_DEPTH_BUFFER_BIT);
DreieckRendering;
SwapBuffers(
DC);
end;
procedure TForm1.DreieckRendering;
var
i: Integer;
begin
If ZeigeDreieck < 1
then Exit;
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(60, ClientWidth/ClientHeight, 0.1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0, 0, -5);
For i := 1
to ZeigeDreieck
do
begin
If i <> 1
then
glTranslatef(-APosX[i-1], -APosY[i-1], 0);
glTranslatef(APosX[i], APosY[i], 0);
glScalef(AScaleX[i], AScaleY[i], 1);
// Hier ist das glScalef und wenn ich wie gesagt das 1. vergrößer vergrößern sich beide
glBegin(AType[i]);
If (SelDreieck = i)
or (
not ChangeColor)
then glColor3f(SelR[0], SelG[0], SelB[0])
else glColor3f(DSelR[0], DSelG[0], DSelB[0]);
glVertex3f(-1, -1, 0);
If (SelDreieck = i)
or (
not ChangeColor)
then glColor3f(SelR[1], SelG[1], SelB[1])
else glColor3f(DSelR[1], DSelG[1], DSelB[1]);
glVertex3f(1, -1, 0);
If AType[i] = GL_TRIANGLES
then
begin
If (SelDreieck = i)
or (
not ChangeColor)
then glColor3f(SelR[2], SelG[2], SelB[2])
else glColor3f(DSelR[2], DSelG[2], DSelB[2]);
glVertex3f(0, 1, 0);
end
else
begin
If (SelDreieck = i)
or (
not ChangeColor)
then glColor3f(SelR[2], SelG[2], SelB[2])
else glColor3f(DSelR[2], DSelG[2], DSelB[2]);
glVertex3f(1, 1, 0);
If (SelDreieck = i)
or (
not ChangeColor)
then glColor3f(SelR[3], SelG[3], SelB[3])
else glColor3f(DSelR[2], DSelG[2], DSelB[2]);
glVertex3f(-1, 1, 0);
end;
glEnd;
end;
end;
// Abfrage ob vergrößert etc werden soll
// Bei Strg+1 Dreieck1 auswählen, bei Strg+2 Dreieck2 auswählen und bei Strg+3 kein Dreieck ausgewählt
If (Key
in [49..57])
and (Shift = [ssCtrl])
then // 49 = 1; 57 = 9
SelDreieck := Key-48;
// Bei + / - größe ändern
If Key = 107
then // 107 = +
begin
AScaleX[SelDreieck] := AScaleX[SelDreieck] + IncScale;
AScaleY[SelDreieck] := AScaleY[SelDreieck] + IncScale;
end;
If Key = 109
then // 109 = -
begin
AScaleX[SelDreieck] := AScaleX[SelDreieck] - IncScale;
AScaleY[SelDreieck] := AScaleY[SelDreieck] - IncScale;
end;
// Bei Oben / Unten usw Position ändern
If Key = VK_UP
then
APosY[SelDreieck] := APosY[SelDreieck] + IncPos;
If Key = VK_DOWN
then
APosY[SelDreieck] := APosY[SelDreieck] - IncPos;
If Key = VK_LEFT
then
APosX[SelDreieck] := APosX[SelDreieck] - IncPos;
If Key = VK_RIGHT
then
APosX[SelDreieck] := APosX[SelDreieck] + IncPos;
Rendering;