1. Prefácio:
O método de desenhar linhas no Delphi é basicamente o mesmo de desenhar pontos. A diferença está nos parâmetros de glBegin(). O código da estrutura de desenho pode se referir ao código na inicialização do desenho OpenGL2d em Delphi, o endereço é //www.VeVB.COm/article/52141.htm. A parte modificada é o conteúdo da função Draw.
2. Etapas de desenho de linha:
GL_LINES: Trata cada vértice como um segmento de linha independente. Um total de n segmentos de linha são definidos entre os vértices 2n-1 e 2n, e um total de N/2 segmentos de linha são desenhados.
GL_LINE_STRIP: Desenhe um conjunto de segmentos de linha conectados em sequência do primeiro vértice ao último vértice. O enésimo e n+1 vértices definem o segmento de linha n.
GL_LINE_LOOP: Desenhe um conjunto de segmentos de linha conectados em sequência do primeiro vértice ao último vértice e, em seguida, o último vértice é conectado ao primeiro vértice. O enésimo e n + 1 vértices definem o segmento de linha n e um total de n linha. segmentos são desenhados.
As seguintes funções podem ser usadas para desenhar linhas:
glLineWidth() define a largura da linha
glShadeModel() define o modo de transição de cores
glColor3f() define a cor da linha
procedimento TForm1.Draw;começar
//Limpa o buffer
glClear(GL_COLOR_BUFFER_BIT ou GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Define a largura da linha
glLineWidth(5);
//Cor do gradiente entre dois pontos
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); //desenha linhas
//Define a cor da linha inicial
glColor3f(1, 0, 0);
//desenha o ponto de partida
glVertex2f(50, 50);
//Define a cor da linha do ponto final
glColor3f(0, 0, 1);
//Ponto final da pintura
glVertex2f(200, 200);
glEnd;
// Mesma cor entre dois pontos
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// Três pontos fecham o loop para formar um triângulo 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 -----------
// Polilinha multiponto 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); //Troca o conteúdo do buffer duplo, que copiará os gráficos recém-desenhados para a tela.
fim;
Você pode ver que o gradiente de cor da primeira linha X OpenGL tem esse estilo por padrão. OpenGL fornece uma função glShadeModel para decidir como lidar com essa situação de cores diferentes.
glShadeModel(GL_SMOOTH); // Modo suave, que também é o método de processamento padrão do opengl, obtém o efeito de gradiente de cor glShadeModel(GL_FLAT); vértice, que é determinado pela implementação específica. Para evitar incertezas, tente usar a mesma cor nos polígonos
Após o teste, descobriu-se que o efeito gradiente é inválido nos estilos GL_LINE_LOOP e GL_LINE_STRIP! As razões específicas precisam ser melhor apuradas.
Além disso, OpenGL fornece função anti-aliasing, a função é
glEnable(GL_LINE_SMOOTH); //Ativar glHint(GL_LINE_SMOOTH,GL_NICEST);
Depois de usá-lo, descobri que o efeito anti-aliasing não era óbvio. Resta ser mais estudado.
Clique aqui para baixar o código completo