Code: Select all
void OctreeNode::_addToRenderQueue( Camera* cam, RenderQueue *queue, bool onlyShadowCasters, VisibleObjectsBoundsInfo* visibleBounds )
{
ObjectMap::iterator mit = mObjectsByName.begin();
while ( mit != mObjectsByName.end() )
{
MovableObject * mo = mit->second;
mo->_notifyCurrentCamera(cam);
if ( mo->isVisible() && (!onlyShadowCasters || mo->getCastShadows()))
{
mo -> _updateRenderQueue( queue );
if (visibleBounds)
{
// HERE
visibleBounds->merge(mo->getWorldBoundingBox(true),
mo->getWorldBoundingSphere(true), cam,
queue->getQueueGroup(mo->getRenderQueueGroup())->getShadowsEnabled());
}
}
++mit;
}
}I propose there should be a method like the MovableObject::_updateRenderQueue(RenderQueue), for example MovableObject::_updateVisibleBounds(VisibleObjectsBoundsInfo), which expands the bounds as needed, checking whether the materials receive shadows. This approach can even consider that not all sub entities need to receive shadows.