查看: 1144|回复: 4

场景中遍历节点并添加节点问题

[复制链接]

该用户从未签到

发表于 2013-4-22 20:48:44 | 显示全部楼层 |阅读模式
本帖最后由 1162810317 于 2013-4-22 21:03 编辑
  1. class FillEmptyNode :
  2.         public osg::NodeVisitor
  3. {
  4. public:
  5.         int count;
  6.         //所有的顶点  
  7.         osg::ref_ptr<osg::Node>  childrenNode;
  8.         //构造函数,选择向下遍历全孩子的方式
  9.         FillEmptyNode() : osg::NodeVisitor(osg::NodeVisitor ::TRAVERSE_ALL_CHILDREN)
  10.         {
  11.                 childrenNode = new osg::Node;
  12.                 count=0;
  13.         //        Modelinfoconfig = new Config("MTNode.ini");
  14.                 osg::ref_ptr<osg::Node> songshu=osgDB::readNodeFile("songshu.ive");
  15.                 osg::ref_ptr<osg::Node> wutong=osgDB::readNodeFile("wutong.ive");
  16.                 osg::ref_ptr<osg::Node> yushu= osgDB::readNodeFile("yushu.ive");
  17.                 osg::ref_ptr<osg::Node> liushu= osgDB::readNodeFile("liushu.ive");
  18.                 lodsong = new osg::LOD ;
  19.                 lodsong->addChild(songshu,0,500);
  20.                 lodyu = new osg::LOD ;
  21.                 lodyu->addChild(yushu,0,500);
  22.                 lodliu = new osg::LOD ;
  23.                 lodliu->addChild(liushu,0,500);
  24.                 lodwu = new osg::LOD ;
  25.                 lodwu->addChild(wutong,0,500);
  26.                 lodsushe = new osg::LOD ;
  27.                 lodsushe->addChild(osgDB::readNodeFile("sushe.ive"),0,500);
  28.                 map.insert(pair<std::string,osg::ref_ptr<osg::LOD>>("liush",lodliu));
  29.                 map.insert(pair<std::string,osg::ref_ptr<osg::LOD>>("songs",lodsong));
  30.                 map.insert(pair<std::string,osg::ref_ptr<osg::LOD>>("wuton",lodwu));
  31.                 map.insert(pair<std::string,osg::ref_ptr<osg::LOD>>("yushu",lodyu));
  32.                 map.insert(pair<std::string,osg::ref_ptr<osg::LOD>>("sushe",lodsushe));

  33.         }
  34.         osg::Matrix  getMatrix(){return wMatrix;}
  35.         //apply
  36.         void apply( osg::Transform & node );

  37.         ~FillEmptyNode(void);
  38.         std::map< std::string, int> modelmap;
  39.         std::map<std::string,osg::ref_ptr<osg::LOD>> map ;
  40.         std::map<std::string,osg::ref_ptr<osg::LOD>>::iterator ite;
  41.         //const std::string configfile = "MTNode.ini";
  42.         Config * Modelinfoconfig ;
  43. public:
  44.         osg::ref_ptr<osg::LOD> lodsong;
  45.         osg::ref_ptr<osg::LOD> lodyu;
  46.         osg::ref_ptr<osg::LOD> lodliu;
  47.         osg::ref_ptr<osg::LOD> lodwu;
  48.         osg::ref_ptr<osg::LOD> lodsushe;
  49. private:
  50.         osg::Matrix wMatrix;

  51. };
  52. void FillEmptyNode::apply( osg::Transform & node ) //我试过osg::node ,也没用,,不知道有什么区别没?
  53. {
  54.        
  55.         {               
  56.                 std::string str = node.getName();
  57.                 std::string strf;
  58.                
  59.                 if(str!=""&&str.length()<10)
  60.                 {
  61.                         strf= str.substr(0,5);               
  62.                         count++;
  63.                         ite=map.find(strf);
  64.                         if (ite!=map.end())
  65.                         {
  66.                                 node.asGroup()->addChild(ite->second);
  67.                         }                       
  68.                 }
  69.         }
  70.         traverse( node);
  71. }
复制代码
QQ截图20130422205636.jpg 我在地形优化中添加了MT节点。然后读取这个地形,想通过遍历节点给MT挂上模型,,,但不知道为什么程序运行后出错,请大神们指教!
谢谢!

该用户从未签到

发表于 2013-4-23 08:09:54 | 显示全部楼层
您给出这个截图完全毫无意义,查看函数堆栈,看看是在哪个函数中出的问题

该用户从未签到

 楼主| 发表于 2013-4-23 15:59:04 | 显示全部楼层
liuzhiyu123 发表于 2013-4-23 08:09
您给出这个截图完全毫无意义,查看函数堆栈,看看是在哪个函数中出的问题

谢谢,我也知道没什么意义,因为我自己也想知道再哪,但单步跟踪了很久没找到,,然后只好让他继续运行,,,大体上是在travel(node);那边,因为从堆栈看到出错的下面几行就是遍历中的travel(node);至于travel(node)之后去哪里了,,,我也不知道,,,,总之没遍历完!,而如果我在遍历时不添加节点的话又没事??所以我怀疑是不是遍历时添加节点造成的??不知大神有何指教?谢谢!

该用户从未签到

发表于 2013-4-23 16:49:30 | 显示全部楼层
我不遍历,直接递归循环,嘿嘿

该用户从未签到

 楼主| 发表于 2013-4-23 18:51:58 | 显示全部楼层
osger 发表于 2013-4-23 16:49
我不遍历,直接递归循环,嘿嘿

我现在改用for循环了,貌似动态遍历添加节点会冲突?,,,,,,不知道权威的解答是什么???不然的话就是我程序写的有问题了,,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表