template< class Type >
int BSPTree<Type>::Division::Search(std::list<const Division*>* out, const Frustum& volume, const Vector& eyePos) const
{
if (plane != 0)
{
bool checkGreater, checkLesser;
int found = 0;
if (!blocksView)
{
Frustum::Direction t = volume.isInside(*plane);
if (t == Frustum::DIR_Inside)
{
checkGreater = true;
checkLesser = true;
}
else if (t == Frustum::DIR_Behind)
{
checkGreater = false;
checkLesser = true;
}
else if (t == Frustum::DIR_Front)
{
checkGreater = true;
checkLesser = false;
}
}
else
{
Plane::Direction t = plane->pointInFront(eyePos);
if (t == Plane::DIR_Equal)
{
checkGreater = true;
checkLesser = true;
}
else if (t == Plane::DIR_Behind)
{
checkGreater = false;
checkLesser = true;
}
else if (t == Plane::DIR_Front)
{
checkGreater = true;
checkLesser = false;
}
}
if (checkGreater)
if (Greater != 0)
found += Greater->Search(out, volume, eyePos);
if (checkLesser)
if (Lesser != 0)
found += Lesser->Search(out, volume, eyePos);
return found;
}
else if (borders != 0)
{
if (volume.isInside(*borders, location, scale))
{
out->push_back(this);
return 1;
}
}
return 0;
}