+ ASSERT(node.valid() && "invalid node passed");
+
+ node->getAll(insertables);
+
+ for (unsigned i = 0; i < mTree.children(node); ++i)
+ {
+ NodeP child = mTree.child(node, i);
+ ASSERT(child.valid() && "expected valid child node");
+
+ getAll(insertables, child);
+ }
+ }
+
+ void getIfVisible(std::list<InsertableP>& insertables,
+ const Frustum& frustum, NodeP node) const
+ {
+ ASSERT(node.valid() && "invalid node passed");
+
+ // try to cull by sphere
+ Frustum::Collision collision = frustum.contains(node->getSphere());
+ if (collision == Frustum::OUTSIDE) return;
+
+ // try to cull by aabb
+ collision = frustum.contains(node->getAabb());
+ if (collision == Frustum::OUTSIDE) return;
+
+
+ if (collision == Frustum::INSIDE)
+ {
+ node->getAll(insertables);
+ }
+ else // collision == Frustum::INTERSECT