这篇文章主要介绍“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; };
osg::Node* testNode=NULL; testNode=dynamic_cast(osgDB::readNodeFile("d:\1.3ds")); findGeoNamednode* visitor=new findGeoNamednode("Box01"); testNode->accept(*visitor);
用起来很方便,得益于visitor模式的正确应用。
到此,关于“OSG中找到特定节点的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程之家网站,小编会继续努力为大家带来更多实用的文章!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。