osg解析系列-[osg-refence/object/node/group/drawable/geometry/Geode osg场景树的定义和构成]

2.1 osg::Referenced 是所有类的基类,作为一个图形平台底层类该如何设计?

Osg的解释是:底层基类、利用引用计数做内存管理(内存回收)。
个人理解:主要目的有两个,一是利用引用计数做内存的自动回收,二是为满足多线程同步的要求。

2.2 osg::ObserverSet 是“观察者”设计模式的应用,为什么设计它呢?

见《C++20设计模型》P192~P203。

2.3 osg::object做为基类,应该包括哪些成员和方法?

2.3.1 它的构造函数、析构函数如何设计
做为基类它的构造和析构是否可以独立于设计模式呢?可以
构造:必须是public、必须有默认构造,其他构造跟基本的必须的成员相关
拷贝构造:一般是=delete,跟内存管理的设计相关(osg是利用引用计数半自动管理)。Osg::object的拷贝构造保留了,要求传入拷贝类型(深拷贝、浅拷贝)
赋值构造:一般是=delete,跟内存管理的设计相关(osg是利用引用计数半自动管理)。Osg::object的Object& operator = (const Object&)被声明成了private(可以理解为=delete)。
析构:一般是private,跟内存管理的设计相关(osg是利用引用计数半自动管理)
2.3.2 复制和引用计数
Osg::object中物体类型的拷贝、物体的拷贝要求子类必须实现
2.3.3 对IO的支持
没看到它对IO的支持呢?!留个疑问
2.3.4 GOF的设计模型
Osg::Object选用GOF 的composite(组合模型),Object是组合模式中抽象component的定义。

2.4 osg::Node

场景树的节点基类,包括以下3部分内容:
1.GOF Composite(组合模式)下要求的接口实现(osg::object中的虚函数),它的角色是“Component”
2.所在树的中的遍历路径ParentList _parents;
3.回调 _updateCallback/_eventCallback/_cullCallback
4.状态集合 ref_ptr _stateset(PS:状态集后面有个小专题)
5.包围盒BoundingSphere _initialBound;

2.5 osg::Group

它在GOF Composite(组合模式)下的角色是“Composite”(树枝),行为定义也是“树枝”角色的典型行为,主要包括:
1.维护子节点列表,addChild/removeChild/insertChild/getChild

2.6 osg::drawable

Osg中所有可渲染的节点均从osg::drawable继承,但它不包含渲染数据的成员且不能被直接当作节点加入场景树,它需要连接到Geode后再加入场景树。渲染Drawable时,必须使用OpenGL的State,osg::StateSet是这些State的体现。
需要注意的是:Drawbale可以被多个不同的Geode连接,StateSet也可以被多个不同的drawable连接。
1.常规函数(构造、override、包围盒、回调)
2._shape (为加速碰撞检测及几何体生成)
3.显示列表 void setSupportsDisplayList(bool flag)/void setUseDisplayList(bool flag);

2.7 osg::geometry

看起来就是普通几何体的定义,成员变量也是普通几何体应该包括的:顶点、法向量、顶点颜色、顶点纹理坐标。

2.8 osg::Geode

继承自osg::Group,在GOF Composite(组合模式)下的角色是“Leaf”(树叶),它被设计用来打包“可渲染”物体(注:从osg::Drawable继承的均属于可渲染物体renderable things)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值