경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다.
게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다.
이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다

화면과 같이 x,y,z 좌표(왼손 좌표계)에서 피라미드가 있다.

아래 파란 화살표 처럼 z 축과 평행한 방향으로 이 피라미드를 바라본다고 가정하자.
그렇다면 우리 화면에 나오는 것은 노락색 삼각형, 파란색 삼각형 면만 보일 것이다.

위 그림과 같이 화면에 보이는 앞면, 카메라와 마주보는 면을 front face,
반대로,
현재 화면에서 보이지 않는 뒷면, 카메라와 같은 방향에 있는 면을 back face 라고 한다.
현재 프로그램에서 좌표를 input으로 주면
back face의 좌표와 면들은 front face가 모두 덮어쓰고 있는 상태이다.
그렇다면 어차피 보이지 않는 거 그리지 않으면 어떨까?
그래서 나온 게 Back face Culling 이다.
어떻게 뒷면을 축출하느냐?
Back face Culling은 normal vector(법선 벡터) 기준으로 축출한다.
normal vector(법선 벡터)란?
한 평면에 수직인 벡터를 의미한다.
normal vector 방향 설정에는 오른손 법칙 CCW = Counter-clockwise(반시계 방향), 왼손 법칙 CW = Clockwise(시계 방향)이 있다.
삼각형을 만들 때 일관성을 위해 가능하면 오른손 법칙에 따라서 normal vector가 항상 바깥쪽을 향하게 한다.
그래서 아래와 같이 vertex 번호가 주어진다면 오른손 법칙에 따라 normal vector가 바깥쪽을 향하게
0 → 1 → 2 , 0 → 2 → 3 , ... , 0 → 4 → 1 ,
밑면의 사각형은 2개의 삼각형으로 나눠져 4 → 3 → 1, 2 → 1 → 3 형태로 그려질 것이다.
다시 피라미드 모형에 오른손 법칙(CCW)을 이용해 normal vector를 찾아본다면

삼각형에 수직인 벡터, 바깥쪽을 가리키는 위 그림과 같은 벡터가 된다.

위에서 본다면 이렇게 법선 벡터가 만들어질 것이다.

파란 화살표와 같이 바라볼 때
카메라(viewer)와 삼각형 면까지의 벡터와 앞서 구했던 각 삼각형의 법선벡터를 내적했을 때 90도가 넘어가면 보이지 않는 면, back face로 축출되는 것이다.

이렇게 남은 front face만을 가지고 진행한다.
Back face Culling은 그래픽 파이프라인에서 primitive assembly 단계에서 진행된다.
장점 :
평균적으로 face 개수의 절반이 축출되기 때문에 속도가 최대 2배 빨라질 수 있다.
Back face culling 을 쓰지 못하는 경우가 있는데
투명한 물체, 완전히 둘러싸이지 않은 물체(어딘가 뚫린 물체)에는 사용할 수 없다.
'컴터 > OpenGL' 카테고리의 다른 글
| [OpenGL] Look-At, Orthographic Projection (2) | 2023.06.10 |
|---|---|
| [OpenGL] VBO(Vertex Buffer Objects) (2) | 2023.06.10 |
| [OpenGL] Z-buffer method (0) | 2023.06.10 |
| [OpenGL] Double Buffering (0) | 2023.06.10 |
| [OpenGL] Graphic Pipeline - Programmable Pipeline (0) | 2023.06.10 |

