//============================================================================== void SceneDebugDrawer::draw(FrustumComponent& fr) const { const Frustum& fs = fr.getFrustum(); m_dbg->setColor(Vec3(1.0, 1.0, 0.0)); CollisionDebugDrawer coldraw(m_dbg); fs.accept(coldraw); }
void SectorGroup::findVisibleSectors(const FrustumComponent& frc, const SoftwareRasterizer* r, List<const Sector*>& visibleSectors, U& spatialsCount) const { // Find the sector the eye is in Sphere eye(frc.getFrustumOrigin(), frc.getFrustum().getNear()); Bool eyeInsideASector = false; Sector* sectorEyeIsInside = nullptr; iterateSceneSectors(*m_scene, [&](Sector& sector) -> Bool { Bool collide = testCollisionShapes(eye, sector.m_aabb); if(collide) { collide = testCollisionShapes(eye, sector.getBoundingShape()); } if(collide) { eyeInsideASector = true; sectorEyeIsInside = §or; return true; } return false; }); if(!eyeInsideASector) { // eye outside all sectors, find those the frustum collides iterateSceneSectors(*m_scene, [&](Sector& sector) -> Bool { if(frc.insideFrustum(sector.getBoundingShape())) { findVisibleSectorsInternal(frc, sector, r, visibleSectors, spatialsCount); } return false; }); } else { // eye inside a sector findVisibleSectorsInternal(frc, *sectorEyeIsInside, r, visibleSectors, spatialsCount); } }