Skip to content

Latest commit

 

History

History
27 lines (22 loc) · 9.56 KB

osgDB.md

File metadata and controls

27 lines (22 loc) · 9.56 KB

OSG模型文件存储与读取

读取文件功能

void OsgWidget::loadOsg(QString osgFilePath)
{
    _pViewer->setSceneData(osgDB::readNodeFile(osgFilePath.toStdString()));
}

存入文件功能

bool OsgWidget::saveNode(osg::ref_ptr<osg::Node> pNode, QString fileName)
{
    return osgDB::writeNodeFile(*pNode.get(), fileName.toStdString());
}

OSG读取与保存详解

  • osgDB/readFile:osg所有读取磁盘文件函数都在此头文件中
    • osg打开文件是依据后缀名打开的,使用不同的打开函数返回不同的数据类型指针,文件名参数中可以包含绝对路径或者相对路径。

      • 如果用户指定了绝对路径, OSG 将到指定的位置去搜索文件。
      • 如果用户制定了相对路劲或者不包含路径,OSG将使用osgDB的数据文件路径表来搜索文件,用户可以通过设置环境变量 OSG_FILE_PATH 来设置这个目录列表。
    • 要添加指定的数据目录到数据文件路径表,可以使用osgDB::Registry::getDataFilePathList() 函数。osgDB::Registry是一个单态类(singleton),因此要调用这个函数的话,需要使用单态类的实例。函数会返回一个 osgDB::FilePathList 的指针,也就是一个简单的 std::dequestd::string。假如要从一个字符串 newpath 中添加目录到列表的话,可以使用下面的代码:

        osgDB::Registry::instance()->getDataFilePathList().push_back(newpath);
      
    • 如果因为某些原因, OSG 不能读取文件,那么这两个函数都会返回 NULL指针。要查看文件读取失败的原因的话,可以设置 OSG_NOTIFY_LEVEL 环境变量为一个较高的值(例如 WARN),然后再次尝试读取文件,并检查程序控制台输出的警告或者错误信息。

    序号

    函数

    描述

    1

    readObjectFile

    读取对象文件

    2

    readFile

    读取文件

    3

    readImageFile

    用于读取2D图像文件

    4

    readHeightFieldFile

    5

    readNodeFile

    打开3D模型文件,后缀名为.osg

    6

    readNodeFiles

    打开多个3D模型文件,后缀名为.osg

    7

    readShaderFile

    读取着色器文件

    8

    readShaderFileWithFallback

    9

    readScriptFile

    读取脚本文件

    10

    readRefObjectFile

    11

    readRefImageFile

    12

    readRefHeightFieldFile

    13

    readRefNodeFile

    14

    readRefShaderFile

    15

    readRefScriptFile

  • osgDB/writeFile:osg所有保存磁盘文件函数都在此头文件中

    序号

    函数

    描述

    1

    writeObjectFile

    将对象写入文件

    2

    writeImageFile

    将数据写入2D图形文件

    3

    writeHeightFieldFile

    4

    writeNodeFile

    将数据写入3D模型文件

    5

    writeShaderFile

    将着色器写入文件

    6

    writeScriptFile

    将脚本写入文件