小白一枚,最近学习OSG发现一个疑问,记录下。
我们都知道在osg中使物体或者说Node隐藏方式有两种,一种是设置NodeMask,另外一种是使用osg的switch类来控制。
两者的区别:前者只是看不到,数据还在场景中,隐藏了并不能影响渲染性能,不影响内存中的数据;后者是从内存中暂时移除,会对性能有所影响,需要显示时再加载进场景。
但是自己在写测试代码的时候发现一个现象:
1、添加两个节点
osg::Node* node = osgDB::readNodeFile("glider.osg");
osg::Group* group = new osg::Group;
group->addChild(node);
osg::PositionAttitudeTransform* postrans = new osg::PositionAttitudeTransform();
postrans->setPosition(osg::Vec3(10, 0, 0));
postrans->addChild(node);
group->addChild(postrans);
显示如下,两个节点正常显示。
2、使用setNodeMask隐藏节点node
osg::Node* node = osgDB::readNodeFile("glider.osg");
osg::Group* group = new osg::Group;
group->addChild(node);
osg::PositionAttitudeTransform* postrans = new osg::PositionAttitudeTransform();
postrans->setPosition(osg::Vec3(10, 0, 0));
postrans->addChild(node);
group->addChild(postrans);
显示如下,两个节点都被隐藏了。
3、使用Swith隐藏node
osg::Node*node=osgDB::readNodeFile("glider.osg");
osg::Group*group=newosg::Group;
osg::PositionAttitudeTransform*postrans=newosg::PositionAttitudeTransform();
postrans->setPosition(osg::Vec3(10,0,0));
postrans->addChild(node);
group->addChild(postrans);
osg::Switch*swith=newosg::Switch;
swith->addChild(node);
swith->setChildValue(node,false);
group->addChild(swith);
显示结果如下,只有node节点被隐藏了