一. OSG组件
OSG 运行时文件由一系列动态链接库(或共享对象)和可执行文件组成。这些链接库可分为以下五大类:
1. OSG 核心库。
2. NodeKits。
3. OSG 插件。
4. 互操作库。
5. 不断扩展中的程序和示例集。
二. OSG核心库
OSG 核心库提供了用于场景图形操作的核心场景图形功能、类和方法;主要包含一下四个链接库:
1. osg库:osg 库包含了用于构建场景图形的场景图形节点类,用作向量和矩阵运算的类,几何体类,以及用于描述和管理渲染状态的类。
2. osgUtil库:osg工具库包括的类和函数,可以用于场景图形及其内容的操作,场景图形数据统计和优化,以及渲染器的创建。还包括几何操作的类。
3. osgDB库:包括了建立和渲染3D数据库的类和函数。其中包括用于2D和3D文件读写的OSG插件类的注册表。
4. osgViewer库:包括场景中视口及可视化内容的管理类。
osg链接库:
一. 场景图形类
场景图形类用于辅助场景图形的构建。所有场景图形类都继承自osg::Node。从概念上分,根节点、组节点、叶节点。
1. Node:所有节点的基类。包括场景图形的遍历(Traverse)、挑选(Cull)、程序回调(Callback )以及状态管理。
2. Group:所有可分支节点的基类。是场景图形组织结构的关键类。
3. Geode:即Geometry Node,相当于OSG中的叶节点。没有子节点但包括osg::Drawable对象,Drawable对象中用于存放要被渲染的几何体。
4. LOD:层次节点类,根据观察点与图像子节点的距离选择显示子节点。通常使用它来创建场景中物体的多个显示层级。
5. MatrixTransform:包含用于实施子节点几何体空间转换的矩阵,包括旋转、平移、缩放、倾斜、映射等。
6. Switch:用布尔掩码来允许或禁止子节点的运作。
7. ……………
二. 几何体类
Geode类是OSG的叶节点,包含了渲染用的几何数据。常见的可以用于Geode中几何数据的存储的类有:
1. Drawable:是所有存储几何数据信息类的基类,纯基类。
2. Geometry:与PrimitiveSet类相关联,对OpenGL顶点数组功能的高级封装。Geometry 保存顶点的数据,纹理坐标,颜色,以及法线数组。
3. PrimitiveSet:提供OpenGL顶点数组绘图命令的高层次支持。可以从相关的Geometry 类中取得保存的数据,再使用这个类来指定要绘制的几何体数据的类型。
4. Vector类:Vec2、Vec3等。提供预定义的二三四维向量。用类指定顶点、颜色、法线和纹理坐标等信息。
5. Array类:Vec2Array、Vec3Array等。):OSG 定义了一些常用的数组类型,如用于贴图纹理坐标的Vec2Array。指定顶点数组数据时,程序首先将几何数据保存到这些数组中,然后传递至Geometry 类对象。
三. 状态管理类
OSG 提供了一种机制,用以保存场景图形所需的OpenGL 渲染状态。在拣选遍历中,同一状态的几何体将被组合集中到一起以使状态的改变呈最小化。在绘制遍历中,状态管理代码将记录当前状态的历史轨迹,以清除冗余的渲染状态变更。
1. SateSet类:保存一组定义状态数据(模式和属性)。场景中任何osg::Node都可以与一个StateSet相关联。
2. Modes(模式):与OpenGL中glEnable()和glDisable()相似。用于打开或关闭OpenGL 固定功能(fixed-function)的渲染管道,例如灯光,混合和雾效。方法 osg::StateSet::setMode()在StateSet 中保存一个模式信息。
3. Attibutes(属性):使用属性来指定状态参数,例如混和函数,材质属性,雾颜色等。方法osg::StateSet::setAttribute()在StateSet 中保存属性信息。
4. 纹理模式和属性:纹理模式和属性可应用在OpenGL 多重纹理的某个指定纹理单元上。应用程序必须在设定纹理模式和属性时提供纹理单元的信息,StateSet类的方法setTextureMode()和setTextureAttribute()用于设定状态参量以及纹理单元信息。
5. 继承标志:OSG 提供了一些标志量,用于控制场景图形遍历中的状态值。缺省情况下,子节点中的状态集合将重载父节点的状态集合。
四.其它实用类
1. Referenced:Referenced 类是所有场景图形节点和OSG 的许多其它对象的基类。它实现了一个用于跟踪内存使用情况的引用计数(reference count)。引用计数的数值到达0,那么系统将自动调用其析构函数并清理为此对象分配的内存。
2. ref_ptr<>: 模板类ref_ptr<>为其模板内容定义了一个智能指针,模板内容必须继承自Referenced 类。
3. Object:纯虚类Object 是OSG 中一切需要I/O 支持,拷贝和引用计数的对象的基类。
4. Notify:osg 库提供了一系列控制调试,警告和错误输出的函数。
osgUtil链接库
一. 交运算(Intersection )
一般来说,3D 程序需要为用户提供一些实现交互和选择的功能,比如图形对象的拾取。通过提供大量用于场景图形交运算的类,osgUtil 库可以高效地支持拾取操作。
1. Intersector:纯虚类,定义相交测试的接口。
2. IntersectionVisitor: 搜索场景图形中与指定几何体相交的节点。而最后相交测试的工作将在Intersector的继承类中完成。
3. LineSegmentIntersector:继承自Intersector 类,用于检测指定线段和场景图形之间的相交情况,并向程序提供查询相交测试结果的函数。
4. PolytopeIntersector:继承自Intersector 类,用于检测由一系列平面构成的多面体的相交情况。
5. PlaneIntersector:与LineSegmentIntersector 类似,这个类用于检测由一系列平面构成的平面的相交情况。
二。优化
osgUtil 库包含的类可以遍历并修改场景图形,以实现渲染的优化和收集场景统计信息的目的。
1. Optimizer:Optimizer 类用于优化场景图形。其属性使用一组枚举标志进行控制,每一个标志都表示一种特定的优化方式。例如,FLATTEN_STATIC_TRANSFORMS 使用非动态Transform 节点来变换几何体,通过清除对OpenGL的model-view 矩阵堆栈的修改,实现场景的渲染优化。
2. Statistic和StatsVisitor:为能够高效地设计3D 应用程序,开发者应当对将要渲染的对象有尽量多的了解。StatsVisitor类返回一个场景图形中节点的总数和类型,而Statistics 类返回渲染几何体的总数和类型。
三。几何体操作
许多3D 程序都需要对读入的几何体进行修改,以获得所需的性能和渲染效果。osgUtil 库包含的类支持一些通用的几何形体运算。
1. Simplifier:使用Simplifier 类减少Geometry 对象中几何体的数目,这有助于低细节层次的自动生成。
2. Tessllator:Tessellator 类可根据一组顶点的列表,生成由前述顶点列表所描述的多边形,即一个osg::PrimitiveSet。
3. DelaunayTriangulator:实现了Delaunay 三角网格化运算,根据一组顶点的集合生成一系列的三角形。
4. TriStripVisitor:TriStripVisitor 类可遍历场景图形并将多边形图元转换成三角形和四边形条带。
5. SmoothingVisitor:SmoothingVisitor 类可生成顶点法线,也就是所有共享此顶点的面的法线平均值。
6. 纹理贴图生成:osgUtil 库包含了帮助建立反射贴图,中途向量(half-way vector)贴图,以及高光贴图的代码。
osgViewer 链接库
osgViewer 库定义了一些视口类,因而可以将OSG 集成到许多视窗设计工具中。支持单窗口/单视口的程序,也支持使用多个视口和渲染器的多线程程序。
1. SimpleViewer:该类负责管理单一场景图形中的单一视口。使用SimpleViewer 时,应用程序必须创建一个窗口并设置当前的图形上下文(graphics context)。
2. Viewer:用于管理多个同步摄像机,他们将从多个方向渲染单一的视口。
3. CompositeViewer:CompositeViewer 类支持同一场景的多个视口,也支持不同场景的多个摄像机。如果指定各个视口的渲染顺序,用户就可以将某一次渲染的结果传递给别的视口。CompositeViewer 可以用来创建抬头数字显示(HUD),预渲染纹理(prerender textures),也可以用于在单一视口中显示多个视图。
NodeKits
NodeKits 扩展了Nodes,Drawables 和StateAttributes 的概念,也可以看作是OSG 内核中osg 库的一种扩展。
1. osgFX库:提供了额外的场景图形节点,以便于特效的渲染,例如异向光照(anisotropic lighting),凹凸贴图,卡通着色等。
2. osgParticle库:提供了基于粒子的渲染特效,如爆炸、火焰、烟雾等。
3. osgSim库:提供了仿真系统中以及渲染OpenFlight 数据库所需的特殊渲染功能,例如地形高程图,光点节点,DOF 变换节点等。
4. osgTerrain库:提供了渲染高度场数据的能力。
5. osgShadow库:提供了支持阴影渲染的框架结构。
程序与示例
OSG 发行版包含了五个常用的OSG 工具程序,它们对于调试和其它基于OSG 的软件开发均十分有益。
1. osgarchive:这个程序用于向.osga 文件包中添加新的文件。也可以用这个程序实现包的分解和列表。
2. osgconv:这个程序用于转换文件格式。尤其有用的是,它可以将任意文件格式转换为经过优化的.ive 格式。
3. osgdem:这个程序用于将高程图等高度数据及图像数据转换为分页的地形数据库。
4. osgversion:这个程序将当前OSG 版本以及一些记录了OSG 源代码改动情况和贡献者信息送入std::cout。
5. osgviewer:这是一个灵活而强大的OSG 场景及模型浏览器。