目 录
第1章 OpenSceneGraph概述 1
1.1 OpenSceneGraph简介 2
1.1.1 什么是OpenSceneGraph 2
1.1.2 OpenSceneGraph的历史和发展 2
1.1.3 OSG中国 3
1.1.4 OSG组成模块 3
1.2 开发的预备知识 5
1.3 OSG的安装及编译 6
1.3.1 OSG的获取及安装 6
1.3.2 编译OSG 7
1.3.3 OSG邮件列表 13
1.4 OSG基础 14
1.4.1 开发环境设置 14
1.4.2 OSG中的HelloWorld工程 14
1.4.3 OSG实用工具——场景浏览器osgViewer 17
1.4.4 OSG实用工具——版本信息查看器
osgVersion 21
1.4.5 OSG实用工具——场景图形压缩归档工具
osgArchive 21
1.4.6 OSG实用工具——数据转换工具
osgConv 23
第2章 OpenSceneGraph数学基础 27
2.1 坐标系统 28
2.2 坐标系变换 29
2.2.1 世界坐标系-物体坐标系变换 30
2.2.2 物体坐标系-世界坐标系变换 30
2.2.3 世界坐标系-屏幕坐标系变换 32
2.3 向量、矩阵及四元数 34
2.3.1 向量 34
2.3.2 矩阵 35
2.3.3 四元数 36
2.3.4 矩阵与四元数之间的转换 37
第3章 场景的组织及渲染 41
3.1 OSG场景树 42
3.1.1 OSG场景树节点 42
3.1.2 OSG中的父节点与子节点 42
3.2 Geode 43
3.2.1 Billboard节点 43
3.2.2 布告板示例 44
3.3 Group 48
3.3.1 位置变换节点 48
3.3.2 位置变换节点示例 49
3.3.3 矩阵变换节点 50
3.3.4 矩阵变换节点示例 51
3.3.5 自动对齐节点 53
3.3.6 自动对齐节点示例 53
3.3.7 开关节点 56
3.3.8 开关节点示例 57
3.3.9 细节层次节点 58
3.3.10 细节层次节点示例 59
3.3.11 分页细节层次节点 61
3.3.12 分页细节层次节点示例 61
3.3.13 替代节点 63
3.3.14 替代节点示例 64
3.3.15 遮挡裁剪节点 66
3.3.16 遮挡裁剪节点示例 67
3.3.17 坐标系节点 70
3.3.18 坐标系节点示例 71
3.4 场景中节点的拷贝——
osg::CopyOp类 73
3.4.1 自定义场景拷贝示例(一) 73
3.4.2 自定义场景拷贝示例(二) 79
第4章 OSG中几何体的绘制 83
4.1 场景基本绘图类 84
4.2 基本几何体的绘制 86
4.2.1 几何体类 86
4.2.2 基本几何体绘制示例 87
4.2.3 索引绑定几何体绘制示例 90
4.3 使用OSG中预定义的几何体 93
4.3.1 osg::Shape类 93
4.3.2 osg::ShapeDrawable类 94
4.3.3 网格化类 94
4.3.4 预定义几何体示例 95
4.4 多边形分格化 97
4.5 几何体操作 101
4.5.1 简化几何体 102
4.5.2 简化几何体示例 102
4.5.3 Delaunay三角网绘制 104
4.5.4 Delaunay三角网绘制示例 105
4.5.5 三角带绘制 107
4.5.6 三角带绘制示例 108
4.5.7 生成顶点法向量 111
4.5.8 生成顶点法向量示例 112
第5章 渲染状态、纹理与光照 115
5.1 渲染状态 116
5.1.1 osg::StateSet类 116
5.1.2 渲染属性和渲染模式 117
5.1.3 状态继承 118
5.1.4 渲染状态示例 119
5.2 纹理映射 121
5.2.1 二维纹理映射 123
5.2.2 二维纹理映射示例 126
5.2.3 多重纹理映射 129
5.2.4 多重纹理映射示例 129
5.2.5 Mipmap纹理映射 131
5.2.6 Mipmap纹理映射示例 132
5.2.7 TextureRectangle纹理映射 138
5.2.8 TextureRectangle纹理映射示例 139
5.2.9 自动生成纹理坐标 142
5.2.10 自动生成纹理坐标示例 142
5.2.11 计算纹理坐标 144
5.2.12 计算纹理坐标示例 145
5.2.13 立方图纹理 149
5.2.14 立方图纹理示例 150
5.2.15 渲染到纹理 155
5.2.16 渲染到纹理示例 155
5.2.17 一维纹理 162
5.2.18 一维纹理示例 162
5.2.19 三维纹理映射 164
5.2.20 三维纹理映射示例 166
5.3 光照 171
5.3.1 osg::Light类 171
5.3.2 osg::LightSource类 172
5.3.3 场景中使用光源 173
5.3.4 简单光源示例 174
5.3.5 聚光灯示例 176
5.4 材质 182
5.4.1 材质类 182
5.4.2 材质类示例 184
第6章 文件的读写 187
6.1 OSG支持的文件格式 188
6.1.1 三维模型文件格式 188
6.1.2 图片及视频文件格式 189
6.1.3 打包及网络传输格式 189
6.1.4 字体文件格式 190
6.1.5 伪插件文件格式 190
6.1.6 .osg文件和.ive文件 190
6.2 文件读取的流程 191
6.2.1 osgDB库 191
6.2.2 文件的读取与保存 191
6.2.3 文件读写示例 192
6.2.4 文件读写进度 194
6.2.5 文件读取进度示例 195
6.3 插件的工作机制 198
6.3.1 插件的搜索和注册 198
6.3.2 osgArchive读写流程 199
6.3.3 自定义文件插件 200
6.3.4 自定义文件格式读写插件示例 202
6.4 读写中文文件名及中文路径问题 206
6.5 osgEXP导出文件 209
第7章 场景图形的工作机制 213
7.1 内存管理 214
7.1.1 Referenced类 214
7.1.2 ref_ptr<>模板类 214
7.1.3 智能指针 215
7.2 访问器机制 215
7.2.1 访问器设计模式 215
7.2.2 osg::NodeVisitor类 216
7.2.3 顶点访问器示例 217
7.2.4 纹理访问器示例 220
7.2.5 节点访问器示例 223
7.3 回调机制 227
7.3.1 osg::NodeCallback类 227
7.3.2 节点回调示例 228
7.3.3 事件回调示例 230
7.3.4 文件读取回调示例 232
7.4 数据变量 235
第8章 场景图形管理 237
8.1 视图与相机 238
8.1.1 osg::Camera类 238
8.1.2 裁剪平面示例(一) 243
8.1.3 裁剪平面示例(二) 244
8.1.4 单视图与相机 246
8.1.5 宽屏变形示例 247
8.1.6 单视图多相机渲染示例 249
8.1.7 多视图与相机 252
8.1.8 多视图相机渲染示例 253
8.1.9 多视图多窗口渲染示例 257
8.2 场景交互与场景漫游 259
8.2.1 osgGA库 259
8.2.2 键盘事件消息处理 261
8.2.3 抓图示例 262
8.2.4 场景漫游 265
8.2.5 自定义操作器场景漫游示例 266
8.2.6 路径漫游 275
8.2.7 路径漫游示例 276
8.3 交运算与对象选取 277
8.3.1 交运算 278
8.3.2 显示位置及拾取示例 280
8.3.3 对象选取示例 285
第9章 OSG文字 289
9.1 osgText 290
9.1.1 osgText::Text类 290
9.1.2 osgText::Font类 293
9.1.3 显示汉字示例 294
9.1.4 各种文字效果(边框、阴影及颜色倾斜)
示例 296
9.1.5 HUD显示汉字示例 300
9.1.6 渐变文字 303
9.1.7 渐变文字示例 304
9.2 osgText3D 306
9.2.1 osgText::Text3D类 307
9.2.2 3D汉字显示示例 307
第10章 OSG动画与声音 311
10.1 路径动画 312
10.1.1 osg::AnimationPath类 312
10.1.2 osg::AnimationPathCallback类 314
10.1.3 路径动画控制及显示示例 314
10.1.4 路径的导出示例 318
10.1.5 路径的导入示例 321
10.2 帧动画 323
10.2.1 osg::Sequence类 324
10.2.2 帧动画显示与控制示例 325
10.3 骨骼动画osgCal 329
10.3.1 Cal3D简介及Cal3D导出 329
10.3.2 编译osgCal 330
10.3.3 骨骼动画osgCal示例 331
10.4 三维立体声音osgAL 336
10.4.1 OpenAL简介 336
10.4.2 osgAL编译 337
10.4.3 osgAL声音播放示例 338
10.4.4 osgAL声音动态加载及播放示例 343
第11章 OSG粒子系统与阴影 351
11.1 粒子系统 352
11.1.1 粒子系统的主要模块 352
11.1.2 粒子系统的模拟过程 354
11.1.3 雾效模拟示例 354
11.1.4 雪效模拟示例 357
11.1.5 雨效模拟示例 359
11.1.6 爆炸模拟示例 360
11.1.7 自定义粒子系统示例(一) 362
11.1.8 自定义粒子系统示例(二) 365
11.1.9 粒子系统的读取与保存 369
11.2 OSG阴影 372
11.2.1 osgShadow库 372
11.2.2 阴影示例 374
第12章 osgFX扩展库及osgSim
扩展库 381
12.1 osgFX扩展库 382
12.1.1 异性光照特效 382
12.1.2 异性光照特效示例 383
12.1.3 凹凸贴图特效 384
12.1.4 凹凸贴图特效示例 386
12.1.5 卡通渲染特效 387
12.1.6 卡通渲染特效示例 388
12.1.7 刻线特效 390
12.1.8 刻线特效示例 390
12.1.9 立方图镜面高光特效 392
12.1.10 立方图镜面高光特效示例 393
12.2 osgSim扩展库 394
12.2.1 DOFTransform类 394
12.2.2 osgSim::Impostor类 397
12.2.3 osgSim::ImpostorSprite类 398
12.2.4 osgSim::MultiSwitch类 399
12.2.5 osgSim::OverlayNode类 400
12.2.6 osgSim::VisibilityGroup类 402
第13章 OSG地形与地理信息 403
13.1 VirtualPlanetBuilder 404
13.1.1 VirtualPlanetBuilder简介 404
13.1.2 编译与参数说明 407
13.1.3 使用实例及说明 411
13.2 海量地形生成解决方案 412
13.3 osgGIS 414
13.3.1 osgGIS简介 414
13.3.2 osgGIS编译 414
13.4 osgGIS实用工具 415
13.4.1 osggis_build 415
13.4.2 osggis_mapper 416
13.4.3 osggis_makelayer 416
13.4.4 osggis_simple 418
13.4.5 osggis_viewer 419
13.5 GIS坐标系 419
13.5.1 GIS中坐标系的定义 419
13.5.2 地理坐标系与投影坐标系 420
参考文献 423
OpenSceneGraph(OSG)是一个跨平台、高性能的开源三维图形渲染引擎,它基于工业标准OpenGL。OSG以场景图为基础,采用模块化设计,具有高度的可扩展性,并提供了丰富的三维图形功能和优化技术,广泛应用于虚拟现实、游戏开发、科学可视化等领域。
第1章主要介绍了OSG的基本概念、历史发展、在中国的应用(OSG中国),以及OSG的组成模块。本章对OSG的预备知识进行了概览,并详细说明了OSG的安装、编译和使用邮件列表等基础知识。
第2章专注于OSG的数学基础,包括坐标系统的介绍、坐标变换(世界坐标系、物体坐标系以及世界坐标系到屏幕坐标系的变换)、向量、矩阵和四元数的基本概念,以及它们在图形学中的应用。该章还探讨了矩阵与四元数之间的转换方法。
第3章讲述了场景的组织和渲染,讲解了OSG场景树的结构,包括节点的概念、父子关系,以及场景图中的各类节点,例如Group、Billboard、Geode等,它们的使用场景和功能。该章还介绍了节点拷贝时的一些注意事项。
第4章深入探讨了几何体的绘制,包括OSG提供的基本绘图类和几何体绘制方法,预定义几何体的使用,多边形分格化技术,以及几何体的操作。通过示例演示了如何简化几何体、计算顶点法向量等高级技术。
第5章聚焦于渲染状态、纹理映射与光照,分别介绍了渲染状态类(osg::StateSet)、各种纹理映射技术(二维、多重、Mipmap、TextureRectangle、立方图、一维和三维纹理映射),以及光照模型(osg::Light、osg::LightSource类)和材质的应用。
第6章涉及文件的读写,解释了OSG支持的文件格式、文件读取的流程、插件的工作机制、读写进度的跟踪以及读写中文文件名和路径问题。该章还提供了自定义文件插件和读写插件示例,以及导出文件的讨论。
第7章讲述了场景图形的工作机制,重点介绍了内存管理、访问器机制、回调机制和数据变量。通过这些机制,开发者可以高效地管理场景图形并响应各种事件。
第8章讨论了场景图形管理,涵盖了视图与相机的使用、场景交互、场景漫游、交运算和对象选取。这一章详细地介绍了如何控制相机、处理键盘事件、抓图以及如何实现场景漫游。
第9章关注于OSG中的文字支持,包含了osgText和osgText3D的使用方法,以及如何在三维空间中显示文字和应用各种文字效果(如边框、阴影、颜色倾斜)。
第10章深入讲解了OSG中的动画与声音技术,包括路径动画、帧动画、骨骼动画和三维立体声音。这部分内容涉及了动画路径的控制、序列动画的实现、骨骼动画的处理以及声音的播放。
第11章探讨了OSG粒子系统与阴影的实现。粒子系统涵盖了模拟不同自然现象(如雾、雪、雨、爆炸)的技术。阴影部分介绍了osgShadow库的使用方法和阴影实现的技术。
第12章介绍了osgFX扩展库和osgSim扩展库。osgFX提供了各种图形特效,如异性光照、凹凸贴图、卡通渲染等。osgSim扩展库则提供了用于大规模地形渲染和模拟的实用工具。
第13章讨论了OSG地形与地理信息的应用,详细介绍了VirtualPlanetBuilder和osgGIS的使用方法,并提出了大规模地形渲染的解决方案。
本书系统地介绍了OSG的各个方面,从基础概念到高级技术,从核心功能到扩展应用,覆盖了开发者在使用OSG进行三维图形开发时可能遇到的各种需求。掌握了这些知识,开发者不仅可以构建出高性能的图形应用,还能在虚拟现实等领域实现复杂的视觉效果。本书要求读者具备一定的C++编程能力和三维数学知识,对于希望深入了解和应用OpenGL与OSG的读者来说,是一本难得的参考资料。
- 1
- 2
- 3
- 4
- 5
- 6
前往页