Hi Per, Great news that you've been able to find a way. Quite a simple change in the end. The trick is knowing exactly what bits to tweak... even I didn't know this in this instance!
Robert. On Tue, Mar 3, 2009 at 7:59 PM, Per Fahlberg <[email protected]> wrote: > Hi, > > For the record I've found a way to get things working the way I want it, by > changing the culling mask of the culling set at the back of the projection > culling stack, small feature culling can now be both enabled and disabled > for subgraphs. The code for my callback looks like this now (the code is for > enabling small feature culling, change the "|" to "& ~" to disable small > feature culling): > > virtual void operator() (osg::Node *node, osg::NodeVisitor *nv) > { > osgUtil::CullVisitor *cv = dynamic_cast<osgUtil::CullVisitor*>(nv); > if(cv){ > osg::CullStack::CullingStack &projCullStack = > cv->getProjectionCullingStack(); > if(!projCullStack.empty()){ > osg::CullingSet& cullingSet = projCullStack.back(); > osg::CullingSet::Mask cullingSetMask = cullingSet.getCullingMask(); > cullingSet.setCullingMask(cullingSetMask | > osg::CullSettings::SMALL_FEATURE_CULLING); > > traverse(node,nv); > cullingSet.setCullingMask(cullingSetMask); > }else > // Do not really now what to do if it is empty > traverse(node,nv); > }else > traverse(node,nv); > } > > Regards, > Per > > Robert Osfield wrote: >> >> Hi Per, >> >> Unfortunately this is too a niche a part of the OSG to provide an >> answer off the top of my head. >> >> Rober. >> >> On Mon, Mar 2, 2009 at 8:01 PM, Per Fahlberg <[email protected]> wrote: >> >>> >>> Hi Robert, >>> >>> Ok, so if I change the mask of the current CullingSet in a cull callback, >>> should it only affect the culling of the node that the callback is >>> attached >>> to and not the nodes below in the scenegraph? >>> >>> If I change the culling mode of the cull visitor in a cull callback, >>> should >>> it affect all nodes traversed after the node with the callback? This was >>> what I thought, but it didn't work for disabling or enabling small >>> feature >>> culling at least. From my debugging it seams like changing the culling >>> mode >>> of the cullvisitor during traversal doesn't have any affect on culling, >>> i.e. >>> it doesn't change the mask of any culling sets used after the culling >>> mode >>> is changed. I tried to fix this with the patch earlier that you rejected. >>> >>> Is there any other way to change the culling mode from a cull callback so >>> that it affects the culling of nodes below the node with the cull >>> callback? >>> >>> Regrads, >>> Per >>> >>> Robert Osfield wrote: >>> >>>> >>>> Hi Per, >>>> >>>> I'm a bit rusty on this topic, too many topics coming flying by each >>>> day that niche stuff drops out of focus quite quickly... >>>> >>>> Something I can answer right away is to to explain the relationship >>>> between the CullingSet CullingMode and CullingMask. The Mode is the >>>> base mode that specifies what the overall mode should be, while the >>>> CullingMask is the current active subset of this mode, that handles >>>> the fact that different faces of the view frustum get disabled when >>>> subgraphs are completely inside the faces of the view frustum. At >>>> least that what I can recall/work out from a brief look through the >>>> code. >>>> >>>> Robert. >>>> >>>> On Fri, Feb 27, 2009 at 9:16 PM, Per Fahlberg <[email protected]> >>>> wrote: >>>> >>>> >>>>> >>>>> A correction, my earlier proposed fix also solves this problem if the >>>>> cull >>>>> callback is changed to also modify the culling mode of the cull >>>>> visitor, >>>>> so >>>>> that the callback reads something like this: >>>>> ... >>>>> osg::CullSettings::CullingMode cullVisitorCullingMode = >>>>> cv->getCullingMode(); >>>>> osg::CullingSet &cs = cv->getCurrentCullingSet(); >>>>> osg::CullingSet::Mask cullingSetMask = cs.getCullingMask(); >>>>> >>>>> cv->setCullingMode(cullVisitorCullingMode | >>>>> osg::CullSettings::SMALL_FEATURE_CULLING); >>>>> cs.setCullingMask(cullingSetMask | >>>>> osg::CullSettings::SMALL_FEATURE_CULLING); >>>>> >>>>> traverse(node,nv); >>>>> >>>>> cs.setCullingMask(cullingSetMask); >>>>> cv->setCullingMode(cullVisitorCullingMode); >>>>> ... >>>>> >>>>> I'm a bit confused about all the culling masks/modes and which ones to >>>>> modify and how they are propagated when the cull visitor traverses the >>>>> scenegraph. >>>>> >>>>> Regards, >>>>> Per >>>>> >>>>> Per Fahlberg wrote: >>>>> >>>>> >>>>>> >>>>>> Hi Robert, >>>>>> >>>>>> I've been busy with other work and only now been able to try your >>>>>> proposed >>>>>> change and found that it doesn't quite work as expected. When I run >>>>>> the >>>>>> attached modified osgscribe example with the attached box-sphere.osg >>>>>> model >>>>>> the small feature culling only culls the entire model, i.e. both the >>>>>> box >>>>>> and >>>>>> the sphere together not separately as I was expecting. If small >>>>>> feature >>>>>> culling is turned on on the camera the box and sphere is culled by the >>>>>> small >>>>>> feature culling individually. I would like to enable small feature >>>>>> culling >>>>>> on quite large subgraphs and it seams that it only turns on small >>>>>> feature >>>>>> culling on the node with the callback not on the nodes bellow it. This >>>>>> feels >>>>>> very similar to the problem I was originally trying to solve, where >>>>>> the >>>>>> disabling of small feature culling wasn't propagated downwards but the >>>>>> fix I >>>>>> submitted then didn't fix this problem. Do I need to add the callback >>>>>> to >>>>>> all >>>>>> nodes that I wish to be culled by small feature culling or is this a >>>>>> problem >>>>>> in osg? >>>>>> >>>>>> Regards, >>>>>> Per >>>>>> >>>>>> Robert Osfield wrote: >>>>>> >>>>>> >>>>>>> >>>>>>> Hi Per, >>>>>>> >>>>>>> On Wed, Jan 28, 2009 at 8:55 PM, Per Fahlberg <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> I don't really understand how this is not a bug since it is possible >>>>>>>> to >>>>>>>> switch small feature culling on for a subgraph but not switch it >>>>>>>> off? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> The scene graph itself doesn't support switching off small feature >>>>>>> culling in a subgraph. The way you tried to add this back in was >>>>>>> inappropriate, so didn't work. >>>>>>> >>>>>>> My proposed change to just enable small feature culling for subgraphs >>>>>>> that needn't it didn't require disabling culling for subgraphs so >>>>>>> would be more efficient as culling would never be complete disabled. >>>>>>> Disabling culling for a deeply embedded subgraph causes all the >>>>>>> parents culling to be disabled as well, which prevents early >>>>>>> termination of traversal that would otherwise be done so I wouldn't >>>>>>> recommend it. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> I will however scratch my head and try to figure out if I can >>>>>>>> somehow >>>>>>>> easily >>>>>>>> invert the enabling and disabling of small feature culling in my >>>>>>>> program. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> You could just use LOD's, this is effectively all that small feature >>>>>>> culling simulates. >>>>>>> >>>>>>> Alternatively you could just set the bounding box of the drawables of >>>>>>> interest to an artificially large size to prevent the small feature >>>>>>> culling from effecting them. >>>>>>> >>>>>>> Robert. >>>>>>> _______________________________________________ >>>>>>> osg-users mailing list >>>>>>> [email protected] >>>>>>> >>>>>>> >>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------ >>>>>> >>>>>> _______________________________________________ >>>>>> osg-users mailing list >>>>>> [email protected] >>>>>> >>>>>> >>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> osg-users mailing list >>>>> [email protected] >>>>> >>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>>> >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> osg-users mailing list >>>> [email protected] >>>> >>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>> >>>> >>>> >>> >>> _______________________________________________ >>> osg-users mailing list >>> [email protected] >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> _______________________________________________ >> osg-users mailing list >> [email protected] >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

