osg demo26 LOD头结点

21 篇文章 11 订阅
//DEMO26
//功能:输出free.osg ,这个模型是fountain的变换,使fountain在3000米外不显示


#include <osgDB/Registry>
#include <osgDB/ReadFile>
#include <osgDB/ReaderWriter>
#include <osgDB/WriteFile>
#include <osg/Node>
#include <osgViewer/Viewer>
#include <osg/LOD>

int main()
{
	osgViewer::Viewer viewer;
	osg::Node* node = osgDB::readNodeFile("fountain.osg");
	//LOD结点
	osg::LOD* lod = new osg::LOD;
	//添加结点并设置视距
	lod->addChild(node,0,3000);
	viewer.setSceneData(lod);
	osgDB::writeNodeFile(*(viewer.getSceneData()),"free.osg",osgDB::Registry::instance()->getOptions());
	return 0;
}

osg::LOD是OpenSceneGraph中的一个节点类,用于控制场景中不同级别的细节。LOD代表"Level of Detail",即细节级别。它允许我们在不同距离和视角下显示不同的几何体,以提高场景的性能和视觉效果。 在使用osg::LOD时,需要创建一个osg::Switch节点,并将不同级别的osg::Node节点添加到其中。然后,将osg::Switch节点作为osg::LOD节点的子节点添加到场景图中。osg::LOD节点有一个距离范围数组,每个范围关联一个osg::Switch节点。当相机进入某个距离范围时,osg::LOD节点会自动切换到相应的osg::Switch节点,从而显示相应的几何体。 以下是一个简单的osg::LOD用法示例: ```cpp // 创建不同级别的几何体 osg::ref_ptr<osg::Geode> geode1 = createGeode1(); osg::ref_ptr<osg::Geode> geode2 = createGeode2(); osg::ref_ptr<osg::Geode> geode3 = createGeode3(); // 创建Switch节点,并将几何体添加到其中 osg::ref_ptr<osg::Switch> switchNode = new osg::Switch(); switchNode->addChild(geode1); switchNode->addChild(geode2); switchNode->addChild(geode3); // 创建LOD节点,并设置距离范围 osg::ref_ptr<osg::LOD> lodNode = new osg::LOD(); lodNode->addChild(switchNode, 0, 100); // 当距离小于100时,显示第一级几何体 lodNode->addChild(switchNode, 100, 500); // 当距离在100到500之间时,显示第二级几何体 lodNode->addChild(switchNode, 500, FLT_MAX); // 当距离大于500时,显示第三级几何体 // 将LOD节点添加到场景图中 osg::ref_ptr<osg::Group> root = new osg::Group(); root->addChild(lodNode); ``` 需要注意的是,osg::LOD节点的距离范围是按照从小到大的顺序排列的。在上面的示例中,当距离小于100时,将显示第一级几何体;当距离在100到500之间时,将显示第二级几何体;当距离大于500时,将显示第三级几何体。如果范围没有重叠,那么osg::LOD节点将只显示其中一个距离范围内的osg::Switch节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值