OpenSceneGraph|OSGはテクスチャ付きosgbフォーマットをどのように保存すればスペースを節約できますか?

7744 ワード

OSG(OpenSceneGraph)ストレージテープテクスチャosgbフォーマットを使用すると、ストレージ後のosgbファイルのサイズが元のファイルのサイズよりはるかに大きく、数倍から数十倍になる場合があります.これはなぜですか.OSGのデフォルトのストレージフォーマットは非圧縮ストレージであるため、解決策はパラメータを設定してストレージフォーマットを圧縮ストレージに変更することである.方法は次のとおりです.
osg::ref_ptr<osgDB::ReaderWriter::Options> options = new osgDB::ReaderWriter::Options;
options->setOptionString("WriteImageHint=IncludeFile");			//  
osgDB::writeNodeFile(*(node.get()), osgb_path, options);

次のドキュメントでは、解決策のソースを見つけることができます.
$ osgconv --format osgb 
Plugin osgPlugins-3.3.9/osgdb_osg.so 
{ 
   ReaderWriter : OSG Reader/Writer 
   { 
       features   : readObject readNode writeObject writeNode   
       extensions : .osg                           OpenSceneGraph Ascii file format 
       extensions : .osgs                          Pseudo OpenSceneGraph file loaded, with file encoded in filename string 
       options    : OutputTextureFiles             Write out the texture images to file 
       options    : includeExternalReferences      Export option 
       options    : precision                      Set the floating point precision when writing out files 
       options    : writeExternalReferenceFiles    Export option 
   } 
   ReaderWriter : OpenSceneGraph Native Format Reader/Writer 
   { 
       features   : readObject readImage readNode writeObject writeImage writeNode   
       extensions : .osg2                    OpenSceneGraph extendable format 
       extensions : .osgb                    OpenSceneGraph extendable binary format 
       extensions : .osgt                    OpenSceneGraph extendable ascii format 
       extensions : .osgx                    OpenSceneGraph extendable XML format 
       options    : Ascii                    Import/Export option: Force reading/writing ascii file 
       options    : Compressor=<name>        Export option: Use an inbuilt or user-defined compressor 
       options    : ForceReadingImage        Import option: Load an empty image instead if required file missed 
       options    : SchemaData               Export option: Record inbuilt schema data into a binary file 
       options    : SchemaFile=<file>        Import/Export option: Use/Record an ascii schema file 
       options    : WriteImageHint=<hint>    Export option: Hint of writing image to stream: <IncludeData> writes Image::data() directly; <IncludeFile> writes the image file itself to stream; <UseExternal> writes only the fi 
lename; <WriteOut> writes Image::data() to disk as external file. 
       options    : XML                      Import/Export option: Force reading/writing XML file 
   } 
} 


  上記のドキュメントでは、WriteImageHintの項目について説明しています(26行目):IncludeDataを選択すると、直接データが書き込まれ、圧縮されず、デフォルトのオプションになります.includeFileは書き込みストリームであり、私の理解では、元の映像データストリームを元のOSgbに書き込むことであり、元の映像は圧縮されたもの、例えばjpgフォーマットであり、保存されたosgbは圧縮されたものである.したがって、WriteImageHintをIncludeFileに設定することで、OSGストレージテープテクスチャosgbフォーマットのデータ量が大きいという問題を解決し、スペースを節約できます.