수학/이득우의 게임 수학 - 실습 예제

로컬 좌표를 사용한 구 바운딩 볼륨 생성

monstro 2026. 7. 22. 19:23
728x90
반응형

- 개요

Render3D 함수의 로직 일부

 

절두체 컬링에 사용하는 구 바운딩 볼륨로컬 좌표를 기준으로 생성되는 데이터

그러나 절두체 컬링뷰 공간에서 수행된다

따라서 이전에 수동으로 로컬 좌표로 저장된 구 바운딩 볼륨뷰 공간으로 변환하여 절두체 컬링을 진행하였다

하지만 매번 로컬 공간에 저장된 바운딩 볼륨을 뷰 공간으로 변환하는 작업은 다소 불편하다

따라서 이를 개선하여 로컬 공간의 데이터로 바로 절두체 컬링을 진행하도록 수정한다

 

- 개선 : 로컬 공간의 데이터를 활용한 바운딩 볼륨의 생성

원근 투영 행렬을 사용한 평면의 방정식

 

뷰 공간에서의 영역 판정을 위해 원근 투영 행렬을 사용하여 평면의 방정식을 생성할 수 있었다

이때 사용한 원근 투영 행렬P로, 클립 공간의 좌표V(clip)으로, 뷰 공간의 좌표V(view)로 표시하면

위와 같이 수식을 정리할 수 있다

 

위 식에서 뷰 행렬과 모델링 행렬을 사용한 복합 행렬과 로컬 공간의 좌표를 사용한 버전

 

이때 P 행렬을 구성하는 행벡터를 사용하여 각 평면의 방정식을 추출할 수 있다

이때 뷰 공간의 좌표가 아닌 로컬 공간의 좌표를 의미하는 V(local)을 사용한다면

모델링 행렬을 의미하는 M 행렬과 뷰 행렬을 의미하는 V 행렬을 사용하여 위와 같이 수식을 수정할 수 있다

위의 식에서 세 개의 행렬을 곱한 PVM 행렬은 4X4 행렬이므로 행벡터를 사용하여 평면의 방정식을 생성할 수 있다

평면의 방정식을 통해 만들어진 평면은 로컬 공간의 평면이 되므로 

따라서 로컬 공간의 바운딩 볼륨 정보절두체 컬링을 수행하는 것이 가능하다

 

- 예제

Render3D 함수의 로직 일부

 

렌더링을 수행하는 Render3D 함수의 로직을 위와 같이 구성한다

원근 투영 행렬뷰 행렬이 결합된 pvMatrix 로컬 변수에 모델링 행렬을 곱하여

최종 행렬을 의미하는 finalMatrix 로컬 변수를 생성한다

finalMatrix 로컬 변수로부터 Transpose 함수를 호출하여 전치시킨 후에 행벡터에 접근한다

전치된 행렬로부터 절두체를 구성하는 6개의 평면을 생성한다

생성한 절두체의 평면으로부터 CheckBound 함수를 호출하고 구 바운딩 볼륨을 넘겨주어 절두체 컬링을 수행한다

 

- 최종 실행 결과

728x90
반응형