查看osgconv.cpp
main函数在533行
osg::ArgumentParser arguments(&argc,argv); //........一堆功能不管,先看一下文件读写
FileNameList fileNames; for(int pos=1;pos<arguments.argc();++pos) { if (!arguments.isOption(pos)) { fileNames.push_back(arguments[pos]); } } std::string fileNameOut("converted.osg"); //写出文件的名字,如果有多余两个的模型参数,则用最后一个名字作为写入模型的名字,把前面所有模型参数合并 if (fileNames.size()>1) { fileNameOut = fileNames.back(); fileNames.pop_back(); }
osg::ref_ptr<osg::Node> root = osgDB::readRefNodeFiles(fileNames);
//....中间root被各种自定义的节点访问器读取,修改等操作,如下:
/*
if (pruneStateSet)
{
PruneStateSetVisitor pssv;
root->accept(pssv);
}
*/
//保存
osgDB::ReaderWriter::WriteResult result = osgDB::Registry::instance()->writeNode(*root,fileNameOut,osgDB::Registry::instance()->getOptions());