1. Vorwort:
Die Methode zum Zeichnen von Linien in Delphi ist grundsätzlich dieselbe wie die zum Zeichnen von Punkten. Der Unterschied liegt in den Parametern von glBegin(). Der Zeichenframework-Code kann auf den Code in der OpenGL2d-Zeichnungsinitialisierung unter Delphi verweisen. Die Adresse lautet //www.VeVB.COm/article/52141.htm. Der geänderte Teil ist der Inhalt der Draw-Funktion.
2. Schritte zum Zeichnen von Linien:
GL_LINES: Behandeln Sie jeden Scheitelpunkt als unabhängiges Liniensegment. Zwischen den Scheitelpunkten 2n-1 und 2n werden insgesamt n Liniensegmente definiert und insgesamt N/2 Liniensegmente gezeichnet.
GL_LINE_STRIP: Zeichnen Sie eine Reihe von Liniensegmenten, die nacheinander vom ersten Scheitelpunkt bis zum letzten Scheitelpunkt verbunden sind. Der n-te und n+1 Scheitelpunkt definieren das Liniensegment n.
GL_LINE_LOOP: Zeichnen Sie eine Reihe von Liniensegmenten, die nacheinander vom ersten Scheitelpunkt bis zum letzten Scheitelpunkt verbunden sind, und verbinden Sie dann den letzten Scheitelpunkt mit dem ersten Scheitelpunkt. Der n-te Scheitelpunkt und n+1 Scheitelpunkte definieren das Liniensegment n und insgesamt n Linien Segmente werden gezeichnet.
Die folgenden Funktionen können zum Zeichnen von Linien verwendet werden:
glLineWidth() legt die Linienbreite fest
glShadeModel() legt den Farbübergangsmodus fest
glColor3f() legt die Linienfarbe fest
Prozedur TForm1.Draw;beginnen
// Puffer löschen
glClear(GL_COLOR_BUFFER_BIT oder GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Linienbreite festlegen
glLineWidth(5);
// Farbverlauf zwischen zwei Punkten
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // Linien zeichnen
//Legen Sie die Farbe der Startlinie fest
glColor3f(1, 0, 0);
// Startpunkt zeichnen
glVertex2f(50, 50);
//Legen Sie die Farbe der Endpunktlinie fest
glColor3f(0, 0, 1);
//Endpunkt des Malens
glVertex2f(200, 200);
glEnd;
// Gleiche Farbe zwischen zwei Punkten
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// Drei Punkte schließen die Schleife, um ein Dreieck zu bilden glShadeModel(GL_SMOOTH); funktioniert nicht
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glEnd;
// ----------- GL_LINE_STRIP -----------
// Mehrpunkt-Polylinie glShadeModel(GL_SMOOTH); funktioniert nicht
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor3f(1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
glEnd;
SwapBuffers(FDC); //Tauschen Sie den Inhalt des Doppelpuffers, wodurch die gerade gezeichneten Grafiken auf den Bildschirm kopiert werden.
Ende;
Sie können den Farbverlauf der ersten X-Zeile sehen. OpenGL hat standardmäßig diesen Stil. OpenGL bietet eine Funktion glShadeModel, um zu entscheiden, wie mit dieser unterschiedlichen Farbsituation umgegangen werden soll.
glShadeModel(GL_SMOOTH); // Der Smooth-Modus, der auch die Standardverarbeitungsmethode von opengl ist, erzielt den Effekt eines Farbverlaufs glShadeModel(GL_FLAT); // Monochrom-Modus, die Farbe des Liniensegments basiert auf der Farbe eines bestimmten Scheitelpunkt, der durch die spezifische Implementierung bestimmt wird. Um Unsicherheiten zu vermeiden, versuchen Sie, für alle Polygone dieselbe Farbe zu verwenden
Nach dem Test wurde festgestellt, dass der Verlaufseffekt unter den Stilen GL_LINE_LOOP und GL_LINE_STRIP ungültig ist! Die konkreten Gründe müssen noch weiter ermittelt werden.
Darüber hinaus bietet OpenGL eine Anti-Aliasing-Funktion
glEnable(GL_LINE_SMOOTH); //Aktivieren glHint(GL_LINE_SMOOTH,GL_NICEST); //Schließen
Nach der Verwendung stellte ich fest, dass der Anti-Aliasing-Effekt nicht offensichtlich war. Es muss noch weiter untersucht werden.
Klicken Sie hier, um den vollständigen Code herunterzuladen