I can't think of right logic for this:
const std::size_t max_level = 5; // everything above 5 is to slow
void OcTree::create(std::shared_ptr<OcTree> _tree, std::size_t curr_level)
{
std::size_t cnt = 0;
const auto& nodes = pSmgr->getNodes();
for(std::size_t i = 0; i < nodes.size(); ++i)
{
bool result = _tree->bbox.intersects(nodes[i]->getBBox());
if(result)
{
_tree->vNode.push_back(nodes[i]); // vNodes is vector of objects
++cnt;
}
}
if(cnt <= 1 || curr_level > max_level)
{
_tree->leaf = true;
return;
}
else
{
_tree->vNode.clear();
for(std::size_t i = 0; i < 8; ++i)
{
child[i] = std::shared_ptr<OcTree>(new OcTree(_tree->pSmgr, subdivide(_tree, i)));
create(child[i], curr_level + 1);
}
}
}
If you need more info please tell.