1. Prólogo:
El método para dibujar líneas en Delphi es básicamente el mismo que para dibujar puntos. La diferencia radica en los parámetros de glBegin(). El código del marco de dibujo puede referirse al código en la inicialización del dibujo OpenGL2d en Delphi, la dirección es //www.VeVB.COm/article/52141.htm. La parte modificada es el contenido de la función Dibujar.
2. Pasos para dibujar líneas:
GL_LINES: trata cada vértice como un segmento de línea independiente. Se definen un total de n segmentos de línea entre los vértices 2n-1 y 2n, y se dibujan un total de N/2 segmentos de línea.
GL_LINE_STRIP: dibuja un conjunto de segmentos de línea conectados en secuencia desde el primer vértice hasta el último vértice. Los vértices n-ésimo y n + 1 definen el segmento de línea n.
GL_LINE_LOOP: dibuja un conjunto de segmentos de línea conectados en secuencia desde el primer vértice hasta el último vértice, y luego el último vértice se conecta al primer vértice. Los vértices enésimo y n + 1 definen el segmento de línea n, y un total de n líneas. Se dibujan segmentos.
Se pueden utilizar las siguientes funciones para dibujar líneas:
glLineWidth() establece el ancho de la línea
glShadeModel() establece el modo de transición de color
glColor3f() establece el color de la línea
procedimiento TForm1.Draw;comenzar
// Limpiar el buffer
glClear(GL_COLOR_BUFFER_BIT o GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Establecer ancho de línea
glLineWidth(5);
// Color degradado entre dos puntos
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // dibuja líneas
//Establece el color de la línea de salida
glColor3f(1, 0, 0);
// dibujar el punto de partida
glVertex2f(50, 50);
//Establece el color de la línea del punto final
glColor3f(0, 0, 1);
//Punto final de la pintura
glVertex2f(200, 200);
glEnd;
// Mismo color entre dos puntos
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// Tres puntos cierran el bucle para formar un triángulo glShadeModel(GL_SMOOTH no funciona);
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glEnd;
// ----------- GL_LINE_STRIP -----------
// Polilínea multipunto 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); //Intercambia el contenido del búfer doble, que copiará los gráficos recién dibujados en la pantalla.
fin;
Puede ver que el degradado de color de la primera línea X OpenGL tiene este estilo de forma predeterminada. OpenGL proporciona una función glShadeModel para decidir cómo manejar esta situación de color diferente.
glShadeModel(GL_SMOOTH); // Modo suave, que también es el método de procesamiento predeterminado de opengl, logra el efecto de gradiente de color glShadeModel(GL_FLAT); // Modo monocromático, el color del segmento de línea se basa en el color de un determinado vértice, que está determinado por la implementación específica. Para evitar incertidumbre, intente utilizar el mismo color en todos los polígonos.
Después de las pruebas, se descubrió que el efecto de degradado no es válido en los estilos GL_LINE_LOOP y GL_LINE_STRIP. Es necesario determinar más a fondo las razones específicas.
Además, OpenGL proporciona una función anti-aliasing, la función es
glEnable(GL_LINE_SMOOTH); //Habilitar glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH);
Después de usarlo, descubrí que el efecto suavizado no era obvio. Queda por estudiar más a fondo.
Haga clic aquí para descargar el código completo