bsp 트리 ( bsp tree ) - 전체 테스트 코드입니다.
Vector4* pList[1000];
Vector4* pListAlloc = NULL;
int iListCount = 0;
int iLoopCount = 0;
int iCamCullCount = 0;
void Z_Test()
{
#define NUM 5
//테스트용 배열값 생성
Vector4* vP = new Vector4[NUM];
for( int i=0; i<NUM; i++ )
{
vP[i] = Vector4( i*10, 5, i*10, 0 );
}
if( pListAlloc )
qDeleteA( pListAlloc );
pListAlloc = new Vector4[1000];
//Top 할당
BSPTree* pT = new BSPTree();
//트리 생성
Make_Tree( pT, vP, NUM );
//
iListCount = 0;
iLoopCount = 0;
iCamCullCount = 0;
//bsp 트리 검색 테스트
int iIdx = NUM/2;
Collect_BSP( pT, vP[iIdx], 0.1f );
//bsp 트리 검색 테스트
//Cam_Collect_Leaf( pT, QManagerActor::I()->_mpCamera );
//Collect_BSP 을 호출하면
//검색된 값은 pListAlloc 리스트에, iListCount 갯수 만큼 저장됩니다.
//렌더링시, 카메라 테스트 일때만 sort
if( iListCount > 0 )
{
qsort( pListAlloc, iListCount, sizeof(Vector4), _sortDist );
}
Delete_BSP( pT );
qDeleteA( vP );
qDeleteA( pListAlloc );
}
어차피, 테스트 이므로,
심플하게 ^^,
루프 돌리면서,
생성, 삭제를 지속적으로 반복 했습니다만,
뭐, 다들 아시겠지만,
실제로는 이렇게 하면 프레임 저하가 큽니다,
1. bsp 트리 생성
Make_Tree()
영역 분할,
이전에 설명된 코드에서는 빠져 있지만,
트리의 영역의 크기도 저장됩니다.
2. bsp 트리 제거
Delete_Tree()
3. bsp 트리 검색
Collect_BSP()
는
위치 검색을 테스트 하기 위해 추가한 함수입니다.
포지션 하나를 주고,
구성된 트리상에서,
그 포지션에 가장 가까운 값을 찾아보았습니다,
배열의 값이 매우 커지더라도, (10000 ~ 100000 )
거의 10번 이내의 트리 검색만으로 값을 찾을 수 있습니다,
4. bsp 트리 검색
Cam_Collect_Leaf()
는
카메라 가시성 테스트를 위해 추가하였습니다.
테스트 할때는 실제 모델 파일을 불러와서 화면에
직접 draw 하면서 테스트 해본 것입니다.
위 코드에서는 렌더링 부분은 빠져 있습니다.
sorting 은 렌더링을 위해 추가한 것입니다.
GameGems5 권에서는 sort 없이
tree 구조 만으로도 카메라에 정렬된 값이 출력되는 것 같았습니다만,
제가 구성한 코드에서는 카메라 거리에 따른 정렬이 되지 않기 때문에,
추가적으로 sort 해주어야 합니다.
이 부분은 좀더 책의 코드를 살펴 볼 생각입니다.
현재 작성된
Cam_Collect_Leaf()
는
퍼포먼스가 좋지 못합니다.
카메라 거리값에 대한 전처리와, 좀더 단순화시킨 계산으로
보완이 필요합니다.
'프로그래밍' 카테고리의 다른 글
BSP 트리 ( bsp tree ) - 06 (0) | 2014.04.21 |
---|---|
BSP 트리 ( bsp tree ) - 05 (0) | 2014.04.21 |
BSP 트리 ( bsp tree ) - 03 (2) | 2014.04.21 |
BSP 트리 ( bsp tree ) - 01 (0) | 2014.04.20 |
BSP 트리 ( bsp tree ) - 02 (0) | 2014.04.20 |