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

Reply via email to