728x90
가시성 판단
(후면제거 - 절단 - 은면제거)
벡터
후면제거(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를 그리는 방식을 구분할 때 사용
절단(Clipping)
- Cohen-sutherland 알고리즘
- 장점 : 상대적으로 간단한 계산에 의해 많은 선분이 제거됨
- Liang-Barsky 알고리즘
- clipping rectangle의 모든 변을 대상으로 교차점을 계산
- 장점 : 절단 함수를 재귀적으로 호출할 필요 없이 어디에서 어디까지가 살아남을 구간인지를 한 번에 판단해냄
- Sutherland-Hodgman 알고리즘
- 내부 → 외부 / 외부 → 내부로 진행할 때 교차점이 발생하는 것이 핵심
- 장점 - 하드웨어로 구현하기 적합
- 단점 - 볼록 다각형만을 처리대상으로 함
- Tessellation을 한 후 각각의 삼각형에 알고리즘 적용
- Weiler-Atherton 알고리즘
- Sutherland-Hodgman 알고리즘의 일반화. Tessellation에 의하지 않고 오목 다각형을 절단할 수 있다.
- 내부로 들어가는 순간부터 나오는 순간까지 추가된 모든 정점이 하나의 다각형을 구성
- 다음 다각형 생성시 지금까지 추가된 모든 정점을 삭제
- 처리되지 않은 교차점이 더 이상 없을 때까지 반복되고 그때마다 새로운 다각형 생성
GL의 절단(Clipping)
은면 제거(Hidden Surface Removal)
정규화 장치 좌표계에서 2차원 투상 직전에 은면제거가 이루어진다.
- 페인터 알고리즘
- 멀리 있는 것 부터 그리기
- 깊이 정렬 시간 - O(NlogN), O(N^2) N - 물체 면의 개수
- Object Space 알고리즘 - 물체 단위로 판단하는 알고리즘. 물체 하나하나에 대해서 다른 물체 앞에 있느냐를 판단.
- Z-버퍼 알고리즘
- Image Space 알고리즘 - 화소단위로 은면을 판단
- 시점에서 나오는 광선은 모든 화소에 대해 화면에 수직
- 광선의 수 - 화면의 화소 수
- 알고리즘 복잡도 - O
- 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) : 프로그램 실행도중 프레임 버퍼에 쓰기 활성화 / 비활성화
728x90
'Computer > 그래픽스' 카테고리의 다른 글
게임그래픽프로그래밍 주제 1. introduction (0) | 2024.07.01 |
---|---|
래스터변환(Rasterization) (0) | 2023.01.19 |
투상변환과 뷰포트변환 (0) | 2023.01.17 |
모델 변환과 시점 변환 (0) | 2023.01.17 |
OpenGL API (0) | 2023.01.13 |