OpenSceneGraph|OSGはテクスチャ付きosgbフォーマットをどのように保存すればスペースを節約できますか?
7744 ワード
OSG(OpenSceneGraph)ストレージテープテクスチャosgbフォーマットを使用すると、ストレージ後のosgbファイルのサイズが元のファイルのサイズよりはるかに大きく、数倍から数十倍になる場合があります.これはなぜですか.OSGのデフォルトのストレージフォーマットは非圧縮ストレージであるため、解決策はパラメータを設定してストレージフォーマットを圧縮ストレージに変更することである.方法は次のとおりです.
次のドキュメントでは、解決策のソースを見つけることができます.
上記のドキュメントでは、WriteImageHintの項目について説明しています(26行目):IncludeDataを選択すると、直接データが書き込まれ、圧縮されず、デフォルトのオプションになります.includeFileは書き込みストリームであり、私の理解では、元の映像データストリームを元のOSgbに書き込むことであり、元の映像は圧縮されたもの、例えばjpgフォーマットであり、保存されたosgbは圧縮されたものである.したがって、WriteImageHintをIncludeFileに設定することで、OSGストレージテープテクスチャosgbフォーマットのデータ量が大きいという問題を解決し、スペースを節約できます.
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フォーマットのデータ量が大きいという問題を解決し、スペースを節約できます.