运行环境 OSG3.4.1 + VS2017
对osgb数据的压缩关键在于纹理的压缩,即可在writeNodeFIie方法中进行操作。
osgDB::writeNodeFile(*rootNode, f_path, new osgDB::Options("WriteImageHint=IncludeFile"));
osg老版本中的 writeImageHint=IncludeFile 有缺陷(听一位大佬说的,osg3.6中修复),我测试后发现,使用这个选项时,在你的vs项目文件夹中必须有 该osgb数据的纹理,才能写入成功并压缩数据,否则会运行失败(可以写出,但纹理会丢失)

解决办法是先获取osgb数据的纹理图像,以压缩形式写入到项目文件夹中,再调用
osgDB::writeNodeFile(*rootNode, f_path, new osgDB::Options("WriteImageHint=IncludeFile"));
此时写出的osgb数据大小会被压缩,且可以保持正常的纹理。
获取纹理并压缩写入的代码。
osg::Texture2D* tex2d = dynamic_cast<osg::Texture2D*>(geom->getStateSet()->getTextureAttribute(0, osg::StateAttribute::TEXTURE));image = tex2d->getImage();
osgDB::writeImageFile(*image, "项目文件路径_0.jpg",new osgDB::Options("JPEG_QUALITY 70"));
//jpg 压缩等级70
发现osgb的纹理图片都会以 osgb数据名称 加 _0结尾(目前没碰到过其它情况)。


















