[osg-users] RenderingHint vs binNumber(RenderBinDetails)

Robert Osfield robert.osfield at gmail.com
Thu Oct 4 06:37:36 PDT 2007


There RenderBin name exist in StateSet so you can define your own bins
with their own bin names.  There are just two default ones "RenderBin"
and "DepthSortedBin".  See include/osgUtil/RenderBIn for further
details.

On 10/4/07, Paul Melis <paul at science.uva.nl> wrote:
> Robert Osfield wrote:
>
> >StateSet::setRenderingHint is merly a convenience function for setting
> >the bin number and bin name it has no function beyond this.
> >
> >
> Just chiming in here: it seems the sort-order of a renderbin is
> determined by its name. This has always bothered me a bit, as it gives
> the impression that you can assign any name, while there are only 2
> valid ones. Would it be an option to change this to a simple "sort_mode"
> variable whose value comes from an enum { SortByState, SortByDepth, ...} ?
>
> Paul
>
> >On 10/4/07, Christophe Medard <christophe.medard at oktal.fr> wrote:
> >
> >
> >>To react to what says Robert, I'm under the impression that renderingHint in
> >>fact isn't used internally, is it ?
> >>Why is there two informations in fact redundant (an order of draw),
> >>renderingHint and binNumber ?
> >>
> >>So if I'm correct, things must only be thought of in 'binNumber' terms.
> >>To react to what says Tim, I'm passing through stateset on group nodes
> >>indeed, but I'm not sure to perfecly understand well what you're saying.
> >>Let's take a over simple example, if I have the following three, what will
> >>be the order of draw ?
> >>
> >>
> >>          |
> >>                                                     --------------------------------------------
> >>                                                     |
> >>|
> >>                                         osg::Group "A"
> >>osg::Group "B"
> >>                                        [binNumber = 8]
> >>dft, so binNumber = 0
> >>                                                     |
> >>                  ------------------------------------------------
> >>                  |                                 |
> >>|
> >>        osg::Geode "C"             osg::Geode "D"             osg::Geode "E"
> >>        [binNumber = 5]           [binNumber = 1]                  |
> >>
> >>             |
> >>                                                                        -----------------------
> >>                                                                        |
> >>|
> >>                                                             osg::Drawable
> >>E0         osg::Drawable E1
> >>                                                         dft, so binNumber =
> >>0        [binNumber = 6]
> >>
> >>Is it   B/E0 - D - C - A - E1 ?
> >>
> >>
> >>Another example, closer to my current purpose test, practical to make multi
> >>pass drawings :
> >>
> >>                   |
> >>           osg::Group
> >>                   |
> >>                   ------------------------------------------
> >>                   |                         |
> >>|
> >>                   |              osg::Group "B"             osg::Group "C"
> >>                   |               [binNumber = 20]        [binNumber = 30]
> >>                   |
> >>          osg::Geode "A"
> >>         [binNumber = 15]
> >>
> >>
> >>Is it A - B - C ?
> >>
> >>
> >>I think exploring a concrete example like that clear things. Thanks
> >>
> >>
> >>
> >>----- Original Message -----
> >>From: "Tim Moore" <timoore at redhat.com>
> >>To: "OpenSceneGraph Users" <osg-users at lists.openscenegraph.org>
> >>Sent: Thursday, October 04, 2007 2:00 PM
> >>Subject: Re: [osg-users] RenderingHint vs binNumber(RenderBinDetails)
> >>
> >>
> >>
> >>>Robert didn't answer your second question; I'll have a go because I think
> >>>I understand
> >>>it.
> >>>
> >>>First of all, there aren't a fixed number of render bins. You can assign a
> >>>StateSet
> >>>to any integer, positive or negative. This turns out to be quite useful.
> >>>
> >>>When you say "set a rendering order on a group node," you mean that you've
> >>>set the
> >>>render bin in a state set in that node. There is an inheritance effect,
> >>>but it may
> >>>not be what you expect. Render bins can contain other render bins! If the
> >>>children of
> >>>your group node have state sets that also set the render bin detail, their
> >>>render bins
> >>>are stored inside the group state set's render bin, and they will be
> >>>rendered in order
> >>>when that render bin is traversed.
> >>>
> >>>This can give you unexpected results, when for example you assign a state
> >>>sets with
> >>>TRANSPARENT_BIN or OPAQUE_BIN to nodes up and down the scene graph :) On
> >>>the other
> >>>hand you can get very precise control of the ordering of drawables with
> >>>it. In
> >>>FlightGear I just used this feature to order cloud layers. The layers are
> >>>too big for
> >>>normal transparency sorting to work well, and you want to draw the cloud
> >>>layer tops
> >>>from low altitude to high and the bottoms from high to low. I used the
> >>>altitudes
> >>>of the layers as render bin numbers to get the right order:
> >>>
> >>> // Force the cloud layers into recursive bins of bin 4.
> >>> osg::StateSet *rootSet = layer_root->getOrCreateStateSet();
> >>> rootSet->setRenderBinDetails(4, "RenderBin");
> >>>
> >>>Child 0 has the bottom layers and child 1 has the tops:
> >>>
> >>>
> >>>layer_root->getChild(0)->getStateSet()->setRenderBinDetails(-(int)layer_asl,
> >>>
> >>>"RenderBin");
> >>>
> >>>layer_root->getChild(1)->getStateSet()->setRenderBinDetails((int)layer_asl,
> >>>
> >>>"RenderBin");
> >>>
> >>>I hope someone will correct me if I've gotten this all wrong!
> >>>Tim
> >>>
> >>>
> >>>
> >>_______________________________________________
> >>osg-users mailing list
> >>osg-users at lists.openscenegraph.org
> >>http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >>
> >>
> >>
> >_______________________________________________
> >osg-users mailing list
> >osg-users at lists.openscenegraph.org
> >http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> >
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



More information about the osg-users mailing list