开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天
1 概述
通过前面的介绍已经了解,OpenSceneGraph及其扩展位于系统的API一级,即系统的底层绘图硬件和相应的软件驱动程序之上封装了OpenGL,并对其余的底层图形显示方式予以支持,利用OpenSceneGraph可以轻松地开发其上层的应用程序。OSG层次结构图如下图所示。
在进一步学习OSG之前,有必要学习OSG的组成模块,从而有利应用程序 于从总体上把握学习OSG及应用OSG开发的方向。
OSG主要包括4个库,下面分别进行介绍。
2 OSG核心库(Core Library)
OpenGL 核心库是OSG的核心,也是其存在且不断得到发展的根本原因。
图形硬件 它的主要功能就是实现最核心的场景数据库的组织和管理、对场景图形的操作以及为外部数据库的导入提供接口等。它主要包括以下4个库。
- osg库:基本数据类,负责提供基本场景图类,构建场景图形节点,如节点类、状态类、绘制 类、向量和矩阵数学计算以及一般的数据类。同时,它包含一些程序所需要的特定功能类,如命令行解析和错误调试信息等。
- osgUtl库:工具类库,提供通用的公用类,用于操作场景图形及内容,如更新、裁减、遍历、 数据统计及场景图的一些优化。
- osgDB库:数据的读写库,负责提供场景中数据的读写工作,提供了一个文件工具类,注意, OSG中场景图管理是通过遍历场景图层次结构来完成大部分的数据处理工作的。
- osgViewer库:是在OSG2.0后逐步发展稳定的一个视窗管理库,可以集中各种窗体系统,提供OSG与各种GUI的结合。因此,它是跨平台的3D管理窗口库。
3 OSG工具库(NodeKit)
OSG工具库主要是对OSG核心库中osg库的扩充,是对OSG核心库的一个补充,它实现了一些特定的功能。它主要包括以下6个库。
- osgFX库:特殊效果节点工具,用于渲染特效节点,包括异性光照特效(osgFX:AnisotropicLighting)、凹凸贴图特效(osgFX:BumpMapping)、卡通渲染特效(osgFX::Cartoon)、刻 线特效(osgFX::Scribe)和立方图镜面高光特效(osgFX::SpecularHighlights)等。
- osgParticle 库:粒子系统的节点工具,用于模拟各种天气或者自然现象效果,如雨效、雪效和爆炸模拟等。
- osgSim库:虚拟仿真效果的节点工具,用于特殊渲染,如地形高程图、光点节点和DOF变换节点等。
- osgTerrain 库:生成地形数据的节点工具,用于渲染高程数据,如TIF、IMAGE和DEM等各 种高程数据格式。注意,OSG通过一个开源库GDAL 读取这些高程数据。
- osgText库:文字节点工具,用于向场景中添加文字信息,它完全支持TrueType 字体。
- osgShadow库:阴影节点工具,用于向场景中添加实时阴影,提高场景渲染的真实性。
4 OSG插件库
OSG插件库是OSG的一个非常重要的特点。通过各种第三方库的支持,OSG能够直接或间接地导入3D模型或图片等场景数据,可以省去大量绘制图形的工作,从而极大地方便了开发者,具体支持的各种数据格式可参见第5章。
5 OSG内省库(osgIntrospection)
OSG 内省库提供了一个与语言无关的运行程序接口,确保了 OSG可以在更多的环境下运行。osgIntrospection 库允许软件系统使用反射式和自省式的编程范例与OSG交互。
应用程序和软件可以使用 osglntrspection 库和方法迭代OSG的类型、枚举量和方法,并且不需要了解OSG 编译和链接时的过程,即可调用这些方法。Smalltalk 和Objective—C 等语言包括了内建的反射式和自省式支持,但是C++的开发者通常无法运用这些特性,因为C++并未保留必要的元数(metadata)。
为了弥补C++的这一不足,OSG提供了一系列自动生成的、从OSG源代码创建的封装库。用户程序不需要与OSG的封装直接交互,它们将由osgintrospection 整体进行管理。由于osgIntrospection及其封装的结果,许多的 语言,如Java、TCL、Lun和Python,都可以与OSG进行交互。
综上所述,OSG的组成模块如下图所示。