- 개요

이전에 사용하던 방법 대신, 원근 투영 행렬을 활용하여 절두체 컬링를 더 간편하게 구현한다
뷰 공간의 점이 NDC 좌표까지 변환되었을 때 NDC 좌표를 구성하는 XYZ 세 축의 값이
[-1, 1] 범위에 있다면 해당 점은 절두체 영역 안쪽에 있음을 의미한다
즉, 6개 평면 방정식을 사용하는 복잡한 시야 판정 방식 대신에,
대상이 되는 점을 원근 투영 변환하여 좌표를 변환하고
좌표의 XYZ 값이 [-1, 1] 범위에 속해있는지 단순비교하는 방식으로 개선한다
- 절차
1) NDC의 좌표값에 대한 절두체 컬링 + 클립 좌표에 대한 절두체 컬링

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

위와 같은 조건식에서 변환 과정을 거꾸로 추적하여 수식을 발전시킨다
NDC 좌표는 클립 좌표의 마지막 차원 w로 나눈 결과값이므로
위의 수식을 클립 좌표 (x, y, z, w)로 바꿔 쓰면 위와 같이 수식이 표현된다

클립 좌표에 대한 절두체 컬링의 수식의 양변에 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보다 크다면 절두체의 밖에 위치하므로 그리지 않도록 설정한다
'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| 바운딩 볼륨 (0) | 2026.07.22 |
|---|---|
| 절두체 컬링 (3) 평면의 방정식을 활용한 절두체 표현 (0) | 2026.07.01 |
| 절두체 컬링 (2) 평면의 방정식의 정규화 (0) | 2026.06.24 |
| 절두체 컬링 (1) 평면의 방정식 (0) | 2026.06.24 |
| 원근 투영 (7) 깊이 버퍼의 시각화 (2) (0) | 2026.06.17 |