osgDB.BaseSerializer是OpenSceneGraph中用于序列化对象的类基类。
osgDB.BaseSerializer类是OpenSceneGraph中用于序列化对象的类基类。它提供了一些虚函数,派生类可以实现这些函数来序列化和反序列化自定义对象。默认情况下,BaseSerializer类使用C++标准库的iostream类来序列化和反序列化数据。
以下示例说明如何创建自定义BaseSerializer类。
class MySerializer : public osgDB::BaseSerializer
{
public:
// 序列化类型为unsigned int的数据
bool write(unsigned int data, osgDB::OutputStream& os) const override
{
os << data;
return true;
}
// 反序列化类型为unsigned int的数据
bool read(unsigned int& data, osgDB::InputStream& is) const override
{
is >> data;
return true;
}
};
函数类型 | 函数名 | 说明 |
---|---|---|
virtual bool | read(const std::string &filename, osg::Object &object, const osgDB::Options *options=nullptr) const | 从文件读取序列化对象数据 |
virtual bool | write(const std::string &filename, const osg::Object &object, const osgDB::Options *options=nullptr) const | 将对象数据写入文件 |
virtual bool | read(std::istream &is, osg::Object &object, const osgDB::Options *options=nullptr) const | 从输入流读取序列化对象数据 |
virtual bool | write(std::ostream &os, const osg::Object &object, const osgDB::Options *options=nullptr) const | 将对象数据写入输出流 |
osgDB::Serializer是OpenSceneGraph中用于序列化和反序列化对象的类,所谓序列化就是将对象数据写入到文件或输出流中,反序列化则是将从输入流或文件读取对象数据自动构建出对象。
osgDB::Serializer是一个抽象基类,它有以下四个虚函数:
这里的filename可以是相对路径或绝对路径,如果是相对路径,则会按照OpenSceneGraph Data文件夹中设定的相对路径进行寻找。
实际使用时,可以根据不同的需求创建自己的Serializer派生类,然后实现对应的虚函数即可。例如我们现在要实现一个可以序列化Node的自定义Serializer,那么可以这么写:
class MySerializer : public osgDB::Serializer {
public:
bool read(const std::string& filename, osg::Object& object, const osgDB::Options* options = nullptr) const override {
// 自定义读取逻辑
return true;
}
bool write(const std::string& filename, const osg::Object& object, const osgDB::Options* options = nullptr) const override {
// 自定义写入逻辑
return true;
}
bool read(std::istream& is, osg::Object& object, const osgDB::Options* options = nullptr) const override {
// 自定义读取逻辑
return true;
}
bool write(std::ostream& os,
const osg::Object& object,
const osgDB::Options* options = nullptr) const override {
// 自定义写入逻辑
return true;
}
};
然后就可以像用普通的osgDB::ReaderWriter一样,用MySerializer来完成对Node的序列化和反序列化了。