GAIA Engine 소스를 보는 분이 있는지요?

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

GAIA Engine 소스를 보는 분이 있는지요?

Post by 비회원 »

Code: Select all


//quad_tree.h

cQuadTreeNode*
cQuadTree::findTreeNode(const cQuadTreeRect& worldByteRect)
{
   int          level, levelX, levelY;

   findTreeNodeInfo(worldByteRect, level, levelX, levelY);

   return getNodeFromLevelXY(level, levelX, levelY);  // 여기서 마지막 레벨만 쓴다.?
}

...

u32Flags
cQuadTree::addOrUpdateSceneObject(cSceneObject* newNode)
{
   cQuadTreeRect        byteRect;
   buildByteRect(newNode->worldBounds(), byteRect);

   cQuadTreeNode*       node    = findTreeNode(byteRect);

   debug_assert(node, "failed to locate quad tree node");

   return(node->addOrUpdateMember(newNode, byteRect));
}

gaia 는 사분트리로 cSceneObject를 관리 한다고 하는데요...

사실은 매 레벨을 하나하나 다쓰것이 않이라

마지막 층만 사용하네요...

예를 들면요...

depth = 4라고 하여 쓸때...

0 층은 0 개 노드.
1 층은 4 개 노드.
2 층은 16 개 노드.
3 층은 64 개 노드.
4 층은 256 개노드.

이잔나요...그런데 위코드를 Debug 해보면요...
마직막 4층만 쓰고 1,2,3 층은 쓰지도 않네요...

저가 의문 나는 점은요...
도대채 사분트리 원리로 했는지요 않했는지요?
비회원

쿼드 트리 사용한것 맞습니다

Post by 비회원 »

님께서 장면관리 부분을 다 읽어 보셨으면 알수 있을것 같은데요
여기서 사용하는 쿼드트리는 gpg2권에도 설명이 되어 있는
직접 접근 쿼드트리 방법입니다.
한 마디로 재귀 호출없이 바로 오브젝트가 위치할 쿼드트리 노드를 찾는거죠
소스 코드를 수식으로 계산해 보시면 바로 답이 나올것입니다.
당연히 재귀 호출을 안 하니 속도도 빠르겠죠
Locked