1 / 28

4. OpenGL 상태들과 기본 도형들

4. OpenGL 상태들과 기본 도형들. Index. OpenGL 상태 함수 glGet() , glIsEnabled() 기본 도형 다루기 glBegin() , glEnd() 점 ( 찍기 , 크기 변경 ,antialiasing) 선 ( 긋기 , 굵기 변경 , antialiasing, 패턴 ) 삼각형 ( 그리기 ,triangle strip) 사각형 ( 그리기 ,quad strip) 다각형 ( 그리기 , 면 제거 , 변 숨기기 , antialiasing, 패턴 ) 기본 도형 예제 소스 분석 실행.

von
Télécharger la présentation

4. OpenGL 상태들과 기본 도형들

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4. OpenGL 상태들과 기본 도형들

  2. Index • OpenGL 상태 함수 • glGet() , glIsEnabled() • 기본 도형 다루기 • glBegin() , glEnd() • 점 (찍기,크기 변경,antialiasing) • 선 (긋기,굵기 변경, antialiasing,패턴) • 삼각형(그리기,triangle strip) • 사각형(그리기,quad strip) • 다각형(그리기,면 제거,변 숨기기, antialiasing,패턴) • 기본 도형 예제 • 소스 분석 • 실행

  3. 조회하고자 하는 상태를 지정 4-1. OpenGL 상태 함수들(1/2) • OpenGL 상태 기계 • 상태기계 (state machine) • OpenGl에게 무엇을 할 것인지를 알려주는 상태들과 그것들을 관리하는 것 • OpenGL 상태 함수들 • glGet() • 상태 기계들의 현재 상태를 조회하는 함수

  4. 4-1. OpenGL 상태 함수들(2/2) • glGet() (계속) • Example of pname • Error Codes • glIsEnabled() • OpenGL 기능의 활성화를 알아보고자 할 때 쓰이는 함수 • GL_TRUE : 기능이 활성화 된 경우 • GL_FALSE : 기능이 활성화 되지 않은 경우

  5. 기본 도형의 종류를 입력 4-2. 기본 도형 다루기 (1/3) • OpenGL에서의 기본 도형 • 점,선,삼각형 등의 기하학적인 객체 • OpenGl 함수 • glBegin() , glEnd() • glBegin() • mode의 도형을 그리겠다는 선언 • glEnd() • glBegin()이 지정한 기본 도형의 랜더링을 마치겠다는 뜻

  6. 바르지 못한 사용 예 바른 사용 예 4-2. 기본 도형 다루기 (2/3) • glBegin() , glEnd() (계속) • Example of mode value • glBegin()/glEnd() 쌍은 중첩되어서는 안됨 바른 사용 예 glBegin(GL_POINTS); …… glVertex3f(0.0,0.0,0.0); …… glBegin(GL_LINES); …… glEnd(); glEnd(); glBegin(GL_POINTS); …… glVertex3f(0.0,0.0,0.0); …… glEnd(); glBegin(GL_POINTS); …… glEnd();

  7. 4-2. 기본 도형 다루기 (3/3) • 기본 도형을 그리는 순서 ① glBegin(Glenum mode) 를 이용하여 어떤 도형을 그릴지 OpenGL에게 알려준다. ② glVertex() 등의 함수를 이용하여 점을 찍거나 선을 긋는다. ③ glEnd() 로 기본 도형의 랜더링을 끝낸다. 3차원 공간에 점을 찍는 소스 glBegin(GL_POINTS); for (int n = 0; n < 40; n++) { glColor3ub(rand() % 256, rand() % 256, rand() % 256); glVertex2i(rand() % g_width, rand() % g_height); } glEnd();

  8. 4-3. 3차원 공간 안에 점 찍기(1/3) • 정점을 지정하는 함수 • glVertex() • 3차원 공간 상의 한 점을 지정 • 지정된 점은 glBegin(GLenum mode)에서 지정된 기본 도형의 종류에 따라 적절히 해석되어 표현 • 형식 : void glVertex[2,3,4] [d,f,I,s] [v] (…); • [2,3,4] : 점의 차원 • [d,f,I,s] : 데이터의 형식 • [v] : 인자를 벡터로 전달 • 3차원 상의 0.0,0.0,0.0 과 0.0,1.0,0.0에 점을 하나 찍는 예제 glVertex glBegin(GL_POINTS); glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,1.0,0.0); glEnd();

  9. 4-3. 3차원 공간 안에 점 찍기(2/3) • 점 크기 변경 • void glPointSize(Glfloat size); • 기본 크기는 1.0 • 현재의 점 크기는 GL_POINT_SIZE로 glGet()을 호출하여 확인 가능 • 점의 Antialiasing • 공식적으로 점의 크기가 1.0인 것 만 가능 • GL_POINT_SMOOTH를 인자로 하여 glEnable()호출 • Antialiasing 확인 방법 • GL_POINT_SMOOTH로 glGet()을 호출 • glIsEnable(GL_POINT_SMOOTH)

  10. 4-3. 3차원 공간 안에 점 찍기(3/3) • 점의 Antialiasing (계속) • Antialiasing이 지원되는 크기 얻기 ① 점 크기의 최대/최소값을 얻는다. ② 인접한 지원 크기들 사이의 차이을 얻는다. 인접한 antialiasing 크기 얻기 Glfloat sizes[2]; Glfloat granularity; glGetFloatv(GL_POINT_SIZE_RANGE,sizes); Glfloat minPointSize = sizes[0]; Glfloat maxPointSize = sizes[0]; glGetFloatv(GL_POINT_SIZE_GRANULARITY,&granularity);

  11. 3차원 공간에 선분 긋기 glBegin(GL_LINES); glVertex3f(-2.0,-1.0,0.0); glVertex3f(3.0,1.0,0.0); glEnd(); 4-4. 3차원 공간에서 선 긋기 (1/2) • 선 긋기 • 선분의 양 끝을 지정하는 작업 • 지정된 정점의 수는 짝수여야 함 • 선의 Antialiasing • Antialiasing On/Off • On : glEnable(GL_LINE_SMOOTH); • Off : glDisable(GL_LINE_SMOOTH); • Antialiasing 확인 작업 • glGet() 을 GL_LINE_SMOOTH로 호출 • glIsEnable(GL_LINE_SMOOTH)

  12. 4-4. 3차원 공간에서 선 긋기 (2/2) • 점선 패턴 지정 • 점선 패턴 • 선의 일부분이 그려지거나 그려지지 않게 하는 마스크 • 점선(dash line)같은 효과를 얻을 수 있음 • 사용방법 • 패턴 기능 켜기 • glEnable(GL_LINE_STIPPLE) • glLineStipple(GLint factor,GLushort pattern) – 패턴 지정 • factor : 패턴의 각 비트가 반복되는 회수(range:1~256,default:1) • Pattern : 16bit 비트맵 패턴

  13. 4-5. 3차원 공간에 다각형 그리기(1/6) • 다각형의 기본 (삼각형,사각형,다각형) • 여러 개의 점을 생성 • 각 점들이 특정한 영역을 생성 • 영역에 색을 칠함 • 다각형을 그리는 방법 • void glPolygonMode(GLenum face, GLenum mode); • face : 다각형의 전면과 후면을 구별 • 전면 : GL_FRONT • 후면 : GL_BACK • 양면 : GL_FRONT_AND_BACK • mode

  14. 다각형 그리기(전면) 다각형 그리기(전면) 4-5. 3차원 공간에 다각형 그리기(2/6) • 다각형의 면 제거(face culling) • glEnable(GL_CULL_FACE) • void glCullFace(Glenum mode); • mode : GL_FRONT,GL_BACK,GL_FRONT_AND_BACK • 다각형의 면 구분 • polygon winding(감는 방법) • 전면 : 반시계 방향 • 후면 : 시계 방향 • void glFrontFace(Glenum mode); • mode : GL_CCW(반시계 방향이 전면) , GL_CW(시계 방향이 전면) D A D A glBegin(GL_POLYGON); glVertex3f(A); glVertex3f(D); glVertex3f(C); glVertex3f(B); glEnd(); glBegin(GL_POLYGON); glVertex3f(A); glVertex3f(B); glVertex3f(C); glVertex3f(D); glEnd(); 전면 후면 C B C B

  15. 4-5. 3차원 공간에 다각형 그리기(3/6) • 다각형의 변 숨기기 • glEdgeFlag() • void glEdgeFlag(Glboolean isEdge); • void glEdgeFlag(const Glboolean *isEdge); • GL_TRUE : 변이 그려진다. (default) • GL_FALSE : 변이 그려지지 않는다. • 다각형의 Antialiasing • glEnable(GL_POLYGON_SMOOTH) • Default : Antialiasing 미적용

  16. 4-5. 3차원 공간에 다각형 그리기(4/6) • 다각형 패턴 설정 • 다각형을 일정한 무늬로 채우도록 하는 것 • glEnable(GL_POLYGON_STIPPLE) • void glPolygonStipple(const Glubyte *mask); • mask 인자는 비트맵 패턴을 담고 있는 32*32 크기의 바이트 배열에 대한 포인터 • 2차원에만 적용가능 • 다각형을 회전 시킬 경우 패턴은 회전하지 않음

  17. 다각형 그리기(전면) 4-5. 3차원 공간에 다각형 그리기(5/6) • 삼각형 • 세 개의 꼭지점을 지정하여 생성 • 순서대로 세 개씩의 정점들을 하나의 삼각형으로 그림 • 여분의 정점은 무시 됨 • Triangle strip (삼각형 띠) • glBegin(GL_TRIANGLE_STRIP) • 첫 번째 삼각형 : A,B,C 정점으로 삼각형을 그림 • 두 번째 삼각형 : 마지막 두 정점 B,C와 새로운 정점 D로 그림 • Triangle fan (삼각형 부채) • glBegin(GL_TRIANGLE_FAN) , 하나의 꼭지점 공유 glBegin(GL_TRIANGLES); glVertex3f(-2.0,-1.0,0.0); glVertex3f(3.0,1.0,0.0); glVertex3f(0.0,3.0,0.0); glEnd();

  18. 4-5. 3차원 공간에 다각형 그리기(6/6) • 사각형 • glBegin(GL_QUADS) • 사각형 띠 • GL_QUAD_STRIP • 다각형 • glBegin(GL_POLYGON) • glBegin()/glEnd() 쌍 안에서 하나의 다각형 만 그릴 수 있음

  19. 4-6. 기본 도형 예제 (1/10) • Main Message Loop

  20. 4-6. 기본 도형 예제 (2/10) • WndProc – Window message handler

  21. 4-6. 기본 도형 예제 (3/10) • 윈도우 생성

  22. 4-6. 기본 도형 예제 (4/10) • Wgl함수의 사용(DC&RC 생성 및 제거)

  23. 4-6. 기본 도형 예제 (5/10) • GL_POINT , GL_LINE

  24. 4-6. 기본 도형 예제 (6/10) • GL_TRIANGLE,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN

  25. 4-6. 기본 도형 예제 (7/10) • GL_QUAD

  26. 4-6. 기본 도형 예제 (8/10) • GL_POLYGON

  27. 4-6. 기본 도형 예제 (9/10) • Toggle Antialiasing

  28. GL_POINT GL_LINE GL_FILL 4-6. 기본 도형 예제 (10/10) • Toggle Stippling , Rotate polygon mode

More Related