1. Avant-propos :
La méthode de dessin de lignes dans Delphi est fondamentalement la même que celle de dessin de points. La différence réside dans les paramètres de glBegin(). Le code du framework de dessin peut faire référence au code d'initialisation du dessin OpenGL2d sous Delphi, l'adresse est //www.VeVB.COm/article/52141.htm. La partie modifiée est le contenu de la fonction Draw.
2. Étapes de dessin au trait :
GL_LINES : traitez chaque sommet comme un segment de ligne indépendant. Un total de n segments de ligne sont définis entre les sommets 2n-1 et 2n, et un total de N/2 segments de ligne sont dessinés.
GL_LINE_STRIP : dessinez un ensemble de segments de ligne connectés en séquence du premier sommet au dernier sommet. Les sommets n et n+1 définissent le segment de ligne n. Un total de n-1 segments de ligne sont dessinés.
GL_LINE_LOOP : dessinez un ensemble de segments de ligne connectés en séquence du premier sommet au dernier sommet, puis le dernier sommet est connecté au premier sommet. Les nième et n+1 sommets définissent le segment de ligne n, et un total de n ligne. les segments sont dessinés.
Les fonctions suivantes peuvent être utilisées pour tracer des lignes :
glLineWidth() définit la largeur de la ligne
glShadeModel() définit le mode de transition des couleurs
glColor3f() définit la couleur de la ligne
procédure TForm1.Draw ;commencer
// Efface le tampon
glClear(GL_COLOR_BUFFER_BIT ou GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Définir la largeur de la ligne
glLineWidth(5);
// Dégradé de couleur entre deux points
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // trace des lignes
//Définit la couleur de la ligne de départ
glColor3f(1, 0, 0);
// dessine le point de départ
glVertex2f(50, 50);
//Définit la couleur de la ligne du point final
glColor3f(0, 0, 1);
//Point final de la peinture
glVertex2f(200, 200);
glEnd;
// Même couleur entre deux points
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// Trois points ferment la boucle pour former un triangle glShadeModel(GL_SMOOTH);
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glEnd;
// ----------- GL_LINE_STRIP -----------
// Polyligne multipoint glShadeModel(GL_SMOOTH);
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); //Échangez le contenu du double tampon, qui copiera les graphiques qui viennent d'être dessinés à l'écran.
fin;
Vous pouvez voir le dégradé de couleurs de la première ligne X. OpenGL a ce style par défaut. OpenGL fournit une fonction glShadeModel pour décider comment gérer cette situation de couleur différente.
glShadeModel(GL_SMOOTH); // Le mode lisse, qui est également la méthode de traitement par défaut d'opengl, obtient l'effet de dégradé de couleur glShadeModel(GL_FLAT); // Mode monochrome, la couleur du segment de ligne est basée sur la couleur d'un certain sommet, qui est déterminé par l'implémentation spécifique . Pour éviter toute incertitude, essayez d'utiliser la même couleur sur tous les polygones
Après tests, il a été constaté que l'effet de dégradé n'est pas valide sous les styles GL_LINE_LOOP et GL_LINE_STRIP ! Les raisons spécifiques doivent être vérifiées plus en détail.
De plus, OpenGL fournit une fonction d'anticrénelage, la fonction est
glEnable(GL_LINE_SMOOTH); //Activer glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH); //Fermer
Après l'avoir utilisé, j'ai constaté que l'effet anti-aliasing n'était pas évident. Cela reste à approfondir.
Cliquez ici pour télécharger le code complet