Delphi에서 OpenGL2d 드로잉의 선을 그리는 방법

2541 단어
1. 앞말:
Delphi는 점을 그리는 방법과 기본적으로 같다.glBegin()의 매개변수와 다릅니다.그려진 프레임 코드는 Delphi에서 OpenGL2d 드로잉 초기화 중인 코드를 참조할 수 있습니다.//www.jb51.net/article/52141.htm.수정된 부분은 Draw 함수의 내용입니다.
2. 선을 그리는 단계:
GL_LINES: 각 교점을 하나의 독립된 선분으로 하고 교점 2n - 1과 2n 사이에 모두 n개의 선분을 정의하여 총 N/2개의 선분 GL 그리기LINE_STRIP: 첫 번째 정점에서 마지막 정점까지 차례로 연결된 선 세그먼트를 그립니다. n과 n+ 1개의 정점은 선 세그먼트 n을 정의합니다. 총 n - 1개의 선 세그먼트 GLLINE_LOOP: 첫 번째 정점에서 마지막 정점까지 차례대로 연결된 선분을 그리고 마지막 정점과 첫 번째 정점이 연결되며 n과 n+1 정점은 선분 n을 정의하여 총 n개의 선분을 그립니다
선을 그릴 때 사용할 수 있는 함수는 다음과 같습니다.
glLineWidth() 선 너비 설정 glShadeModel() 색상 변환 모드 glColor3f() 선 색상 설정

procedure TForm1.Draw;
begin
  //
  glClear(GL_COLOR_BUFFER_BIT or 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); // , 。
end;

첫 번째 X선 색상의 그래디언트를 볼 수 있으며 OpenGL은 기본적으로 이 스타일입니다.이 다른 색을 어떻게 처리하는지 결정하는 함수glShadeModel을 오픈gl에서 제공합니다.

glShadeModel(GL_SMOOTH); //     ,   opengl       ,         
glShadeModel(GL_FLAT);  //     ,                ,       。        ,               


테스트를 거친 결과, GLLINE_LOOP 및 GLLINE_STRIP 스타일에서는 그래디언트 효과가 유효하지 않습니다.구체적인 원인은 좀 더 규명해야 한다.
또한 OpenGL은 다음과 같은 앤티앨리어싱 기능을 제공합니다.

glEnable(GL_LINE_SMOOTH); //  
glHint(GL_LINE_SMOOTH,GL_NICEST);
glDisable(GL_LINE_SMOOTH); //  


사용 후 톱니 저항 효과가 뚜렷하지 않은 것을 발견하였다.좀 더 진일보하여 계속 연구해야 한다.
전체 코드 다운로드

좋은 웹페이지 즐겨찾기