根据以前章节所说,导出的文件是group,
此group组成
1,叶子节点
2,pagedlod
3,叶子节点和pagedLod的混合体
由于0级是由精模和简模通过pagedLod组成,所以,根节点是由0级的一个PagedLod组成,即
osg::ref_ptr<osg::Group> grp = new osg::Group;
grp->addChild(plod);
osgDB::writeNodeFile(*grp, strOutputFileName);
输出的文件是root_0.osg
打开此文本

读取该文件
运行,
远处

拉近

代码如下:
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osgdb/ReadFile>
#include <osgDB/WriteFile>
#include <osg/PagedLod>
#include <osgGA/TrackballManipulator>
int main()
{
int rootIndex = 0;
std::string strRootDir = "d:/test/lod/";
std::string strOutputFileName = strRootDir + "root_" + std::to_string(rootIndex) + ".osg";
#if 1
int childLevel = 0;
std::string strChildLevel = std::to_string(childLevel);
std::string strLevel0DetailModelFileName = strChildLevel + "/root_" + std::to_string(rootIndex) + "_detail.osg";
std::string strLevel0SimpleModelFileName = "D:/install/osg365_oe210_vs2019/OpenSceneGraph-Data/cow.osg";
osg::ref_ptrosg::PagedLOD plod = new osg::PagedLOD;
plod->setCenter(osg::Vec3(0, 0, 0));
plod->setFileName(0, strLevel0DetailModelFileName);
plod->setRange(0, 0, 50);
plod->setFileName(1, strLevel0SimpleModelFileName);
plod->setRange(1, 50, FLT_MAX);
osg::ref_ptrosg::Group grp = new osg::Group;
grp->addChild(plod);
osgDB::writeNodeFile(*grp, strOutputFileName);
#else
osg::ref_ptrosg::Node node = osgDB::readNodeFile(strOutputFileName);
osg::ref_ptrosgViewer::Viewer viewer = new osgViewer::Viewer;
viewer->setSceneData(node);
osg::ref_ptr< osgGA::TrackballManipulator> manip = new osgGA::TrackballManipulator();
// 设置自定义的初始位置:眼睛位置、观察点、向上向量
manip->setHomePosition(
osg::Vec3d(0.0, -100.0, 5.0), // 眼睛位置
osg::Vec3d(0.0, 0.0, 0.0), // 观察中心
osg::Vec3d(0.0, 0.0, 1.0), // 向上向量(Z轴向上)
false // 不自动计算
);
viewer->setCameraManipulator(manip);
return viewer->run();
#endif
}