[osg-users] Capturing all visible nodes

Julien Valentin julienvalentin51 at gmail.com
Fri Jan 18 17:34:58 PST 2019


Hi
You have to setup cullcallbacks of your drawables 

Code:
drawable->setCullCallback(new MyCullCallback);


it then will be called during osgViewer cull traversal...
Cheers



ijwolf8 wrote:
> Hello all,
> 
> I've looked everywhere for this, and have tried to piece together examples I've found online, but I am having no luck accomplishing what conceptually seems like a very simple task.
> 
> The overall goal is to take all nodes within view and send them to UV space for texture mapping. The only part I can't get down is the first part-capturing all visible nodes within view.
> 
> I've read through several posts on this site (removed links because "You must have 2 posts before you can post URL's/Links."), but they all end without a real solution. The last one in particular just confuses me:
> 
> "Just write a NodeVisitor that has it's traversal mode set to TRAVERSE_ALL_CHILDREN i.e. ..."
> 
> But that wasn't the question? It was to get all visible nodes, not ALL nodes?
> 
> Either way, I've attempted to implement these codes and more, but I just don't understand the structure of node visitors and callbacks enough to make progress. For example, one of the posts contained this code that seemed very promising:
> 
> 
> Code:
> 
> class MyCullCallback : public osg::NodeCallback 
> { 
> 
> void operator()(osg::Node* node, osg::NodeVisitor* nv) 
> { 
> // osgUtil::CullVisitor* cv = nv->asCullVisitor(); 
> osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(nv); 
> if (!cv->isCulled(*node)) 
> { 
> std::cout << "Node is visible: "<< endl; 
> } 
> 
> if ( cv->isCulled(*node)) 
> { 
> 
> std::cout << "Node is NOT visible: "<<endl; 
> 
> } 
> traverse(node,nv); 
> } 
> }; 
> 
> 
> 
> 
> I tried the following code along with it, but it just throws an error and freezes.
> 
> 
> Code:
> 
> 			MyCullCallback* cb = new MyCullCallback();
> 			osg::NodeVisitor* nv = new osg::NodeVisitor();
> 			//cb->operator()(myGroup, nv);
> 
> 
> 
> 
> So how exactly am I supposed to utilize it? Do I have to initialize NodeVisitor with an initial node? If so which do I chose?
> 
> If there's anymore information I can give please let me know. I've researched all sorts of frustum culling, node visitors, and manually capturing visible nodes with ray tracing, but I figure there has got to be a simpler way to do this!
> 
> Thanks for any and all help,
> 
> Isaac


------------------------
Twirling twirling twirling toward freedom

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=75509#75509







More information about the osg-users mailing list