osgDB::TemplateRegisterDotOsgWrapperProxy
可以在序列化对象之前注册一些 osgDB::RegisterWrapperProxy
的模板,以便在读取文件时自动创建对象。它被设计用于序列化和反序列化 OpenSceneGraph 物体的状态,它可以自动为所有被序列化的对象注册序列化和反序列化的函数。
TemplateRegisterDotOsgWrapperProxy(void);
void registerWrapper(const std::string& className, osgDB::WrapperReadCallback readFunc,
osgDB::WrapperWriteCallback writeFunc);
className
: 要注册的类名。readFunc
: 当遇到一个类名为该类名的对象时,调用此函数来读取对象的状态。writeFunc
: 当遇到一个类名为该类名的对象时,调用此函数来写入对象的状态。osgDB::TemplateRegisterDotOsgWrapperProxy* wrapperProxy = new osgDB::TemplateRegisterDotOsgWrapperProxy;
// 使用内部函数创建一个节点
osg::ref_ptr<osg::Node> node = createSomeNode();
// 注册该节点所属的类和其序列化和反序列化函数
wrapperProxy->registerWrapper(node->className(), osgDB::createReadNodeCallback(node.get()), osgDB::createWriteNodeCallback(node.get()));
// 序列化节点
std::stringstream stream;
osgDB::writeObject(stream, node.get(), wrapperProxy);
// 反序列化节点
osg::ref_ptr<osg::Node> loadedNode = dynamic_cast<osg::Node*>(osgDB::readObject(stream, wrapperProxy).getObject());