示例#1
0
void CullSystem::Cull( Frustum& frus, TreeNode<VisCell>& node, std::vector<std::list<Ptr<Renderable>>>& outRenderables)
{
	InterSectResult result = frus.InterSect(node.GetContent().GetAABB());
	if ( !result==INTERSECTOUT )
	{
		std::list<Ptr<Renderable>>::iterator iter = node.GetContent().GetRenderables().begin();
		if (result== INTERSECTIN)
		{
			for (;iter!=node.GetContent().GetRenderables().end();iter++)
			{
				RenderType rType = (*iter)->GetRenderType();
				outRenderables[rType].push_back((*iter));
			}
		}
		else
		{
			for (;iter!=node.GetContent().GetRenderables().end();iter++)
			{
				if ( frus.InterSect((*iter)->GetSubMesh()->GetVertexBuffer()->GetBBox())!= INTERSECTOUT)
				{
					RenderType rType = (*iter)->GetRenderType();
					outRenderables[rType].push_back((*iter));
				}
			}
		}
		for (int i = 0 ;i<(int)node.GetChildren().size();i++)
		{
			Cull( frus,*node.GetChildren()[i],outRenderables );
		}
		
	}
	
}