OSG学习过程中的笔记 - 图文 下载本文

模式:与glEnable和glDisable相类似。用Osg::StateSet::setMode()可在StateSet中保存一个模式信息。

属性:用于制定状态信息,osg::StateSet::setAttribute()在StateSet中保存属性信息。

纹理模式和属性:StateSet类方法的setTextureMode和setTextureAttribute进行设置。

继承标记:用于标志量的操作。用于控制场景图形遍历中的状态值。 osgViewer库包含了以下三个可能用到的视口类:

SimpleViewer:负责管理单一场景中的单一视口。使用SimpleViewer时,应用程序应当创建一个窗口并设置当前的图形上下文。

Viewer:用于管理多个同步摄像机,他们将从多个方向渲染单一的视口。 CompositeViewer:此类支持同一窗口的多个视口,也支持不同场景的多个摄像机。

其他实用类:osg库

涉及到osg的内存引用计数策略。

Referenced:所有场景图形节点和osg的许多其他对象的基类。它实现了一个用于跟踪内存使用情况的引用计数。如果某个继承自Referenced类的对象引用计数数值到达0,那么系统将自动调用其析构函数并清理为此对象分配的内存。

ref_ptr<>:模板类ref_ptr<>为其模板内容定义了一个智能指针。模板内容必须继承自Referenced。

Object:纯虚类,一切需要I/O支持,拷贝和引用计数的对象的基类。 Notify:osg库提供了一系列的控制调试,警告和错误输出的函数。用户可以通过指定一个来自NotifySeverity枚举量的数值,设定输出的信息量。

交运算:osgUtil库

通过提供大量用于场景图形交运算,使用如下类可以获得场景图形中被拾取部分的信息:

Intersector:纯虚类,定义了相交测试的接口。执行相交测试时,应用程序将继承自Intersector的某个类实例化,传递给IntersectionVisitor的实例,并随后请求该实例返回数据以获取交运算的结果。

IntersectionVisitor:IntersectionVisitor搜索场景图形中与指定几何体相交的节点,而最后的测试工作由Intersector继承类完成。

LineSegmentIntersector:继承自Intersector,用于检测指定线段和场景图形之间的相交情况,并向程序提供查询相交测试结果的函数。

Intersections:交叉点。

Iterator:迭代程序。

PolytopeIntersector:与LineSegmentIntersector类似,该类用于检测由一系列平面构成的多面体的相交情况。当用户点击鼠标,希望拾取到鼠标位置附近的封闭多面体区域时,PolytopeIntersector类尤其有效。

PlaneIntersector:与LineSegmentIntersector类似,用于检测由一系列平面构成的平面的相交情况。

优化:osgUtil库

Optimizer:用于优化场景图形。

Statistics和StatsVisitor:StatsVisitor返回一个场景图形中节点的总数和类型,Statistics返回渲染几何体的总数和类型。

几何体操作:osgUtil库

Simplifier:使用此类用来减少Geometry对象中几何体的数目,这有助于低细节层次的自动生成。

Tessellator:根据一组顶点的列表,生成由前述列表描述的多边形,即一个osg::PrimitiveSet

DelaunayTriangulator:实现了Delaunay三角网格化运算,根据一组顶点的集合生成一系列的三角形。

TriStripVisitor:遍历场景图图形并将多边形图元转化成三角形和四边形条带。

SmoothingVisitor:SmoothingVisitor可生成顶点法线,也就是所有共享此顶点的面的法线平均值。

纹理贴图生成:包含了建立反射贴图,中途向量贴图,高光贴图。

osg笔记二

2011-07-08 17:37:06| 分类:OSG | 标签: |字号大中小订阅 一.内存管理

Osg的“废弃物”收集系统有以下两个组件:

通用的基类:osg::Referenced,所有的osg节点和场景图形均继承自这一基类,它包含了一个整形的引用计数器。

Osg定义的智能指针模板类ref_ptr<>。当代码中一个Referenced对象指针赋予类型变量ref_ptr<>时,Referenced类的引用计数器会自动加一。

当你创建任何继承自Referenced的场景图形节点或数据时,你的应用程序不可以直接释放其内存空间。

Referenced类:实现了对内存区段的引用计数器功能。 包括三个主要组成部分:

保护成员整形变量:_refCount,用作引用计数。

公有函数ref()和unref()用于实现_refCount的增加或减少。不需要直接调用。

作为保护成员存在的虚析构函数。

ref_ptr<>模板类:用于实现一个指向Referenced对象的智能指针,并对其引用计数器进行管理。

包含以下三个主要的组成部分:

一个私有指针_ptr:用于保存管理内存区域的地址。可以用get()方法返回_ptr的值。

为了使ref_ptr<>可以像正常指针一样工作,重载或定义了一些方法,如operator->()和

Operator->()等。

Valid方法用于判断ref_ptr<>是否为空,不为NULL则返回true。 总结:

1.将派生自Referenced的对象赋予ref_ptr<>变量,将自动调用Referenced::ref()并使引用计数加一。

2.如果将ref_ptr<>变量指向其他的对象,或者将其释放,那么将调用

Referenced::unref(),使引用计数减一,当引用计数的值为零时,unref()自动释放对象所占用的内存空间。

3.为新的Referenced对象开辟内存空间时,要尽量将其赋予ref_ptr<>,以保证osg的内存管理工作正确。

二.叶节点和几何信息 Geometry概述 向量与数组类:

Osg::vec3可用来保存顶点和法线数据;osg::vec4可用来保存颜色数据;osg::vec2可用来保存2d纹理坐标,还提供了相关的向量计算函数。

模板数组类:模板最常用法是保存向量数据,如osg::Vec2Array,osg::Vec3Array,osg::Vec4Array,所有的模板数组类都继承自std::vector

Drawables类

用于保存将要渲染的数据。是一个无法直接实例化的虚基类。Osg核心库从Drawables派生了三个子类:

Osg::DrawPixels,封装了glDrawPixels()的相关功能;osg::ShapeDrawable,提供了一些已经定义好的几何体的接口,如圆柱体和球;osg::Geometry,使用的多,灵活。

Geometry一些方法:

setVertexArray(),setColorArray(),setNormalArray()

setColorBinding(),setNormalBinding():设置颜色和法线绑定方式,参数是geometry的枚举变量 BIND_OFF=0,

BIND_OVERALL,

BIND_PER_PRIMITIVE_SET, BIND_PER_PRIMITIVE, BIND_PER_VERTEX

AddPrimitiveSet:用于设置Geometry类数据渲染的方法。参数为

PrimitiveSet* primitiveset:PrimitiveSet无法实例化的虚基类。PrimitiveSet的子类:DrawArrays(GLenum mode, GLint first, GLsizei count, int numInstances=0)。

叶节点

Osg::Geode是osg的叶节点,它用于保存几何信息用于渲染。 三组节点Group

允许用户程序为其添加任意数量的子节点,子节点本身也可以继续分发子节点。并且派生出了许多的子类:osg::Transform,osg::LOD,osg::Switch等。

由Referenced派生,可以自动管理内存空间。 Osg编程的核心部分,它使得用户应用程序可以有效组织场景图形中的数据,它的强大之处在于它管理子节点的接口,还从Node处继承了管理父节点的接口。

1.子接口:Group使用std::vector>来保存所有节点的指针,数组指针,因此可以使用索引来访问某个子节点。

2.父接口:Group从Node那里继承了父节点管理的接口,允许节点有多个父节点。

3.变换节点:Tranform对OpenGL的模型视图矩阵堆栈产生影响。虚基类,无法实例化。用户应当使用osg::MatrixTransform或osg::PositionAttitudeTransform来替代它,这两者均继承自Tranform。

Matrix:osg中的矩阵类,采用左乘,列数组矩阵,与opengl相反。 矩阵变换节点:MatrixTransform

MatrixTransform的内部使用了osg::Matrix对象,要创建一个执行变换的MatrixTransform节点,首先要创建变换矩阵Matrix并将其关联到MatrixTransform。

位置属性变换节点PositionAttitudeTransform

使用PositionAttitudeTransform节点可以实现使用Vec3位置坐标和一个四元数完成的变换操作。Osg使用Quat来保存四元数方位数据。

4.细节层次节点 LOD

LOD允许用户指定各个子节点的有效范围。该范围包括了最大及最小值,缺省情况下其意义表示为距离。

缺省条件下,LOD计算视点到物体包络体中心点的距离。如果这样并不符合渲染要求,那么用户可以指定一个自定义的中心点。