查看: 5363|回复: 6

能不能取到osg::pagedLOD中的单独节点

[复制链接]

该用户从未签到

发表于 2010-3-11 21:44:59 | 显示全部楼层 |阅读模式
本帖最后由 kidd_wade 于 2010-3-11 21:47 编辑

详述问题:
osg::pagedLOD的实例可以通过多次调用setFileName方法来控制通多个文件载入模型,那么能不能从pagedLOD中将这些模型作为osg::Node节点分别提取出来使用呢?
如:
//创建PagedLOD对象
osg::PagedLOD* page = new osg::PagedLOD();
//设置中心位置
page->setCenter(osg::Vec3(0.0f,0.0f,0.0f));
//添加节点,设置0级的内容为cow.osg
page->setFileName(0,"cow.osg");
//设置可视变化范围为0.0f-50.0f
page->setRange(0,0.0f,50.0f);
//添加节点,设置0级的内容为spaceship.osg
page->setFileName(1,"glider.osg");
//设置可视变化范围50.0f-100.0f
page->setRange(1,50.0f,200.0f);

有没有什么方法可以将cow文件中的模型作为单独的节点取出来?

该用户从未签到

发表于 2010-3-12 08:21:35 | 显示全部楼层
没有现成的方法,只有子节点cow.osg进入视野并被加载后,您才可能通过getChild(0)得到它。
使用自定义的裁减回调setCullCallback可以强制PagedLOD的子节点加载,而无论它是否在视野之内,不过您需要谨慎编写裁减回调的内容

该用户从未签到

发表于 2010-3-12 08:25:26 | 显示全部楼层
page->getChild(0)即可,不过需要注意结果可能为空

该用户从未签到

发表于 2014-8-19 15:23:15 | 显示全部楼层
sohoman 发表于 2010-3-12 08:25
page->getChild(0)即可,不过需要注意结果可能为空

不对吧,page->getChild(0)有可能报错

该用户从未签到

发表于 2014-8-20 10:04:32 | 显示全部楼层
dearpa 发表于 2014-8-19 15:23
不对吧,page->getChild(0)有可能报错

这只是安全性检测问题,当cow被remove的时候,getchild(0)必然会报错
那么getNumChildren就显的有必要了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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