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));
}
사실은 매 레벨을 하나하나 다쓰것이 않이라
마지막 층만 사용하네요...
예를 들면요...
depth = 4라고 하여 쓸때...
0 층은 0 개 노드.
1 층은 4 개 노드.
2 층은 16 개 노드.
3 층은 64 개 노드.
4 층은 256 개노드.
이잔나요...그런데 위코드를 Debug 해보면요...
마직막 4층만 쓰고 1,2,3 층은 쓰지도 않네요...
저가 의문 나는 점은요...
도대채 사분트리 원리로 했는지요 않했는지요?