通过查看osgProxyNode.cpp源文件,我们找到了保存节点时会影响该类型节点保存方式的几个Option String,如下:
配置参数及说明 | |
配置字符串 | 说明 |
inlineExternalReferencesInIVEFile | 嵌入外部引用项到文件中,采用该种模式时,已load进来的模型会直接替换掉其代理节点,这样保存出来的模型将会是一个不再依赖已经load进来得外部引用项的大模型文件 |
noWriteExternalReferenceFiles | generated external reference ive files 在保存过程中如果遇到外部引用节点,比如PageLOD/ProxyNode时,将其保存为同目录下,原文件名的ive格式模型,并将引用路径设置为新文件的路径 |
useOriginalExternalReferences | used original external reference files 使用原外部引用路径,对其不作任何修改,原样保存,需要注意的是,采用该种方式时导出模型后,需要将其原来的引用依赖模型按照之前的路径一并打包 |
OutputTextureFiles | export texture files during write 保存时导出纹理,有时候我们需要保存模型文件中的纹理到文件,比如IVE文件中嵌入的纹理,这时我们可以加入该配置字符串,保存文件时,osg就会帮我们把模型中的所有纹理图片保存到相应目录 |
auto opt = new osgDB::Options;
opt->setOptionString("useOriginalExternalReferences");
setIncludeExternalReferences(optionsString.find("inlineExternalReferencesInIVEFile")!=std::string::npos);
setWriteExternalReferenceFiles(optionsString.find("noWriteExternalReferenceFiles")==std::string::npos);
setUseOriginalExternalReferences(optionsString.find("useOriginalExternalReferences")!=std::string::npos);
setOutputTextureFiles(optionsString.find("OutputTextureFiles")!=std::string::npos);
// 调用带配置参数保存函数,就可以灵活的根据我们设置的参数保存场景了
osgDB::writeNodeFile(*nodePtr,"xxx.osgt",opt);