查看: 844|回复: 2

serializer,自定义node和自定义的nodecallback

[复制链接]

该用户从未签到

发表于 2015-5-12 09:16:17 | 显示全部楼层 |阅读模式
我想要用serializer实现一个自定义的node,并且,这个node带有一个自定义的nodecallback.
我看了OpenSceneGraph 3.0 Beginner's Guide里关于serializer的章节和这个资料http://trac.openscenegraph.org/p ... erializationSupport

现在,我可以用Custom Serializer实现。
代码如下(代码还是有些问题,但是大概就这样)
  1. namespace test {
  2.    class CustomNode : public osg::Group
  3.    {
  4.    public:
  5.       CustomNode() : osg::Group(), _exampleID(0) {}
  6.       CustomNode(const CustomNode& copy,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY)
  7.          : osg::Group(copy, copyop), _exampleID(copy._exampleID) {}
  8.       META_Node(test, CustomNode)
  9.          void setExampleID( unsigned int id ) { _exampleID = id; }
  10.       unsigned int getExampleID() const { return _exampleID; }
  11.    protected:
  12.       unsigned int _exampleID;
  13.    };
  14. }

  15. class CustomNodeCallBack : public osg::NodeCallback
  16. {
  17.    virtual void operator()( osg::Node* node, osg::NodeVisitor* nv )
  18.    {
  19.       printf ("custom node call back.\n");
  20.    }
  21. };
  22. static bool checkCustomCallBack( const test::CustomNode& node )
  23. {
  24.    return true;
  25. }
  26. static bool writeCustomCallBack( osgDB::OutputStream& os, const test::CustomNode& node )
  27. {
  28.    return true;
  29. }
  30. static bool readCustomCallBack( osgDB::InputStream& is, test::CustomNode& node )
  31. {
  32.    node.addUpdateCallback( new CustomNodeCallBack );
  33.    return true;
  34. }

  35. REGISTER_OBJECT_WRAPPER( CustomNode_Wrapper,
  36.                   new test::CustomNode,
  37.                   test::CustomNode,
  38.                   "osg::Object osg::Node osg::Group test::CustomNode" )
  39. {
  40.    ADD_UINT_SERIALIZER( ExampleID, 0 );
  41.    ADD_USER_SERIALIZER( CustomCallBack );
  42. }
复制代码


但是,我觉得不用Custom Serializer应该也可以实现。
代码可能类似于这样。
  1. namespace test {
  2.    class CustomNodeCallBack : public osg::NodeCallback
  3.    {
  4.    public:
  5.       ......
  6.       META_NodeCallBack(test, CustomNode)
  7.       ......
  8.    };
  9. }

  10. REGISTER_OBJECT_WRAPPER( CustomNodeCallBack_Wrapper,
  11.                   new test::CustomNodeCallBack,
  12.                   test::CustomNodeCallBack,
  13.                   "osg::Object osg::NodeCallBack test::CustomNodeCallBack" )
  14. {
  15.    ......
  16. }

  17. namespace test {
  18.    class CustomNode : public osg::Group
  19.    {
  20.    public:
  21.       ......
  22.       META_Node(test, CustomNode)
  23.       ......
  24.    };
  25. }
  26. REGISTER_OBJECT_WRAPPER( CustomNode_Wrapper,
  27.                   new test::CustomNode,
  28.                   test::CustomNode,
  29.                   "osg::Object osg::Node osg::Group test::CustomNode" )
  30. {
  31.    ADD_OBJECT_SERIALIZER( UpdateCallback, test::CustomNodeCallBack , NULL)
  32. }
复制代码

就是想要写一个自定义的node和一个自定义的nodecallback,然后把自定义的nodecallback加入到node的updatecallback里。

但是,没有META_NodeCallBack这个东西。这样的思路不行。

我想知道,能够按照上述的思路实现吗?(不用Custom Serializer,而是一个自定义的node和一个自定义的nodecallback,然后把自定义的nodecallback加入到node的updatecallback里。)
还有什么其他方法来实现“一个自定义的node,并且,这个node带有一个自定义的nodecallback”?

osg中的serializer是@array写的吧。所以特别求助@array。

该用户从未签到

发表于 2015-5-15 17:52:45 | 显示全部楼层
帮顶,没做过类似的
我做持久化,就是自己保存需要保持的参数,然后创建后又设置就行了。

该用户从未签到

发表于 2015-5-29 15:30:21 | 显示全部楼层
本帖最后由 不痛o就一下 于 2015-5-29 15:46 编辑

你想做的事儿是从文件中读取文字然后作为程序?

好像是不可能实现的事儿呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表