[osg-users] Collect all the osg::Materials from a osg::Node using osg::NodeVisitor

Trajce Nikolov NICK trajce.nikolov.nick at gmail.com
Fri Aug 26 12:48:33 PDT 2016


Hi Robert

Thanks for this great hint! Really good one!

Cheers!
Nick

On Fri, Aug 26, 2016 at 6:27 PM, Robert Osfield <robert.osfield at gmail.com>
wrote:

> On 26 August 2016 at 17:13, Trajce Nikolov NICK
> <trajce.nikolov.nick at gmail.com> wrote:
> > Ok :-) .. I will answer it too .....
> >
> > I am working with older version of osg where the Geometry was still not
> > inherited from Node so I had to apply a special case for Geodes ... Sorry
> > for the noise ;-)
>
> Glad to hear you spotted the problem.
>
> One thing that jumped out at me when I read the code was that you call
> getOrCreateStateSet(), this might simplify the code but is terribly
> inefficient for both this traversal and any subsequent use of the
> scene graph as it will force the creation of StateSet's for all nodes
> in the scene graph.  Most nodes in a scene graph should never need a
> StateSet so you certainly don't want to go around assigning empty
> ones.
>
> What a better check would be:
>
> void apply(osg::Node& node)
> {
>   if (node.getStateSet()) apply(*node.getStateSet())l
> }
>
> void apply(osg::StateSet& stateset)
> {
>         osg::StateAttribute* attr =
> stateset>getAttribute(osg::StateAttribute::MATERIAL);
>         if (attr)
>         {
>             std::cout << "ATTRIBUTE: " << attr->getName() << std::endl;
>
>             osg::Material* material = dynamic_cast<osg::Material*>(attr);
>             if (material && (material->getName() != "@RootMaterial@"))
>             {
>                 std::cout << "MATERIAL: " << material->getName() <<
> std::endl;
>             }
>         }
> }
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



-- 
trajce nikolov nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20160826/b2922d40/attachment-0002.htm>


More information about the osg-users mailing list