1. 서문:
델파이에서 선을 그리는 방법은 기본적으로 점을 그리는 방법과 동일합니다. 차이점은 glBegin()의 매개변수에 있습니다. 드로잉 프레임워크 코드는 Delphi의 OpenGL2d 드로잉 초기화 코드를 참조할 수 있으며 주소는 //www.VeVB.COm/article/52141.htm입니다. 수정된 부분은 Draw 기능의 내용입니다.
2. 선 그리기 단계:
GL_LINES: 각 정점을 독립적인 선분으로 처리합니다. 정점 2n-1과 2n 사이에 총 n개의 선분이 정의되고 총 N/2개의 선분이 그려집니다.
GL_LINE_STRIP: 첫 번째 꼭지점부터 마지막 꼭지점까지 순차적으로 연결된 선분 집합을 그립니다. n 및 n+1 꼭지점은 총 n-1개의 선분을 그립니다.
GL_LINE_LOOP: 첫 번째 꼭지점부터 마지막 꼭지점까지 순차적으로 연결된 선분 집합을 그리고 마지막 꼭지점은 첫 번째 꼭지점에 연결됩니다. n번째와 n+1개의 꼭지점은 선분 n을 정의하며, 총 n개의 선이 됩니다. 세그먼트가 그려집니다.
선을 그리는 데 다음 기능을 사용할 수 있습니다.
glLineWidth()는 선 너비를 설정합니다.
glShadeModel()은 색상 전환 모드를 설정합니다.
glColor3f()는 선 색상을 설정합니다.
절차 TForm1.Draw;시작하다
// 버퍼 지우기
glClear(GL_COLOR_BUFFER_BIT 또는 GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//선 너비 설정
glLineWidth(5);
// 두 점 사이의 그라데이션 색상
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // 선 그리기
//출발선 색상 설정
glColor3f(1, 0, 0);
// 시작점 그리기
glVertex2f(50, 50);
//끝점 라인의 색상을 설정합니다.
glColor3f(0, 0, 1);
//그림의 끝점
glVertex2f(200, 200);
glEnd;
// 두 점 사이의 같은 색
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// 세 개의 점이 루프를 닫아 삼각형을 형성합니다. 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 -----------
// 다중점 폴리라인 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); //방금 화면에 그려진 그래픽을 복사하는 이중 버퍼의 내용을 교환합니다.
끝;
첫 번째 X 라인의 색상 그라데이션을 볼 수 있습니다. OpenGL에는 기본적으로 이 스타일이 있습니다. OpenGL은 이러한 다양한 색상 상황을 처리하는 방법을 결정하기 위해 glShadeModel 함수를 제공합니다.
glShadeModel(GL_SMOOTH); // OpenGL의 기본 처리 방법이기도 한 Smooth 모드는 색상 그라데이션 효과를 얻습니다. glShadeModel(GL_FLAT) // 단색 모드, 선분의 색상은 특정 색상을 기반으로 합니다. 특정 구현에 의해 결정되는 정점입니다. 불확실성을 피하기 위해 다각형 전체에 동일한 색상을 사용하십시오.
테스트 결과 GL_LINE_LOOP 및 GL_LINE_STRIP 스타일에서는 그라데이션 효과가 유효하지 않은 것으로 나타났습니다! 구체적인 이유는 더 자세히 확인해야 합니다.
또한 OpenGL은 앤티앨리어싱(Anti-Aliasing) 기능을 제공하는데, 그 기능은
glEnable(GL_LINE_SMOOTH); //glHint(GL_LINE_SMOOTH,GL_NICEST) 활성화 glDisable(GL_LINE_SMOOTH);
사용해본 결과 안티앨리어싱 효과가 뚜렷하지 않은 것으로 나타났습니다. 더 많은 연구가 필요합니다.
전체 코드를 다운로드하려면 여기를 클릭하세요.