查看: 3596|回复: 3

我的SetChildValue为什么不起作用

[复制链接]

该用户从未签到

发表于 2008-5-7 16:33:09 | 显示全部楼层 |阅读模式
前两天请教了王锐版主关于显示隐藏节点的问题,今天我把显示与隐藏都改用osg::Switch来控制。
下面是程序执行的情况:
1.选择某节点时,调用switch->setChildValue(node, false),该节点并没有隐藏。(我确认该节点node被选中了)。同时我又试了更新回调的方式,节点依然没有被隐藏。
2.调用switch->setAllChildOn(),和switch->setAllChildOff()时,所有节点都能显示和隐藏。
这到底是为什么?

该用户从未签到

 楼主| 发表于 2008-5-7 17:25:36 | 显示全部楼层
我找到问题了
程序中选中的节点为cow.osg,而switch的子节点为osg::ref_ptr<osg::Node> scene
而scene = osgDB::ReadNodeFile("cow.osg")
我对cow.osg直接进行的setChildValue,所以会不起作用
我以前一直以为一个Node读取了文件之后,这个Node就代表这个文件的,原来Node是文件的父节点

我没有弄清楚场景图的关系,现丑了:P

该用户从未签到

发表于 2008-5-7 18:52:13 | 显示全部楼层
原帖由 soda 于 2008-5-7 17:25 发表
我找到问题了
程序中选中的节点为cow.osg,而switch的子节点为osg::ref_ptr scene
而scene = osgDB::ReadNodeFile("cow.osg")
我对cow.osg直接进行的setChildValue,所以会不起作用
我以前一直以为一个Node读 ...


这个跟文件的结构是有关的.如果文件中只有一个Geode节点,那么scene = osgDB::ReadNodeFile("xxx.osg")得到的就是这个Geode节点,例如glider.osg;
如果文件中场景节点有多层组织结构,那么获取的就是这个子树的根节点,例如cow.osg的组织结构为Group->Geode,因此scene得到的是一个Group节点。
所以,您所说的“一直以为一个Node读取了文件之后,这个Node就代表这个文件”,这句话是正确的~~别被自己误导了~~

该用户从未签到

 楼主| 发表于 2008-5-7 19:26:12 | 显示全部楼层
哦~~~
谢谢版主的指正
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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