Exemple #1
0
	void QuadTreeNode::Partition()
	{
		assert(!m_hasChildren);

		const Vec2f &halfRegionDims(m_region.GetHalfDims());
		const Vec2f &regionLowerBound(m_region.GetLowerBound());
		const Vec2f &regionCenter(m_region.GetCenter());

		int nextLowerLevel = m_level - 1;

		m_children = new std::vector<std::vector<QuadTreeNode>>();

		// Create the children nodes
		(*m_children).resize(2);

		for(int x = 0; x < 2; x++)
		{
			(*m_children)[x].resize(2);

			for(int y = 0; y < 2; y++)
			{
				Vec2f offset(x * halfRegionDims.x, y * halfRegionDims.y);

				AABB childAABB(regionLowerBound + offset, regionCenter + offset);

				childAABB.SetHalfDims(childAABB.GetHalfDims() * m_oversizeMultiplier);

				// Scale up AABB by the oversize multiplier

				(*m_children)[x][y].Create(childAABB, nextLowerLevel, this, m_pQuadTree);
			}
		}

		m_hasChildren = true;
	}
PotreeWriterNode *PotreeWriterNode::createChild(int childIndex ){
	stringstream childName;
	childName << name << childIndex;
	AABB cAABB = childAABB(aabb, childIndex);
	PotreeWriterNode *child = new PotreeWriterNode(potreeWriter, childName.str(), path, cAABB, spacing / 2.0f, level+1, maxLevel, scale);
	children[childIndex] = child;

	return child;
}