查看: 1383|回复: 3

addChild , removeChild 对子结点序号的影响 ?

[复制链接]

该用户从未签到

发表于 2012-12-19 09:12:32 | 显示全部楼层 |阅读模式
for(unsigned int k=0; k< mt2->getNumChildren();  k++)
{                                                      
               
                osg::ref_ptr<osg::Node> s_node = mt2->getChild(k);
                osg::BoundingSphere bs=s_node->computeBound();   
                float radius = bs.radius();
                osg::Vec3f center = bs.center();
                mt2->removeChild(s_node);                     
                osg::ref_ptr<osg::Geode> box = new osg::Geode();
                box->addDrawable(new osg::ShapeDrawable(new osg::Box(center,radius)));
                mt2->addChild( box.get() );
}

mt下的全是小球,现在把sphere 换成box, 为什么是隔一个处理一个
我觉得问题出在                mt2->removeChild(s_node);      
                mt2->addChild( box.get() );
虽然现在用replaceChild已经解决问题,但是还想研究一下,
如果现在mt2有4个结点,
osg::ref_ptr<osg::Node> s_node = mt2->getChild(1);
        mt2->removeChild(s_node);   
        mt2->addChild( box.get() );
这时mt2的子结点序号?

该用户从未签到

发表于 2012-12-19 09:25:54 | 显示全部楼层
每回removechilde后子节点会重新排序。比如你要循环删掉下面所有节点在,每回应该removechilde(0),而不是removechilde(k)

该用户从未签到

 楼主| 发表于 2012-12-19 09:35:00 | 显示全部楼层
假如我删掉了子结点0
后面的子结点序号顺序-1吗?

该用户从未签到

发表于 2012-12-19 09:55:22 | 显示全部楼层
张逸 发表于 2012-12-19 09:35
假如我删掉了子结点0
后面的子结点序号顺序-1吗?

比如mt下面有四个节点,你删掉子节点0后,现在mt下节点为0,1,2.以此类推
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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