개발하는 리프터 꽃게맨입니다.

[그래픽스] 백 페이스 컬링 본문

컴퓨터 그래픽스

[그래픽스] 백 페이스 컬링

파워꽃게맨 2024. 8. 11. 16:06

 

12개의 삼각형으로 이루어진 육면체를 그려보았습니다.

3D 물체에는 보이는 면과 안보이는 면 2가지가 존재합니다.

 

보이는 면을 전면

보이지 않는 면을 후면이라고 칭합니다.

 

전면과 후면을 판단해서 후면을 그리지 않는다면, 렌더링 성능이 더욱 향상될 것 입니다.

이와같이 후면을 그리지 않는 작업을 백페이스 컬링이라고 합니다.

 

 

반시계 방향으로 정의된 삼각형이 있다고 가정합니다.

 

뷰행렬과 모델링 행렬을 이용해서 만들어진 최종적인 좌표의 경우의 수는 다음과 같습니다.

 

 

 

첫번째로, 변환된 정점을 연결했을 때, 반시계방향으로 그려질 때,

두번째로, 변환된 정점을 연결했을 때, 시계방향으로 그려질 때

 

이때 반시계방향으로 정의된 삼각형만 그려지도록 하면 백페이스 컬링을 구현할 수 있습니다.

 

 

삼각뿔의 백 페이스 컬링 과정을 간단하게 담아봤습니다.

 

그러면 알고리즘을 짜봅시다.

 

만약 

점이 P1->P3->P2 반시계방향 순서로 정의된다고 해봅시다.

그러면 P1->P3 와 P3->P2 의 외적값과 카메라의 시선과의 내적은 음수를 보일겁니다.

 

아니라 만약, P1->P2->P3 시계방향 순서로 정의된다고 하면,

P1->P2, P2->P3 의 외적값과 카메라의 시선과의 내적은 양수를 보일겁니다.

 

즉, 백페이스 테스트 결과가 0이거나 양수라면, 후면이기 때문에 그리지 않으면되고

테스트 결과가 음수인 경우에만 삼각형을 그리면 됩니다.

 

 

만약 후면이면 true를 리턴하고

 

 

정점을 처리하는 코드에 살짝 끼워넣어줍니다.

 

 

이제 정점을 정의하는 순서도 조금 신경써야 합니다.

 

기저벡터의 양수부분 즉, 전면, 오른쪽면, 윗면을 반시계방향으로 설정하고

기저벡터의 음수부분 즉, 후면, 왼쪽면, 아랫면을 시계방향으로 설정합니다.

 

 


성능이 10% 가량 상승했습니다.

 

 

잘되네요!