这篇文章主要介绍“OSG中找到特定节点的方法是什么”,在日常操作中,相信很多人在OSG中找到特定节点的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”OSG中找到特定节点的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类
[download id=“14”] 阐述了这个问题。下面是我写的一个类,找到指定名字、指定类型的节点:
class findGeoNamedNode: public osg::NodeVisitor { public: findGeoNamedNode(); findGeoNamedNode(const std::string name): osg::NodeVisitor(TRAVERSE_ALL_CHILDREN) //Set traverse mode { resultNode=NULL; this->name=name; } virtual void apply(osg::Node &searchNode) { if(searchNode.getName()==name) { osg::Geode* dynamicTry=dynamic_cast(&searchNode); if(dynamicTry) { resultNode=dynamicTry; } } traverse(searchNode); } osg::Geode* getNode() { return resultNode; } private: osg::Geode* resultNode; std::string name; };
使用这个VISITOR类只需要调用以下的一些函数
osg::Node* testNode=NULL; testNode=dynamic_cast(osgDB::readNodeFile("d:\1.3ds")); findGeoNamedNode* visitor=new findGeoNamedNode("Box01"); testNode->accept(*visitor);
用起来很方便,得益于visitor模式的正确应用。
到此,关于“OSG中找到特定节点的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。