OSGCopy例子解析

转载 2015年11月18日 18:37:41
例子演示了osg中的拷贝,深拷贝和浅拷贝。
浅拷贝只拷贝指针,指向同一个内容。
深拷贝,指针和所指向的内容都拷贝。

拷贝的全部内容都在CopyOp中,看看这个类吧:
enum Options
        {
            SHALLOW_COPY                = 0,
        
DEEP_COPY_OBJECTS           = 1<<0,
            DEEP_COPY_NODES             = 1<<1,
           
 DEEP_COPY_DRAWABLES         = 1<<2,
            DEEP_COPY_STATESETS         = 1<<3,
          


  DEEP_COPY_STATEATTRIBUTES   = 1<<4,
            DEEP_COPY_TEXTURES          = 1<<5,
         
   DEEP_COPY_IMAGES            = 1<<6,
            DEEP_COPY_ARRAYS            = 1<<7,
        
    DEEP_COPY_PRIMITIVES        = 1<<8,
            DEEP_COPY_SHAPES            = 1<<9,
       


     DEEP_COPY_UNIFORMS          = 1<<10,
            DEEP_COPY_CALLBACKS         = 1<<11,
    


        DEEP_COPY_USERDATA          = 1<<12,
            DEEP_COPY_ALL               = 
0x7FFFFFFF
        };
定义了一个枚举,可以进行浅拷贝,以上内容的深拷贝。
来看看它是怎么实现拷贝的,
定义了很多的operator()方法,CopyFlags _flags;代表着CopyOp可以拷贝的内容。
在CopyOp.cpp文件中定义了一个宏
#define COPY_OP( TYPE, FLAG ) \
TYPE* CopyOp::operator() (const TYPE* obj) const \
{ \
    if 

(obj && _flags&FLAG) \
        return osg::clone(obj, *this); \
    else \
        return 
const_cast<TYPE*>(obj); \


用于类型的拷贝,下面还分别定义了Referenced、StateAttribute、NodeCallback的拷贝,
但是实现的内容大体相同。看看这个宏吧:
如果参数有效,并且CopyOp可以拷贝,则对指定的类型进行osg::clone(obj, *this);操作,否则直接返
回类型的指针。
这里说一下const_cast,就是一个类型的转换,但返回的内容不受const限制。
来看看这个osg::clone(obj, *this);
通过这个实现的深拷贝,它的实现在osg::ref_ptr<osg::Object> obj = t->clone(copyop);这句话,这
句话直接指向了指定类型的clone方法。以Node为例,看看Node干了,现了深拷贝。
回到例子中,这个例子就没有其他可以过多说明的了,MyCopyOp继承CopyOp,打印出拷贝的内容信息。

OSG鼠标选择求交

OSG鼠标选择求交 ////求交方法一:(用WINDOW坐标值,在相机下求交)            //osg::ref_ptr picker = new osgUtil::LineSegmen...
  • tmljs1988
  • tmljs1988
  • 2012年07月31日 14:25
  • 11084

OSG拾取对应的实体

#include "stdafx.h"   #include    #include    #include    #include    #include    #include    class ...
  • qq_35040828
  • qq_35040828
  • 2016年06月25日 21:12
  • 1408

通过点击对象拾取对象方法详解

pickObject [ message: ] [ prompt: ] [ count:n|#multiple ] [ filter:fn ] [ select: ] [ pickFrozen: ] ...
  • fengda2870
  • fengda2870
  • 2010年04月11日 20:13
  • 331

Archie OSG Step By Step⑤ 显示位置及拾取

在第四课基础上继续。第四课src链接   参考《OSG三维渲染引擎编程指南》显示位置及拾取示例 HUD和Camera可能冲突,还不懂怎么设置两个Camera,目前程序还有问题。学习之后再回来解决 ...
  • whucv
  • whucv
  • 2013年01月03日 12:10
  • 1872

OSG获取鼠标点选事件的位置

OSG点选操作的思路是从osgGA::GUIEventHandler继承,并重新实现虚函数virtual bool handle(const osgGA::GUIEventAdapter& ea, o...
  • chlk118
  • chlk118
  • 2015年07月08日 22:13
  • 4914

osg模型的移动,旋转和缩放

简述     和其他三维引擎一样,模型的矩阵操作是比不可少的。 osg中有一个专门的类来处理。即osg::MatrixTransform类。同样osg::MatrixTransform这个类的祖宗类也...
  • niu2212035673
  • niu2212035673
  • 2017年07月15日 22:08
  • 476

osg 深拷贝、浅拷贝

osg读取obj文件,drawable的材质是共享的
  • zsq306650083
  • zsq306650083
  • 2016年02月20日 11:44
  • 522

4、osg::Node,osg::Group,osg::Switch,osg::MatrixTransform类

一、osg::Node类 类描述:osg::Node为结点类,下有派生类无数,是OSG中最重要的类之一,也是最常用的类之一。 1、Node ()       Node (const Node...
  • sunxiaoju
  • sunxiaoju
  • 2015年12月08日 00:35
  • 1419

osgcopy例子

例子演示了osg中的拷贝,深拷贝和浅拷贝。 浅拷贝只拷贝指针,指向同一个内容。 深拷贝,指针和所指向的内容都拷贝。 拷贝的全部内容都在CopyOp中,看看这个类吧: enum Options ...
  • yungis
  • yungis
  • 2013年01月28日 07:45
  • 1145

OSG学习笔记0——解决OSG读obj模型问题

最近刚刚开始学习osg,拿到的任务是读取一个obj模型,然后对该模型进行一些移动,旋转等操作。第一步就卡住了。 不知道如何读取obj模型,百度不到,估计问题太幼稚了。同学说需要自己写一个OpenG...
  • u011310341
  • u011310341
  • 2016年04月18日 15:28
  • 3906
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSGCopy例子解析
举报原因:
原因补充:

(最多只允许输入30个字)