본문 바로가기

DX

뒷면 제거

Back-face Culling

 

 

 

뒷면 제거 특정 정점을 그리지 않는 것으로 gpu 리소스 및 연산 최적화 기법

 

카메라의 방향 ( 눈의 방향 ) 에 의해 뒷부분이 안보인다면 그리지 않는 기법

 

DX 기준 삼각형 정점의 순서가 시계방향이라면 그리고 반시계 방향이라면 그리지 않는 것이 가장 쉬운 뒷면 제거 방법이다.

 

외적을 이용해서 정점 3점이 >0 이라면 화면 좌표계 기준 z 좌표의 양수 방향과 같아 렌더링한다.

<0 이라면 반대 음수 방향으로 해당 폴리곤을 렌더링하지 않는다.

 

 

 

3 정점을 외적 시에 z 값이 음수라면 밑의 렌더링 코드를 진행하지 않는다.

 const float area = EdgeFunction(v0, v1, v2);

 if (this->cullBackface && area < 0.f)
     return;

 

색을 결정할 때 외적의 값이 음수이니 area(음수 값) 을 이용해 다시 양수로 바꾼다.

const vec2 point = vec2(float(i), float(j));
const float alpha0 = EdgeFunction(v1, v2, point) / area;
const float alpha1 = EdgeFunction(v2, v0, point) / area;
const float alpha2 = EdgeFunction(v0, v1, point) / area;

 

 

'DX' 카테고리의 다른 글

쉐이딩  (0) 2025.05.01
원근 투영 실습  (0) 2025.04.30
쉐이더 개념  (0) 2025.04.30
깊이 버퍼  (0) 2025.04.30
그림자 표현  (0) 2025.03.31