OSG 文件读取 收集一些options

options语法

文件读取

//方法一:
osg::Node* Node=osgDB::readNodeFile(文件路径, new osgDB::Options("选项内容"));
//方法二:
osg::ref_ptr<osgDB::Options> options = new osgDB::Options("选项内容"); 
osg::Node* pNode=osgDB::readNodeFile(文件路径, options));

文件写入

//参数1:需要存入的模型,参数2:文件保存的路径,参数3:options
osgDB::writeNodeFile(node, path, new osgDB::Options("选项内容"));

读取文件

模型太大时,加快读取时间

//关闭模型优化绘制
osg::ref_ptr<osgDB::Options> options = new osgDB::Options(std::string("noTriStripPolygons")); 

osgb文件过大,对纹理进行压缩

//压缩纹理
osg::ref_ptr<osgDB:::Options> options = new osgDB::Options;
options->setOptionString( "Compressor=zlib" );  

osg中读取obj文件时,obj文件会旋转90°

//设置文件读取不旋转
osg::ref_ptr<osgDB::Options> options = new osgDB::Options("noRotation");

纹理文件不存在(或者读取失败)时,生成一张空的纹理对象osg::Image,并记录下纹理文件对应的路径(选项只对osg2,osgb,osgt,osgx起作用,)

osg::ref_ptr<osgDB::Options> options = new osgDB::Options("ForceReadingImage");

在读取模型中含有dds格式纹理的时候,需要用到这个选项。如在命令行中使用osgviewer aaa.osg -O dds_flip

osg::ref_ptr<osgDB::Options> options =  new osgDB::Options("dds_flip"));

used original external reference files 使用原外部引用路径,对其不作任何修改,原样保存,需要注意的是,采用该种方式时导出模型后,需要将其原来的引用依赖模型按照之前的路径一并打包

osg::ref_ptr<osgDB:::Options> options = new osgDB::Options;
options->setOptionString("useOriginalExternalReferences");

嵌入外部引用项到文件中,采用该种模式时,已load进来的模型会直接替换掉其代理节点,这样保存出来的模型将会是一个不再依赖已经load进来得外部引用项的大模型文件

osg::ref_ptr<osgDB:::Options> options = new osgDB::Options;
options->setOptionString("inlineExternalReferencesInIVEFile");

generated external reference ive files在保存过程中如果遇到外部引用节点,比如PageLOD/ProxyNode时,将其保存为同目录下,原文件名的ive格式模型,并将引用路径设置为新文件的路径

osg::ref_ptr<osgDB:::Options> options = new osgDB::Options;
options->setOptionString("noWriteExternalReferenceFiles");

export texture files during write 保存时导出纹理,有时候我们需要保存模型文件中的纹理到文件,比如IVE文件中嵌入的纹理,这时我们可以加入该配置字符串,保存文件时,osg就会帮我们把模型中的所有纹理图片保存到相应目录

osg::ref_ptr<osgDB:::Options> options = new osgDB::Options;
options->setOptionString("OutputTextureFiles");

写入文件

在写ive模型文件的时候只写纹理文件对应的路径,而不是默认的将纹理数据写入ive文件

osgDB::writeNodeFile(node, path, new osgDB::Options("noTexturesInIVEFile"));

osgb转osg时会保留小数位数,不会显示所有的小数位,读取osgb文件时获取的精度会更为准确。写出osg文件时指定精度(double)

osgDB::writeNodeFile(node, path, new osgDB::Options("precision 12"));

写出文件时不丢失光照

osgDB::writeNodeFile(node, path, new osgDB::Options("IncludingHint");

写出带纹理osgb时设置压缩,节省空间

osgDB::writeNodeFile(node, path, new osgDB::Options("WriteImageHint=IncludeFile");

转载原文
转载原文
转载原文
WriteImageHint=IncludeFile

你可能感兴趣的:(OSG,c++,osg)