查看: 2154|回复: 3

请教关于osg::copyop节点问题

[复制链接]

该用户从未签到

发表于 2009-12-4 11:39:37 | 显示全部楼层 |阅读模式
本帖最后由 zhangyan1987 于 2009-12-4 11:41 编辑

osg::copyop节点有父节点吗?就是它是继承的那个类,继承关系,还是就本身,无继承关系。
        virtual Referenced*     operator() (const Referenced* ref) const;
        virtual Object*         operator() (const Object* obj) const;
        virtual Node*           operator() (const Node* node) const;
        virtual Drawable*       operator() (const Drawable* drawable) const;
        virtual StateSet*       operator() (const StateSet* stateset) const;
        virtual StateAttribute* operator() (const StateAttribute* attr) const;
        virtual Texture*        operator() (const Texture* text) const;
        virtual Image*          operator() (const Image* image) const;
        virtual Array*          operator() (const Array* array) const;
        virtual PrimitiveSet*   operator() (const PrimitiveSet* primitives) const;
        virtual Shape*          operator() (const Shape* shape) const;
        virtual Uniform*        operator() (const Uniform* shape) const;

这些类函数在定义自己的类时(继承copyop)都必须得重写吗?哪几个是必须重写的?当我定义rootnode->clone(mycopyop(osg::CopyOp::SHALLOW_COPY))时,先执行我自己定义类的构造函数,然后调用上面的函数,调用顺序是啥?是自动调用的吗?问题有点多,呵呵,望帮助。

该用户从未签到

发表于 2009-12-4 12:03:51 | 显示全部楼层
没那么麻烦,事实上一个都不用重写~~我不知道您到底要问什么

一般只要用户类的拷贝构造函数能够准确地记录本节点的信息就可以了,参看一下osg中的各个类的拷贝构造函数实现

该用户从未签到

 楼主| 发表于 2009-12-4 15:48:30 | 显示全部楼层
您的意思是每个类都有自己的拷贝构造函数,比如 Node(const Node&,const CopyOp& copyop=CopyOp::SHALLOW_COPY);,如果我现在有一个node节点node1,我想再拷贝一个,是这样应用吗? Osg::node node2 = osg::node(node1,copyop::shallow_copy);这样就拷贝了一个和node1一样的节点了?

该用户从未签到

发表于 2009-12-4 16:05:41 | 显示全部楼层
您的写法很显然不符合C++的基本语法,这里最好使用clone函数:
osg::Node* node2 = node1->clone( DEEP_COPY_ALL );

注意,SHALLOW_COPY只是复制指针本身,因此这样的话node2只是指向了node1所指向的内存空间而已;DEEP_COPY则重新分配一块内存空间,并将node1中的属性数据原封复制到这块新的空间中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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