osg08:osg3.3.12 分页细节层次节点(PagedLOD)示例

这篇文章详细介绍了如何在osg3.3.12中使用PagedLOD创建一个具有分页细节层次的3D场景,通过多个层级的模型文件展示视图变化效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

osg08:osg3.3.12 分页细节层次节点(PagedLOD)示例

/**********************************************************
*Write by FlySky
*zzuxp@163.com  http://www.OsgChina.org   
**********************************************************/

#include <osgViewer/Viewer>

#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osg/PagedLOD>
#include <osg/PositionAttitudeTransform>
#include <osg/MatrixTransform>

#include <osgDB/ReadFile> 
#include <osgDB/WriteFile>

#include <osgGA/TrackballManipulator>

#include <osgUtil/Optimizer>

#include <iostream>

//创建三级PagedLOD场景
osg::ref_ptr<osg::Group> createPagedLOD()
{
	//创建PagedLOD对象
	osg::ref_ptr<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,100.0f);

	//添加节点,设置0级的内容为cessna.osg
	page->setFileName(2,"cessna.osg");
	//设置可视变化范围100.0f-200.0f
	page->setRange(2,100.0f,200.0f);

	return page.get();
}

int main()
{
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

	osg::ref_ptr<osg::Group> root = new osg::Group();

	//创建矩阵变换节点
	osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform();
	//添加子节点
	mt->addChild(createPagedLOD());
	//旋转一下,调整一下合适的角度
	osg::Matrix m ;
	m.makeRotate(60.0f,0.0f,0.0f,1.0f);
	//设置矩阵
	mt->setMatrix(m);

	//添加PagedLOD场景
	root->addChild(mt.get()) ;

	//写入PagedLOD
	osgDB::writeNodeFile(*root,"page.osg");

	//优化场景数据
	osgUtil::Optimizer optimizer ;
	optimizer.optimize(root.get()) ;

	viewer->setSceneData(root.get());

	viewer->realize();

	viewer->run(); 

	return 0 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值