void Octree::GenerateChildren(std::unique_ptr<Partition>& parent) { if(parent->GetLevel() != MAX_LEVEL) { // Center/size of child partition is half of parent const float size = parent->GetSize() * 0.5f; const D3DXVECTOR3 offset((parent->GetMinBounds() + parent->GetMaxBounds()) * 0.5f); parent->AddChild(size, D3DXVECTOR3(-size, size, -size) + offset); parent->AddChild(size, D3DXVECTOR3(0.0, size, -size) + offset); parent->AddChild(size, D3DXVECTOR3(-size, 0.0, -size) + offset); parent->AddChild(size, D3DXVECTOR3(0.0, 0.0, -size) + offset); parent->AddChild(size, D3DXVECTOR3(-size, size, 0.0) + offset); parent->AddChild(size, D3DXVECTOR3(0.0, size, 0.0) + offset); parent->AddChild(size, D3DXVECTOR3(-size, 0.0, 0.0) + offset); parent->AddChild(size, D3DXVECTOR3(0.0, 0.0, 0.0) + offset); parent->ModifyChildren(std::bind( &Octree::GenerateChildren, this, std::placeholders::_1)); } }