ㅇ 절두체의 정의
- 절두체 컬링이란? 전체 3차원 월드에서 카메라의 시야 범위에 포함된 것들만 랜덩링하는 기법 ==> 속도증가 기법
- 렌더링 파이프 라인에서 절두체 ==> 모양이 삼각뿔의 머리를 잘라 놓은 것 같다고 해서 절두체라고 한다.
- 절두체를 이루는 6개의 평면
ㅇ 평면 방정식
- 무한 평면을 정의하는 도구
- ax + by + cz + d = 0 ==> a,b,c : 평면 방향을 나타내는 법선 벡터, d : 평면과 원점간의 거리
- 세개의 점(v0,v1,v2)로 부터 벡터v'와 벡터v'' 를 만들고, 이 두벡터를 외적연산하면 직교하는 벡터 N = (a,b,c) 가 나온다.
- N = (a,b,c)가 평면 방정식의 벱선 벡터이다.
- d 값은 v0, v1, v2중의 어느 하나의 값을 평면 방정식에 대입해서 얻으면 된다. ex) ax1 + by1 + cz1 + d = 0 => d = - (ax1 + by1 + cz1 )
- D3DX는 D3DXPlaneFromPoints()함수를 이용
ㅇ 평면 방정식의 성질
- 평면 방정식을 통해서 평면에 방향을 알수 있다.
- 평면 방정식에 한 점의 좌표를 대입해서 나오는 결과값은 다음과 같은 의미를 가짐
ㅇ 절두체 컬링 원리
- 6개의 평면 방정식에 점의 좌표를 대입해서 모든 평면 방정식 결과값이 양수(+)이면 이 점은 절두체 내부에 포함된다.
- 밑 그림은 원, 근, 좌, 우평면에 대해서만 표기
- 경우 따라 6개 평면 방정식을 모두 사용하는 경우도 있고 좌우 평면과 원거리 평면 정도만 테스트해도 충분한 경우가 있다.
ㅇ 경계구 컬링 기법
- 모든 점에 대해서 평면 방정식을 테스트하기에는 부담이 된다.
ex) 캐릭터가 1000 개 폴리곤 ==> 정점은 대충 3000개가 있다고 가정, 이런 캐릭터가 100개 정도가 등장한다면 필요한 연산은?
필요한 연산 = 3000(정점) x 100(캐릭터) x 6(평면방정식)
- 메시를 전체를 감싸는 경계구를 정의하고 , 이 구가 절두체에 포함되는지를 판단한다.
- 경계구의 경우 중심점과 반지름이라는 2개의 수자로 이루어지기 때문에 빠른 판정 가능
- AABB(Axis Aligned Bounding Box) or OBB(Object Bounding Box)등의 기법도 있다.
- 평면 방정식 ax + by + cz + d = 0 에 경계의 중심점 Vc = (xc,yc,zc)의 값을 대입해서 나온 결과가 경계의 반지름 r보다 작다면 평면과 중심점의
반지름보다 작은 것이르므로 경계구에 평면이 포함되는 것이다.
ㅇ 경계 상자 컬링
ㅇ 쿼드 트리 컬링
참고 및 자세한 내용은
'[ C/ C++ 프로그래밍 ] > [ 외부 지형 ]' 카테고리의 다른 글
LOD (8) | 2010.06.28 |
---|---|
쿼드 트리 (2) | 2010.06.28 |