8장. 가시성 판단 학습목표 후면제거의 정의와 처리방법을 이해한다. 절단작업의 정의와 처리방법을 이해한다. 지엘의 절단 방법을 이해한다. 은면제거의 정의를 이해한다. 지-버퍼 알고리즘을 구체적으로 이해한다.
벡터 정규화 벡터(Normalized Vector) 벡터의 크기(절대값)
벡터 내적과 외적 내적(Inner Product, Dot Product) 외적(Outer Product, Cross Product) 정규화 법선벡터 =정규화 외적벡터
평면 표현
지엘의 법선벡터 법선벡터 방향 오른 손을 명시된 정점 순으로 감싸 쥐었을 때 엄지방향
후면 전면과 후면 후면(Back-Facing Polygon) 전면(Front-Facing Polygon) 후면제거(Backface Culling, Backface Removal) 시점과 면의 오리엔테이션만으로 판단 보이지 않는 면의 거의 절반을 제거
지엘의 후면제거 정규화 가시부피 법선벡터의 z 값만으로 판단가능 glEnable(GL_CULL_FACE); glCullFace(GL_FRONT);
표면과 이면 하나의 면 = 표면 + 이면 표면 시계방향으로 정의된 면 glFrontFace(GL_CCW) 반시계방향으로 정의된 면 glFrontFace(GL_CW)
표면과 이면 후면의 이면 시점이 결정되면 다각형의 표면과 이면 중 하나의 면만 보임. 지엘은 표면과 이면 중 하나만을 선택하여 그 면으로 해당 다각형을 대신함 후면이면 = 표면
절단(Clipping) 2차원 절단 윈도우(Window), 뷰포트(Viewport), 시저 박스(Scissor Box) 3차원 절단 가시부피(View Volume) 절단 다각형 절단 사각형(Clip Rectangle)
코헨-서더런드 알고리즘 4비트 아웃코드(Outcode) 테스트 1) E1 = E2 = 0000 완전히 사각형 내부 선분이므로 보이는 선분으로 판정한다. (선분 A) 테스트 2) E1 & E2 != 0000 선분이 온전히 절단 사각형 밖에 있으므로 제거한다. (선분 B) 테스트 3) E1 != 0000, E2 = 0000 (또는 그 반대) 교차점 계산에 의해 절단한다. (선분 C) 테스트 4) E1 & E2 = 0000 양끝점이 모두 절단 사각형 밖에 있지만 서로 다른 선분이다. 교차점 계산에 의해 절단한다. (선분 D, D')
코헨-서더런드 알고리즘 선분분할 분할된 선분을 대상으로 다시 테스트 선분 D: E3 & E2 != 0000 이므로 온전히 외부 선분으로 무시
리앙-바스키 알고리즘 교차점에서의 파라미터 값의 순서를 기준으로 여러 가지 경우를 판단
서더런드 핫지먼 알고리즘 절단 다각형을 기준으로 순서대로 절단 절단 규칙
서더런드 핫지먼 알고리즘 선분을 연장한 직선을 기준으로 절단 Ex. 좌변기준의 절단 3차원 절단 상, 하, 좌, 우, 전, 후의 6개의 면을 기준으로 절단 면을 기준으로 내외부 판정 Silicon Graphics의 Geometry Engine에 사용
볼록, 오목 서더런드-핫지먼 볼록 다각형에만 적용 하나의 다각형으로 취급 오목 다각형 처리결과: 오류 해법 1: 다각형 분할(Tessellation) 오목 -> 볼록 해법 2: 웨일러-애서톤 알고리즘
웨일러-애서톤 알고리즘 내부에서 외부로 가는 교차점이 추가되면 즉시 그 교차점으로부터 절단 사각형을 따라서 반 시계 방향으로 간다. 즉, 가장 최근에 외부에서 내부로 들어온 교차점을 만날 때까지 간다. 1-C-D-2로 구성되는 하나의 다각형이 완성 분리된 여러 개의 다각형을 생성함
정점의 내외부 판정
동차좌표 사용 점과 평면간의 거리 법선벡터 방향이 면의 외부로 정의됨
교차점 계산
지엘의 절단 3차원좌표(x’, y’, z’) 정규화 장치좌표계 절단 좌표계 (동차 좌표)
지엘의 절단 서더런드 핫지만 알고리즘과 유사 지엘은 4차원 절단 4차원 교차점 계산이 필요 내부점, 외부점, 동일점
선분의 절단
은면제거 Hidden Surface Removal 앞 물체에 가려서 안 보이는 부분 물체의 깊이정보(z값)를 기준으로 판단
페인터 알고리즘 멀리 있는 배경위에 가까운 물체를 덧칠 깊이 정렬(Depth Sort)이 필요 Zmax를 기준으로 물체를 정렬
페인터 알고리즘 B‘, B'‘ Zmin이 A의 Zmin보다 앞에 있으면 그것을 나중에 그려야 함. B x 또는 y 범위가 서로 중첩되지 않으므로 어느 것을 먼저 그리던지 무관함.
페인터 알고리즘 면의 분할 (1) 먼저 A, B를 Zmax 기준으로 그려냄. (2) C와 D는 Zmax는 같지만 x(또는 y)의 범위가 중첩되지 않으니 어느 것을 먼저 그려도 무방함 (3) 최종결과
페인터 알고리즘 가시성 사이클(Visibility Cycle)과 침투(Penetration) 페인터 알고리즘 물체공간 알고리즘(Object Space Algorithm) 정밀도는 높지만 실행속도가 느림 경우에 따른 처리가 매우 복잡함.
지-버퍼 알고리즘 물체공간 vs. 화소공간 결국 화소공간으로 사상 화소공간 해상도로 은면을 판단하면 됨 지-버퍼 알고리즘의 시선
지-버퍼 알고리즘 지-버퍼(Z-Buffer) 또는 깊이버퍼(Depth Buffer) 지-버퍼 알고리즘 Initialize Frame Buffer with Background Color; Initialize Z Buffer with Infinite Distance; for Each Polygon { for Each Pixel { Calculate z of Intersection if (Calculated z < Current z of Z-Buffer) { Update Z-Buffer with Calculate z; Update Frame Buffer with the Color of Current Polygon; } }
지-버퍼 알고리즘
지-버퍼 알고리즘
선형보간 래스터 변환 단계에서 실행 정점으로부터 내부점의 깊이(Depth)및 컬러(Color)를 보간