일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 윈도우
- 그래픽스
- 렌더링
- 오픈지엘
- 운영체제
- bezier curve
- modeling
- c4d
- Geometry Modeling
- 윈도우 프로그래밍
- denoising
- Win32 API
- Graphics
- 컴퓨터 구조
- OpenGL
- shader programming
- 베지에 곡선
- 윈도우 구조
- window programming
- 셰이더
- 셰이더프로그래밍
- 컴퓨터 아키텍쳐
- win32
- 윈도우프로그래밍
- Mesh Processing
- MFC
- 그래픽스기초
- shader
- MFC 윈도우 프로그래밍
- 핵심 API로 배우는 윈도우프로그래밍
- Today
- Total
오다기리 박의 알고리즘 노트
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 08. 가시성 판단 (Visibility Detection) 본문
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 08. 가시성 판단 (Visibility Detection)
오다기리 박 2019. 2. 14. 21:12Chapter 08. 가시성 판단 (Visibility Detection)
(후면제거 - 절단 - 은면제거)
Section 01. 벡터
…
Section 02. 후면제거 (Backface Culling)
후면제거 (Backface Culling)
후면을 판단하고 제거하는 과정
void glEnable(GL_CULL_FACE);
void glCullFace(GLenum mode);
void glDisable(GL_CULL_FACE);Front face, Back face
void glFrontFace(GLenum mode) : Front face, Back face를 설정
void glPolygonMode(GLenum face, GLenum mode) : Front face, Back face를 그리는 방식을 구분할 때 사용
Section 03. 절단 (Clipping)
Cohen-Sutherland 알고리즘
장점 : 상대적으로 간단한 계산에 의해 많은 선분이 제거됨
Liang-Barsky 알고리즘
clipping rectangle의 모든 변을 대상으로 교차점을 계산
장점 : 절단 함수를 재귀적으로 호출할 필요 없이 어디에서 어디까지가 살아남을 구간인지를 한 번에 판단해냄
Sutherland-Hodgman 알고리즘
내부 -> 외부 / 외부 -> 내부 로 진행할 때 교차점이 발생하는 것이 핵심
장점 : 하드웨어로 구현하기 적합
단점 : 볼록 다각형만을 처리대상으로 함
해결법 : Tessellation을 한 후 각각의 삼각형에 알고리즘 적용
Weiler-Atherton 알고리즘
Sutherland-Hodgman 알고리즘의 일반화. Tessellation 에 의하지 않고 오목 다각형을 절단할 수 있다.
내부로 들어가는 순간부터 나오는 순간까지 추가된 모든 정점이 하나의 다각형을 구성
다음 다각형 생성시 지금까지 추가된 모든 정점을 삭제
처리되지 않은 교차점이 더 이상 없을 때까지 반복되고 그때마다 새로운 다각형 생성
내외부 판정 및 교차점
정점의 내외부 판정
Ax + By +Cz +D > 0 iff P가 Clip plane 외부에 있다
Ax + By +Cz +D = 0 iff P가 Clip plane 위에 있다
Ax + By +Cz +D < 0 iff P가 Clip plane 내부에 있다
선분과 Clip plane 의 교차점
Section 04. GL의 절단 (Clipping)
…
Section 05. 은면 제거 (Hidden Surface Removal)
정규화 장치 좌표계에서 2차원 투상 직전에 은면제거가 이루어진다.
페인터 알고리즘
멀리 있는 것부터 그리기
깊이 정렬 시간 : O(NlogN), O(N^2) (N : 물체면의 개수)
Object Space 알고리즘이다 : 물체 단위로 판단하는 알고리즘 . 물체 하나하나에 대해서 다른 물체 앞에 있느냐를 판단한다.
결과
Z - 버퍼 알고리즘
Image Space 알고리즘이다 : 화소단위로 은면을 판단.
시점에서 나오는 광선은 모든 화소에 대해 화면에 수직
광선의 수 = 화면의 화소 수
알고리즘 복잡도 : O(화소수x물체면의 개수)
Z - 버퍼(depth 버퍼) : 은면제거의 속도를 높이기 위한 메모리. 모든 화소에 대해서 현재 광선과 교차된 물체면의 깊이를 저장.
알고리즘
초기화
물체 처리
GL의 Z - 버퍼
void glGetIntegerv(GLenum pname, GLint *params) : 사용중인 그래픽 카드의 depth 버퍼의 화소당 비트수 검색
GL의 depth 버퍼 사용을 위한 함수들
void glutInitDisplayMode(GLUT_DEPTH) : 윈도우에서 depth 버퍼 모드를 사용할 수 있도록 초기화
void glEnable(GL_DEPTH_TEST) : depth 를 비교하는 모드를 활성화
void glClear(GL_DEPTH_BUFFER_BIT) : depth 버퍼 내용을 z=1로 초기화. 새로운 프레임을 그릴 때에만 호출
void glDisabled(GL_DEPTH_TEST) : depth버퍼 비활성화
void glDepthFunc(GLenum func) : depth 테스트에 사용되는 비교함수를 설정
void glDepthMask(GLboolean flag) : 프로그램 실행도중 depth 버퍼에 쓰기 활성화/비활성화
void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) : 프로그램 실행도중 프레임 버퍼에 쓰기 활성화 / 비활성화
'컴퓨터 그래픽스 > OpenGL' 카테고리의 다른 글
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 10. 조명과 음영(Lighting and Shading) (0) | 2019.02.14 |
---|---|
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 09. 래스터변환(Rasterization) (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 07. 투상변환과 뷰포트변환 (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 06. 모델변환과 시점변환 (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 05. 오픈지엘 기본 틀 (0) | 2019.02.14 |