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 ); } } }