OSG库子动态库和插件等文件介绍
一、OpenSceneGraph (OSG) 介绍
1. 是什么?
OpenSceneGraph 是一个开源的、跨平台的、高性能的 3D 图形工具包(或称为场景图 API)。它使用 C++ 和 OpenGL 编写,为开发者提供了构建图形应用程序(尤其是实时可视化、仿真、游戏、虚拟现实和增强现实应用)所需的一系列强大功能。
2. 核心概念:场景图 (Scene Graph)
这是 OSG 的灵魂。场景图是一个用于组织和管理 3D 场景数据的树形数据结构。
-
节点 (Node): 树的基本元素。包括:
-
组节点 (Group Node): 如
osg::Group
,可以包含多个子节点,用于构建层次结构。 -
叶节点 (Leaf Node): 如
osg::Geode
(几何体节点),包含实际的绘图指令(Drawables)。
-
-
可绘制体 (Drawable): 如
osg::ShapeDrawable
,osg::Geometry
,定义了具体的几何形状(点、线、三角形等)。 -
状态 (State): 如
osg::StateSet
,定义了物体如何被渲染,包括材质、纹理、混合模式、着色器等。OSG 通过状态树 (State Tree) 优化渲染,自动合并具有相同状态的物体,减少 OpenGL 状态切换,极大提升性能。 -
访问器模式 (Visitor Pattern): OSG 提供了
osg::NodeVisitor
及其派生类来遍历和操作场景图,这是对场景进行更新、裁剪、渲染的核心机制。
3. 主要特点与优势
-
高性能: 通过场景图和状态优化,最大限度地发挥 OpenGL 和现代 GPU 的效能。
-
跨平台: 支持 Windows, Linux, macOS, iOS, Android, FreeBSD 等。
-
功能丰富: 内置了大量高级功能,如粒子系统、阴影、文本渲染、特效等。
-
数据加载能力强: 通过插件架构,支持超过 50 种 3D 文件格式(如 .osgb, .obj, .fbx, .3ds, .stl, .dae, .flt 等)。
-
活跃的社区: 拥有一个庞大而活跃的国际社区,提供丰富的文档、教程和第三方工具。
-
开源 (LGPL): 允许在开源和商业项目中使用。
二、核心及重要子动态库
OSG 采用模块化设计,功能被划分到不同的动态链接库(DLL / .so / .dylib)中。了解这些库是高效使用 OSG 的关键。以下是主要库的分类介绍:
第一类:核心库 (The Core Libraries)
库文件名 (Unix-like) | 库文件名 (Windows) | 说明 |
---|---|---|
libosg.so | osg.dll | OSG 核心库。包含场景图的核心功能:节点(Node)、可绘制体(Drawable)、状态(StateSet)、数学库(Vec3, Matrix)、访问器(Visitor)模式等。这是所有 OSG 程序都必须链接的基础库。 |
libosgViewer.so | osgViewer.dll | OSG 查看器库。提供了用于渲染场景图的窗口和视图器类,如 osgViewer::Viewer 。它处理窗口创建、相机设置、渲染循环和事件处理。绝大多数应用程序都需要它。 |
libosgDB.so | osgDB.dll | OSG 数据库插件库。这是 OSG 的数据读写核心。它本身包含一个插件架构,负责动态加载针对特定文件格式的插件(如 osgdb_obj.dll , osgdb_fbx.dll )。提供了 osgDB::readNodeFile() 这个最常用的读文件函数。 |
libosgUtil.so | osgUtil.dll | OSG 工具库。包含许多实用的工具类和算法,例如场景裁剪器(osgUtil::CullVisitor )、优化器(osgUtil::Optimizer )、三角化工具(osgUtil::Tessellator )等。 |
第二类:节点工具箱 (NodeKits)
这些库提供了用于构建复杂场景的专用节点类型。
库文件名 | 说明 |
---|---|
libosgAnimation.so | 动画库。提供骨骼动画、关键帧动画、变形目标动画等高级动画功能的节点和控制器。 |
libosgParticle.so | 粒子系统库。用于创建和管理火焰、烟雾、爆炸、雨雪等粒子效果。 |
libosgFX.so | 特效库。提供了一些开箱即用的渲染特效,如凹凸贴图(AnisotropicLighting)、卡通渲染(Cartoon)、轮廓线(Outline)等。 |
libosgSim.so | 仿真特效库。包含用于仿真领域的特殊节点,如高度雾(HeightFog)、光点(LightPointNode,用于模拟跑道灯等)、DOF 变换(模拟多自由度设备)。 |
libosgText.so | 文本库。提供高质量的文本渲染支持,可以使用系统字体或纹理字体在 3D 空间中显示文字。 |
libosgTerrain.so | 地形库。提供用于处理和渲染大规模地形数据的专用节点和工具。 |
libosgVolume.so | 体渲染库。用于科学可视化中的体绘制(Volume Rendering),例如渲染医学CT、MRI数据。 |
libosgShadow.so | 阴影库。提供了多种实时阴影技术的实现,如阴影贴图、软阴影等。 |
libosgManipulator.so | 操纵器库。提供了用于在 3D 场景中交互式操纵物体的工具,如平移、旋转、缩放手柄。 |
libosgUI.so | UI 库。提供了在 3D 场景中创建简单用户界面元素(如按钮、文本框)的功能。 |
第三类:交互与窗口工具 (Interaction & Windowing Tools)
库文件名 | 说明 |
---|---|
libosgGA.so | OSG 图形操作库。处理图形用户交互事件(GUI Events)。它包含各种相机操纵器(Camera Manipulator),如 TrackballManipulator (轨迹球)、DriveManipulator (驾驶)、FlightManipulator (飞行),用于响应鼠标和键盘事件来控制场景视 |