简介
OpenSceneGraph(OSG)是一个基于工业图形标准OpenGL的高层次图形
开发APl接口,一款开放源代码的、具备商业级别渲染能力的实时三维渲染
引擎,在国内外均已得到广泛的应用,并且已经有越来越多的虚拟现实行
业开发者加入到OSG开发的行列中来。
本书的编写目的是:详细剖析OpenSceneGraph引擎的实现流程,包括
其场景图形结构,几何体绘制和渲染状态的封装机制,场景漫游、交互和
动画的实现方式,以及最为重要的对于三维渲染引擎的内部裁减、数据动
态调度和多线程渲染机制的深入分析。本书对虚拟现实行业的爱好者和从
业者、对愿意了解最新图形学相关技术发展,以及有志于开发自主知识产
权的三维引擎系统的读者,均会大有助益。
本书可以作为计算机图形学或虚拟现实专业的高年级本科生和研究生
教材使用,也可供三维图形学领域的专门研发人员,尤其是使用
0penSceneGraph进行项目开发和科学研究的人员参考、学习。
目录
第1章 初识openscenegraph(osg). 1
1.1 场景图形初步 2
1.1.1 场景图形的概念 2
1.1.2 具体实现:三维渲染引擎 2
1.1.3 主流渲染引擎介绍 3
1.2 openscenegraph概述 4
1.2.1 诞生与发展 4
1.2.2 优势与不足 5
1.3 openscenegraph的组成结构 6
1.3.1 核心结构 6
1.3.2 资源获取 8
1.3.3 中文社区 8
第2章 osg的安装与调试 9
2.1 快速安装和使用 10
2.1.1 下载预编译包 10
2.1.2 设置环境变量 11
2.1.3 建立工程环境 13
2.1.4 范例:第一个程序 15
2.2 从源代码进行编译 16
2.2.1 osg源代码的获取与更新 16
.2.2.2 编译环境生成工具cmake 19
2.2.3 基本编译选项 22
2.2.4 高级编译选项 25
2.3 调试输入与输出 28
2.3.1 命令行输入 28
2.3.2 调试输出 29
第3章 开发预备知识 31
3.1 基本数学组件 32
3.1.1 二维与多维向量 32
3.1.2 四元数 35
3.1.3 矩阵 37
3.1.4 包围体 41
3.2 数组对象 44
3.2.1 数据数组 44
3.2.2 数据索引数组 46
3.3 内存管理机制 47
3.3.1 智能指针 48
3.3.2 参照对象 51
3.3.3 范例:智能指针的使用 52
第4章 场景的组织结构 55
4.1 节点的定义与种类 56
4.1.1 场景图形bvh树 56
4.1.2 节点的父子关系 58
4.1.3 叶节点与组节点 59
4.1.4 节点的功能与分类 62
4.2 节点的访问 65
4.2.1 访问器机制 65
4.2.2 节点的遍历函数 67
4.2.3 范例:节点属性访问器 68
4.2.4 节点的更新与事件回调 70
4.2.5 范例:使用回调实现旋转动画 71
4.3 重要节点的功能实现 74
4.3.1 空间变换节点 74
4.3.2 范例:使用空间变换节点 79
4.3.3 开关节点 81
4.3.4 范例:使用开关节点 82
4.3.5 细节层次节点(lod) 83
4.3.6 范例:使用lod节点 85
4.3.7 范例:节点代理 86
第5章 绘制几何对象与文字 89
5.1 几何元素的储存 90
5.1.1 顶点属性 90
5.1.2 顶点数组、显示列表和vbo 91
5.1.3 构建几何体对象 94
5.1.4 范例:简易房屋 100
5.2 几何元素的绘制与访问 103
5.2.1 几何体的绘制实现函数 103
5.2.2 数据的更新显示 108
5.2.3 几何体的更新回调 109
5.2.4 范例:跃动的线 110
5.2.5 信息获取和统计 112
5.2.6 范例:使用仿函数遍历几何体 113
5.3 位图的显示 116
5.3.1 图像与图像的绘制 116
5.3.2 范例:在场景中绘制位图 119
5.4 文字的显示 120
5.4.1 文字的绘制方法 120
5.4.2 文字的绘制实现函数 123
5.4.3 字符编码格式 124
5.4.4 范例:一首古诗 127
第6章 设置纹理和渲染属性 131
6.1 渲染属性与模式 132
6.1.1 opengl中的渲染状态设置 132
6.1.2 节点的渲染状态集合 132
6.1.3 渲染属性概览 135
6.2 纹理与纹理属性 139
6.2.1 纹理的实现方法 139
6.2.2 纹理的分类 143
6.2.3 范例:场景中的纹理设置 146
6.2.4 范例:纹理的明细层次(mipmap) 149
6.3 属性的实现与访问 152
6.3.1 将属性应用到场景 152
6.3.2 渲染状态集回调 153
6.3.3 范例:雾参数的实时更新 153
6.4 osg与opengl着色语言 155
6.4.1 opengl着色语言 155
6.4.2 着色器属性 159
6.4.3 一致变量回调 162
6.4.4 范例:在场景中使用glsl着色语言 162
第7章 观察我们的世界 167
7.1 场景的观察与变换 168
7.1.1 opengl中的变换 168
7.1.2 相机节点 171
7.1.3 范例:鸟瞰图相机 174
7.2 图形设备接口 176
7.2.1 图形设备与相机 176
7.2.2 窗口与像素缓存(pixel buffer) 179
7.2.3 渲染到纹理(render to texture) 181
7.2.4 范例:将场景渲染到纹理 183
7.3 视景器 186
7.3.1 视景器的主要工作 186
7.3.2 单视景器与多视景器 188
7.3.3 范例:投影墙显示 191
7.3.4 范例:多视景器系统 192
7.3.5 视景器辅助部件 194
第8章 人机交互与图形用户接口 197
8.1 获取鼠标和键盘消息 198
8.1.1 事件适配器 198
8.1.2 动作适配器 202
8.1.3 事件队列与处理器 203
8.1.4 范例:处理键盘事件.. 205
8.2 三维人机交互工具 207
8.2.1 漫游器 207
8.2.2 拖曳器 210
8.2.3 范例:场景拖曳器的实现 214
8.3 二维图形用户接口 217
8.3.1 窗口设备 217
8.3.2 windows下窗口设备的实现 219
8.3.3 范例:使用windows api构建渲染窗口 221
第9章 场景中的动画效果 225
9.1 场景动画基本组件 226
9.1.1 关键帧 226
9.1.2 采样与插值 228
9.1.3 动画频道 231
9.1.4 动画更新回调 236
9.1.5 范例:关键帧路径动画 239
9.2 刚体动画 242
9.2.1 简单路径动画 242
9.2.2 范例:使用路径动画回调 244
9.2.3 动画的多频道融合 245
9.2.4 范例:基本动画管理器 246
9.3 角色与变形动画 249
9.3.1 骨骼动画 249
9.3.2 范例:骨骼运动 252
9.3.3 变形体 255
9.3.4 范例:对折硬纸 257
9.4 渲染状态与纹理动画 259
9.4.1 渐进动画(ease motion) 259
9.4.2 范例:物体的淡入淡出 262
9.4.3 纹理动画 264
9.4.4 范例:纹理动画效果 266
第10章 文件的读写机制 269
10.1 数据文件支持机制 270
10.1.1 文件格式概述 270
10.1.2 osg支持的文件格式 272
10.1.3 基本文件读写接口 277
10.2 文件读写插件 279
10.2.1 插件的编写和注册 279
10.2.2 插件的职责链机制 283
10.2.3 文件读写回调 285
10.3 插件设计方法 287
10.3.1 范例:简单插件设计 287
10.3.2 范例:文件读取进度 290
10.4 osg(即.osg)格式及其扩展 292
10.4.1 封装器 292
10.4.2 场景扩展库插件 295
第11章 场景的动态更新与裁减 297
11.1 场景的更新流程 298
11.1.1 人机交互事件的更新 298
11.1.2 用户请求与系统调度的更新 299
11.2 场景的裁减流程 300
11.2.1 裁减的意义与常用技术 300
11.2.2 裁减访问器 303
11.2.3 状态树与状态节点 305
11.2.4 状态树的构建 309
11.2.5 裁减回调 312
11.3 数据的动态调度 313
11.3.1 动态调度技术概述 313
11.3.2 分页数据库 314
11.3.3 范例:分页lod节点 316
11.3.4 分页图像库 318
第12章 场景的多线程渲染 319
12.1 多线程开发技术概述 320
12.1.1 多线程开发的常用概念 320
12.1.2 openthreads库简介 321
12.1.3 范例:线程的创建与控制 324
12.1.4 osg操作线程 325
12.2 基本场景渲染流程 327
12.2.1 osg状态机 327
12.2.2 构建场景渲染树 333
12.2.3 渲染树的优化排序 338
12.2.4 范例:广告牌森林 339
12.3 多种线程模型的讨论与实现 341
12.3.1 渲染器与场景视图 341
12.3.2 单线程模型 347
12.3.3 多设备裁减/绘制模型 348
12.3.4 多设备绘制模型 349
12.3.5 多相机绘制模型 350
12.3.6 数据变度 351
第13章 开源社区与未来 353
13.1 基于osg的开源工程 354
13.1.1 地形与地理信息 354
13.1.2 特效实现 356
13.1.3 扩展节点组件 358
13.1.4 数据和场景管理 358
13.1.5 其他语言封装 360
13.2 开发者资源 360
13.2.1 实用网址 360
13.2.2 用户群体简介 361
13.3 十条箴言 363
主要参考资料... 365
1.1 场景图形初步 2
1.1.1 场景图形的概念 2
1.1.2 具体实现:三维渲染引擎 2
1.1.3 主流渲染引擎介绍 3
1.2 openscenegraph概述 4
1.2.1 诞生与发展 4
1.2.2 优势与不足 5
1.3 openscenegraph的组成结构 6
1.3.1 核心结构 6
1.3.2 资源获取 8
1.3.3 中文社区 8
第2章 osg的安装与调试 9
2.1 快速安装和使用 10
2.1.1 下载预编译包 10
2.1.2 设置环境变量 11
2.1.3 建立工程环境 13
2.1.4 范例:第一个程序 15
2.2 从源代码进行编译 16
2.2.1 osg源代码的获取与更新 16
.2.2.2 编译环境生成工具cmake 19
2.2.3 基本编译选项 22
2.2.4 高级编译选项 25
2.3 调试输入与输出 28
2.3.1 命令行输入 28
2.3.2 调试输出 29
第3章 开发预备知识 31
3.1 基本数学组件 32
3.1.1 二维与多维向量 32
3.1.2 四元数 35
3.1.3 矩阵 37
3.1.4 包围体 41
3.2 数组对象 44
3.2.1 数据数组 44
3.2.2 数据索引数组 46
3.3 内存管理机制 47
3.3.1 智能指针 48
3.3.2 参照对象 51
3.3.3 范例:智能指针的使用 52
第4章 场景的组织结构 55
4.1 节点的定义与种类 56
4.1.1 场景图形bvh树 56
4.1.2 节点的父子关系 58
4.1.3 叶节点与组节点 59
4.1.4 节点的功能与分类 62
4.2 节点的访问 65
4.2.1 访问器机制 65
4.2.2 节点的遍历函数 67
4.2.3 范例:节点属性访问器 68
4.2.4 节点的更新与事件回调 70
4.2.5 范例:使用回调实现旋转动画 71
4.3 重要节点的功能实现 74
4.3.1 空间变换节点 74
4.3.2 范例:使用空间变换节点 79
4.3.3 开关节点 81
4.3.4 范例:使用开关节点 82
4.3.5 细节层次节点(lod) 83
4.3.6 范例:使用lod节点 85
4.3.7 范例:节点代理 86
第5章 绘制几何对象与文字 89
5.1 几何元素的储存 90
5.1.1 顶点属性 90
5.1.2 顶点数组、显示列表和vbo 91
5.1.3 构建几何体对象 94
5.1.4 范例:简易房屋 100
5.2 几何元素的绘制与访问 103
5.2.1 几何体的绘制实现函数 103
5.2.2 数据的更新显示 108
5.2.3 几何体的更新回调 109
5.2.4 范例:跃动的线 110
5.2.5 信息获取和统计 112
5.2.6 范例:使用仿函数遍历几何体 113
5.3 位图的显示 116
5.3.1 图像与图像的绘制 116
5.3.2 范例:在场景中绘制位图 119
5.4 文字的显示 120
5.4.1 文字的绘制方法 120
5.4.2 文字的绘制实现函数 123
5.4.3 字符编码格式 124
5.4.4 范例:一首古诗 127
第6章 设置纹理和渲染属性 131
6.1 渲染属性与模式 132
6.1.1 opengl中的渲染状态设置 132
6.1.2 节点的渲染状态集合 132
6.1.3 渲染属性概览 135
6.2 纹理与纹理属性 139
6.2.1 纹理的实现方法 139
6.2.2 纹理的分类 143
6.2.3 范例:场景中的纹理设置 146
6.2.4 范例:纹理的明细层次(mipmap) 149
6.3 属性的实现与访问 152
6.3.1 将属性应用到场景 152
6.3.2 渲染状态集回调 153
6.3.3 范例:雾参数的实时更新 153
6.4 osg与opengl着色语言 155
6.4.1 opengl着色语言 155
6.4.2 着色器属性 159
6.4.3 一致变量回调 162
6.4.4 范例:在场景中使用glsl着色语言 162
第7章 观察我们的世界 167
7.1 场景的观察与变换 168
7.1.1 opengl中的变换 168
7.1.2 相机节点 171
7.1.3 范例:鸟瞰图相机 174
7.2 图形设备接口 176
7.2.1 图形设备与相机 176
7.2.2 窗口与像素缓存(pixel buffer) 179
7.2.3 渲染到纹理(render to texture) 181
7.2.4 范例:将场景渲染到纹理 183
7.3 视景器 186
7.3.1 视景器的主要工作 186
7.3.2 单视景器与多视景器 188
7.3.3 范例:投影墙显示 191
7.3.4 范例:多视景器系统 192
7.3.5 视景器辅助部件 194
第8章 人机交互与图形用户接口 197
8.1 获取鼠标和键盘消息 198
8.1.1 事件适配器 198
8.1.2 动作适配器 202
8.1.3 事件队列与处理器 203
8.1.4 范例:处理键盘事件.. 205
8.2 三维人机交互工具 207
8.2.1 漫游器 207
8.2.2 拖曳器 210
8.2.3 范例:场景拖曳器的实现 214
8.3 二维图形用户接口 217
8.3.1 窗口设备 217
8.3.2 windows下窗口设备的实现 219
8.3.3 范例:使用windows api构建渲染窗口 221
第9章 场景中的动画效果 225
9.1 场景动画基本组件 226
9.1.1 关键帧 226
9.1.2 采样与插值 228
9.1.3 动画频道 231
9.1.4 动画更新回调 236
9.1.5 范例:关键帧路径动画 239
9.2 刚体动画 242
9.2.1 简单路径动画 242
9.2.2 范例:使用路径动画回调 244
9.2.3 动画的多频道融合 245
9.2.4 范例:基本动画管理器 246
9.3 角色与变形动画 249
9.3.1 骨骼动画 249
9.3.2 范例:骨骼运动 252
9.3.3 变形体 255
9.3.4 范例:对折硬纸 257
9.4 渲染状态与纹理动画 259
9.4.1 渐进动画(ease motion) 259
9.4.2 范例:物体的淡入淡出 262
9.4.3 纹理动画 264
9.4.4 范例:纹理动画效果 266
第10章 文件的读写机制 269
10.1 数据文件支持机制 270
10.1.1 文件格式概述 270
10.1.2 osg支持的文件格式 272
10.1.3 基本文件读写接口 277
10.2 文件读写插件 279
10.2.1 插件的编写和注册 279
10.2.2 插件的职责链机制 283
10.2.3 文件读写回调 285
10.3 插件设计方法 287
10.3.1 范例:简单插件设计 287
10.3.2 范例:文件读取进度 290
10.4 osg(即.osg)格式及其扩展 292
10.4.1 封装器 292
10.4.2 场景扩展库插件 295
第11章 场景的动态更新与裁减 297
11.1 场景的更新流程 298
11.1.1 人机交互事件的更新 298
11.1.2 用户请求与系统调度的更新 299
11.2 场景的裁减流程 300
11.2.1 裁减的意义与常用技术 300
11.2.2 裁减访问器 303
11.2.3 状态树与状态节点 305
11.2.4 状态树的构建 309
11.2.5 裁减回调 312
11.3 数据的动态调度 313
11.3.1 动态调度技术概述 313
11.3.2 分页数据库 314
11.3.3 范例:分页lod节点 316
11.3.4 分页图像库 318
第12章 场景的多线程渲染 319
12.1 多线程开发技术概述 320
12.1.1 多线程开发的常用概念 320
12.1.2 openthreads库简介 321
12.1.3 范例:线程的创建与控制 324
12.1.4 osg操作线程 325
12.2 基本场景渲染流程 327
12.2.1 osg状态机 327
12.2.2 构建场景渲染树 333
12.2.3 渲染树的优化排序 338
12.2.4 范例:广告牌森林 339
12.3 多种线程模型的讨论与实现 341
12.3.1 渲染器与场景视图 341
12.3.2 单线程模型 347
12.3.3 多设备裁减/绘制模型 348
12.3.4 多设备绘制模型 349
12.3.5 多相机绘制模型 350
12.3.6 数据变度 351
第13章 开源社区与未来 353
13.1 基于osg的开源工程 354
13.1.1 地形与地理信息 354
13.1.2 特效实现 356
13.1.3 扩展节点组件 358
13.1.4 数据和场景管理 358
13.1.5 其他语言封装 360
13.2 开发者资源 360
13.2.1 实用网址 360
13.2.2 用户群体简介 361
13.3 十条箴言 363
主要参考资料... 365
OpenSceneGraph 三维渲染引擎设计与实践
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×