수학/이득우의 게임 수학

절두체 컬링 (4) 원근 투영 행렬을 이용한 평면의 방정식 생성

monstro 2026. 7. 8. 10:57
728x90
반응형

- 개요

종횡비를 a, 시야각 관련 초점 거리를 d, 근평면을 n, 원평면을 f로 정의한 원근 투영 행렬

 

이전에 사용하던 방법 대신, 원근 투영 행렬을 활용하여 절두체 컬링를 더 간편하게 구현한다

뷰 공간의 점NDC 좌표까지 변환되었을 때 NDC 좌표를 구성하는 XYZ 세 축의 값

[-1, 1] 범위에 있다면 해당 점은 절두체 영역 안쪽에 있음을 의미한다

즉, 6개 평면 방정식을 사용하는 복잡한 시야 판정 방식 대신에,

대상이 되는 점원근 투영 변환하여 좌표를 변환하고

좌표의 XYZ 값이 [-1, 1] 범위에 속해있는지 단순비교하는 방식으로 개선한다

 

- 절차

1) NDC의 좌표값에 대한 절두체 컬링 + 클립 좌표에 대한 절두체 컬링

NDC의 좌표값에 대한 절두체 컬링

 

NDC의 좌표값을 각각 n(x), n(y), n(z)라고 표기할 때, 수식으로 위와 같이 표현할 수 있다

 

클립 좌표에 대한 절두체 컬링 (1)

 

위와 같은 조건식에서 변환 과정을 거꾸로 추적하여 수식을 발전시킨다

NDC 좌표클립 좌표의 마지막 차원 w로 나눈 결과값이므로 

위의 수식을 클립 좌표 (x, y, z, w)로 바꿔 쓰면 위와 같이 수식이 표현된다

 

클립 좌표에 대한 절두체 컬링 (2)

 

클립 좌표에 대한 절두체 컬링의 수식의 양변에 w를 곱하면 위와 같이 변환할 수 있다

 

2) 뷰 공간에서 클립 공간으로의 변환

원근 투영 행렬을 사용하여 클립 좌표로 변환하는 식

 

뷰 공간의 v 점에 대한 값을 (v(x), v(y), v(z), 1)로 지정한 후에 

위와 같이 원근 투영 행렬을 클립 좌표로 변환하는 식을 살펴본다

 

 

원근 투영 행렬P(row1) ~ P(row4) 까지의 4개의 행벡터로 표현하면

위의 식은 행벡터의 내적으로 변환할 수 있다

 

 

따라서 클립 공간의 각 요소행벡터의 내적으로 표현할 수 있다

 

 

1)에서의 클립 좌표에 대한 절두체 컬링 (2)의 식에 대해 위와 같이 표현할 수 있다

 

 

위에서의 식을 총 6개의 부등식으로 나누어 표현하면 위와 같이 표현할 수 있다

6개의 부등식이 모두 참이라면 뷰 공간의 점 v절두체 영역의 내부에 있음을 의미하고,

하나라도 만족하지 못한다면 절두체 영역의 외부에 있음을 의미한다

 

수식에서의 행벡터와 뷰 공간의 점의 내적 결과

 

괄호 안의 원근 투영 행렬의 행벡터를 계산한 4차원 벡터를 (a, b, c, d)라고 가정하고,

이를 뷰 공간의 점 (x, y, z, 1)과 내적한 결과는 위와 같다

 

위 수식의 법선 벡터의 정규화

 

수식의 형태는 평면의 방정식과 동일하지만, 식에서 만들어지는 법선 벡터의 크기는 1이 아니므로

위 수식을 정규화된 평면의 방정식으로 변환해야 한다

 

 

이때 위와 같은 과정을 거쳐 계산한 평면의 방향은 모두 절두체 내부를 향하게 된다

그러나 절두체 컬링을 구현할 때는 해당 점이 외부에 있는지를 파악해야 한다

따라서 부호를 반전시켜 위에서 만들어진 평면이 절두체 외부를 향하도록 설정한다

 

- 최종 결과

최종 완성된 절두체 컬링 계산식

 

최종적으로 평면 밖에 위치한 을 걸러내기 위한 수식은 위와 같다

계산식의 값이 0보다 크다절두체의 밖에 위치하므로 그리지 않도록 설정한다

728x90
반응형