Use Irrlicht culling function

This commit is contained in:
vlj 2014-09-03 01:49:39 +02:00
parent 13e1a40b7b
commit 0bc8befc57

View File

@ -352,19 +352,20 @@ parseSceneManager(core::list<scene::ISceneNode*> List, std::vector<scene::IScene
if (!(*I)->isVisible()) if (!(*I)->isVisible())
continue; continue;
(*I)->updateAbsolutePosition(); (*I)->updateAbsolutePosition();
core::aabbox3d<f32> tbox = (*I)->getBoundingBox();
(*I)->getAbsoluteTransformation().transformBoxEx(tbox);
const scene::ICameraSceneNode* cam = irr_driver->getSceneManager()->getActiveCamera(); const scene::ICameraSceneNode* cam = irr_driver->getSceneManager()->getActiveCamera();
bool IsCulledForSolid = !(tbox.intersectsWithBox(cam->getViewFrustum()->getBoundingBox())); bool IsCulledForSolid = irr_driver->getSceneManager()->isCulled(*I);
bool IsCulledForShadow[4]; bool IsCulledForShadow[4];
bool IsCulledForRSM = false;
for (unsigned i = 0; i < 4; ++i) for (unsigned i = 0; i < 4; ++i)
{ {
const scene::ICameraSceneNode* cam = shadowCams[i]; scene::ICameraSceneNode* cam = shadowCams[i];
IsCulledForShadow[i] = !(tbox.intersectsWithBox(cam->getViewFrustum()->getBoundingBox())); irr_driver->getSceneManager()->setActiveCamera(cam);
IsCulledForShadow[i] = irr_driver->getSceneManager()->isCulled(*I);
} }
irr_driver->getSceneManager()->setActiveCamera(RSM_cam);
bool IsCulledForRSM = irr_driver->getSceneManager()->isCulled(*I);
if (IsCulledForSolid && IsCulledForShadow[0] && IsCulledForShadow[1] && IsCulledForShadow[2] && IsCulledForShadow[3]) if (IsCulledForSolid && IsCulledForShadow[0] && IsCulledForShadow[1] && IsCulledForShadow[2] && IsCulledForShadow[3])
continue; continue;
@ -378,7 +379,7 @@ parseSceneManager(core::list<scene::ISceneNode*> List, std::vector<scene::IScene
} }
} }
handleSTKCommon(*I, ImmediateDraw, IsCulledForSolid, IsCulledForShadow, false); handleSTKCommon(*I, ImmediateDraw, IsCulledForSolid, IsCulledForShadow, IsCulledForRSM);
parseSceneManager((*I)->getChildren(), ImmediateDraw, shadowCams, RSM_cam); parseSceneManager((*I)->getChildren(), ImmediateDraw, shadowCams, RSM_cam);
} }