OSG中setNodeMask和Swith开关之间的差异

小白一枚,最近学习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节点被隐藏了




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值