28
Chapter 4 – OpenGL Chapter 4 – OpenGL 상상상상 상상 상상상 상상상상 상상 상상상 4. OpenGL 4. OpenGL 상상상상 상상 상상상 상상상상 상상 상상상

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

  • Upload
    von

  • View
    138

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들

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

Page 2: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 IndexIndex

OpenGL 상태 함수• glGet() , glIsEnabled()

기본 도형 다루기• glBegin() , glEnd()• 점 ( 찍기 , 크기 변경 ,antialiasing)• 선 ( 긋기 , 굵기 변경 , antialiasing, 패턴 )• 삼각형 ( 그리기 ,triangle strip)• 사각형 ( 그리기 ,quad strip)• 다각형 ( 그리기 , 면 제거 , 변 숨기기 , antialiasing,

패턴 )

기본 도형 예제• 소스 분석• 실행

Page 3: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-1. OpenGL 4-1. OpenGL 상태 함수들상태 함수들 (1/2)(1/2)

OpenGL 상태 기계• 상태기계 (state machine)

– OpenGl 에게 무엇을 할 것인지를 알려주는 상태들과 그것들을 관리하는 것OpenGL 상태 함수들• glGet()

– 상태 기계들의 현재 상태를 조회하는 함수

조회하고자 하는 상태를 지정

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

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-1. OpenGL 4-1. OpenGL 상태 함수들상태 함수들 (2/2)(2/2)

• glGet() ( 계속 )– Example of pname

– Error Codes

• glIsEnabled()– OpenGL 기능의 활성화를 알아보고자 할 때 쓰이는 함수

▪ GL_TRUE : 기능이 활성화 된 경우 ▪ GL_FALSE : 기능이 활성화 되지 않은 경우

Page 5: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-2. 4-2. 기본 도형 다루기 기본 도형 다루기 (1/3)(1/3)

OpenGL 에서의 기본 도형• 점 , 선 , 삼각형 등의 기하학적인 객체

OpenGl 함수• glBegin() , glEnd()

– glBegin()▪ mode 의 도형을 그리겠다는 선언

– glEnd()▪ glBegin() 이 지정한 기본 도형의 랜더링을 마치겠다는 뜻

기본 도형의 종류를 입력

Page 6: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들

바른 사용 예

4-2. 4-2. 기본 도형 다루기 기본 도형 다루기 (2/3)(2/3)• glBegin() , glEnd() ( 계속 )

– Example of mode value

– glBegin()/glEnd() 쌍은 중첩되어서는 안됨

상수 설명GL_POINTS 개별적인 점들GL_LINES 연결되지 않은 선분들GL_TRIANGLES 개별적인 삼각형들GL_QUADS 개별적인 사각형들GL_POLYGON 임의의 개수의 꼭지점을 가진 다각형

바르지 못한 사용 예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();

Page 7: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-2. 4-2. 기본 도형 다루기 기본 도형 다루기 (3/3)(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();

Page 8: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-3. 34-3. 3 차원 공간 안에 점 찍기차원 공간 안에 점 찍기 (1/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 에 점을 하나 찍는 예제glBegin(GL_POINTS);

glVertex3f(0.0,0.0,0.0);glVertex3f(0.0,1.0,0.0);

glEnd();

glVertex

Page 9: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-3. 34-3. 3 차원 공간 안에 점 찍기차원 공간 안에 점 찍기 (2/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)

Page 10: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-3. 34-3. 3 차원 공간 안에 점 찍기차원 공간 안에 점 찍기 (3/3)(3/3)

점의 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);

인접한 antialiasing 크기 얻기

Page 11: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-4. 34-4. 3 차원 공간에서 선 긋기 차원 공간에서 선 긋기 (1/2)(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)

3 차원 공간에 선분 긋기 glBegin(GL_LINES);

glVertex3f(-2.0,-1.0,0.0);glVertex3f(3.0,1.0,0.0);

glEnd();

Page 12: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-4. 34-4. 3 차원 공간에서 선 긋기 차원 공간에서 선 긋기 (2/2)(2/2)

점선 패턴 지정• 점선 패턴

– 선의 일부분이 그려지거나 그려지지 않게 하는 마스크– 점선 (dash line) 같은 효과를 얻을 수 있음

• 사용방법– 패턴 기능 켜기

▪ glEnable(GL_LINE_STIPPLE)

– glLineStipple(GLint factor,GLushort pattern) – 패턴 지정▪ factor : 패턴의 각 비트가 반복되는 회수 (range:1~256,default:1)▪ Pattern : 16bit 비트맵 패턴

Page 13: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (1/6)(1/6)

다각형의 기본 ( 삼각형 , 사각형 , 다각형 )• 여러 개의 점을 생성• 각 점들이 특정한 영역을 생성• 영역에 색을 칠함다각형을 그리는 방법• void glPolygonMode(GLenum face, GLenum mode);

– face : 다각형의 전면과 후면을 구별▪ 전면 : GL_FRONT ▪ 후면 : GL_BACK▪ 양면 : GL_FRONT_AND_BACK

– mode값 의 미

GL_POINT 각 정점이 개별적인 점으로 그려짐 (glBegin(GL_POINTS) 와 동일 )

GL_LINE 다각형의 각 변들이 선으로 그려짐GL_FILL 다각형의 내부를 현재의 색으로 칠한다 .

Page 14: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (2/6)(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( 시계 방향이 전면 )

전면 후면다각형 그리기 ( 전면 )

glBegin(GL_POLYGON);glVertex3f(A);glVertex3f(D);glVertex3f(C);glVertex3f(B);

glEnd();

AD

BC

AD

BC

다각형 그리기 ( 전면 )

glBegin(GL_POLYGON);glVertex3f(A);glVertex3f(B);glVertex3f(C);glVertex3f(D);

glEnd();

Page 15: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (3/6)(3/6)

다각형의 변 숨기기• glEdgeFlag()

– void glEdgeFlag(Glboolean isEdge);– void glEdgeFlag(const Glboolean *isEdge);

▪ GL_TRUE : 변이 그려진다 . (default)▪ GL_FALSE : 변이 그려지지 않는다 .

다각형의 Antialiasing• glEnable(GL_POLYGON_SMOOTH)• Default : Antialiasing 미적용

Page 16: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (4/6)(4/6)

다각형 패턴 설정• 다각형을 일정한 무늬로 채우도록 하는 것• glEnable(GL_POLYGON_STIPPLE)• void glPolygonStipple(const Glubyte *mask);

– mask 인자는 비트맵 패턴을 담고 있는 32*32 크기의 바이트 배열에 대한 포인터

• 2 차원에만 적용가능• 다각형을 회전 시킬 경우 패턴은 회전하지 않음

Page 17: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (5/6)(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();

Page 18: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-5. 34-5. 3 차원 공간에 다각형 그리기차원 공간에 다각형 그리기 (6/6)(6/6)

사각형• glBegin(GL_QUADS)• 사각형 띠

– GL_QUAD_STRIP

다각형• glBegin(GL_POLYGON)• glBegin()/glEnd() 쌍 안에서 하나의 다각형 만 그릴 수 있음

Page 19: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (1/10)(1/10)

Main Message Loop

Page 20: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (2/10)(2/10)

WndProc – Window message handler

Page 21: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (3/10)(3/10)

윈도우 생성

Page 22: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (4/10)(4/10)

Wgl 함수의 사용 (DC&RC 생성 및 제거 )

Page 23: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (5/10)(5/10)

GL_POINT , GL_LINE

Page 24: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (6/10)(6/10)

GL_TRIANGLE,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN

Page 25: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (7/10)(7/10)

GL_QUAD

Page 26: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (8/10)(8/10)

GL_POLYGON

Page 27: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (9/10)(9/10)

Toggle Antialiasing

Page 28: 4. OpenGL  상태들과 기본 도형들

Cha

pter

4 –

Ope

nGL

Cha

pter

4 –

Ope

nGL

상태들과

기본 도형

들상태

들과 기본

도형들 4-6. 4-6. 기본 도형 예제 기본 도형 예제 (10/10)(10/10)

Toggle Stippling , Rotate polygon mode

GL_POINTGL_LINEGL_FILL