第1章 绪论 1
1.1 计算机图形学的简单回顾 1
1.1.1 计算机图形学的发展简史 1
1.1.2 计算机图形学的广泛应用 2
1.1.3 交互式图形学 4
1.2 虚拟现实技术 6
1.2.1 虚拟现实技术的主要特征 6
1.2.2 虚拟现实系统的体系结构 7
1.2.3 蓬勃发展的虚拟现实技术 8
1.3 C++面向对象基础 9
1.3.1 C++概述 9
1.3.2 类和对象 10
1.3.3 构造函数与析构函数 11
1.3.4 继承与派生 13
1.3.5 继承在软件开发中的重要意义 18
1.4 Windows编程规范 18
1.5 动画技术 19
1.6 小结 20
第2章 Open Inventor基础知识 21
2.1 OpenGL简介 21
2.1.1 什么是OpenGL 21
2.1.2 OpenGL状态机 23
2.1.3 OpenGL应用示例 23
2.2 Open Inventor的概念和框架 25
2.2.1 什么是Open Inventor 25
2.2.2 Open Inventor的主要结构 28
2.2.3 Open Inventor的扩展模块 29
2.2.4 用于JAVA的Open Inventor 32
2.3 Open Inventor与OpenGL之间的关系 33
2.4 Open Inventor与VRML之间的关系 35
2.4.1 VRML简介 35
2.4.2 创建VRML文件的常用方法 36
2.4.3 一个简单的VRML场景 36
2.5 基于Open Inventor的Amira 40
2.5.1 Amira产品概述 40
2.5.2 Amira的应用领域 41
2.5.3 Amira的二次开发模块 41
2.6 小结 42
第3章 Open Inventor与视窗系统 43
3.1 Windows环境下Open Inventor基本程序结构 43
3.1.1 Open Inventor在Windows环境中的安装方法 43
3.1.2 Windows环境下对Open Inventor的设置 48
3.1.3 Open Inventor在Windows下的扩展 53
3.1.4 使用IVF程序向导 58
3.2 Unix/Linux环境下Open Inventor编程简介 60
3.2.1 在Linux环境中Open Inventor的安装方法 60
3.2.2 Linux系统中Open Inventor编程环境的设置 63
3.2.3 显示一个立方体 65
3.3 其他版本下Open Inventor的安装与设置 70
3.3.1 SGI公司Open Inventor的安装与设置 70
3.3.2 SIM公司Coin3D的安装与设置 70
3.3.3 在VC中使用Coin3D库 72
3.4 Open Inventor软件开发包的获得 76
3.4.1 从SGI的开源社区下载 76
3.4.2 SIM公司的Coin3d的下载 76
3.4.3 TGS公司Open Inventor的获得 77
3.5 小结 78
第4章 基本概念及定义 79
4.1 Open Inventor中的命名规则 79
4.1.1 字符与数据 79
4.1.2 类和函数的命名 80
4.1.3 用于场景的基本类型 80
4.1.4 场景图中的图例 81
4.2 场景和场景数据库 82
4.2.1 场景数据库 83
4.2.2 节点概述 86
4.2.3 节点的类型 89
4.3 群组节点 93
4.3.1 创建群组 93
4.3.2 对群组成员的操作 94
4.3.3 分隔符节点 101
4.3.4 SoGroup的其他子类 106
4.4 节点的共享实例 112
4.5 节点中的域 116
4.5.1 域的初始值 116
4.5.2 域的作用 118
4.5.3 单值域变量值的设置和获取 119
4.5.4 多值域变量值的设置和获取 122
4.5.5 域的忽略标志 127
4.5.6 节点的覆盖标志 128
4.6 路径 130
4.6.1 路径的作用 130
4.6.2 创建路径 131
4.7 节点的引用计数和节点的删除 131
4.7.1 引用计数值的计算 132
4.7.2 使用节点的引用计数值来删除节点 133
4.7.3 引用计数值为0的节点 135
4.7.4 节点的引用和删除用法小结 136
4.8 小结 137
第5章 形状节点与视图变换 138
5.1 简单形状节点和复杂形状节点 138
5.1.1 基本形状节点 138
5.1.2 复杂形状节点 139
5.2 二维文字 146
5.2.1 二维文字概述 147
5.2.2 使用二维文字 148
5.3 三维文字 150
5.3.1 SoText3节点的域变量 151
5.3.2 三维文字的轮廓 151
5.3.3 使用三维文字 152
5.4 属性节点 158
5.4.1 材质节点 160
5.4.2 绘制类型节点 161
5.4.3 光照模型节点 162
5.4.4 全局环境光节点 165
5.4.5 形状提示节点 169
5.4.6 复杂度节点 174
5.4.7 度量单位节点 176
5.5 造型变换 177
5.5.1 照相技术与三维物体的显示 178
5.5.2 窗口区和视图区 181
5.5.3 图形裁剪 181
5.5.4 变换节点 182
5.6 视图变换和投影变换 188
5.6.1 相机节点类 188
5.6.2 在相机节点上执行渲染动作 189
5.6.3 相机节点类中的子类 193
5.6.4 视口变换 195
5.6.5 变换的诊断 197
5.6.6 相机的综合应用 198
5.7 节点绑定 201
5.7.1 材质绑定节点 201
5.7.2 法矢绑定 206
5.7.3 自动生成法矢 207
5.8 小结 207
第6章 颜色和光照 208
6.1 计算机中的颜色 209
6.1.1 彩色的形成原理与基本概念 209
6.1.2 常用颜色模型 210
6.2 光照模型 212
6.2.1 光照概述 213
6.2.2 Phong光照模型 216
6.3 Open Inventor中的光照节点 218
6.3.1 点光源 220
6.3.2 平行光 221
6.3.3 聚光灯 222
6.3.4 使用多重光照 223
6.3.5 使用纹理和光照 225
6.3.6 雾效果 226
6.4 小结 227
第7章 纹理映射 228
7.1 纹理概述 229
7.1.1 纹理映射的概念 229
7.1.2 纹理映射中使用的节点 232
7.1.3 纹理的映射方式 235
7.1.4 存取纹理图片 238
7.2 纹理控制 241
7.2.1 SoTexture2节点 241
7.2.2 给定纹理坐标 243
7.3 使用纹理 246
7.3.1 使用默认的纹理映射 246
7.3.2 使用纹理坐标函数 250
7.4 使用三维纹理 253
7.5 小结 255
第8章 曲线与曲面 256
8.1 预备知识 257
8.1.1 曲线曲面的参数表示 257
8.1.2 曲线中的基本概念 258
8.1.3 插值、拟合和光顺 260
8.1.4 贝济埃曲线 262
8.1.5 B样条曲线 263
8.2 非均匀有理B样条曲线中各概念间的关系 264
8.2.1 与NURBS相关的类 264
8.2.2 曲线的控制顶点、结点矢量和阶 265
8.2.3 曲线的连续性 266
8.2.4 基函数的作用 267
8.2.5 结点序列 268
8.2.6 有理曲线 270
8.2.7 NURBS关系小结 270
8.3 NURBS曲线的应用 270
8.3.1 B样条曲线 271
8.3.2 过端点的均匀B样条曲线 273
8.4 NURBS曲面 274
8.4.1 贝济埃曲面 275
8.4.2 NURBS曲面的裁剪 277
8.5 NURBS面和曲线的综合应用 280
8.6 小结 285
第9章 存取三维场景数据 286
9.1 三维图形数据文件格式简介 286
9.1.1 Wavefront模型简介 286
9.1.2 3DS文件格式 288
9.1.3 各种三维数据模型的相互转换 300
9.2 Open Inventor的文件格式 300
9.2.1 文件类型 301
9.2.2 文件头 302
9.3 场景图的存储 303
9.3.1 输出整个场景图 303
9.3.2 输出节点 303
9.3.3 输出域变量值 303
9.3.4 输出忽略标志 305
9.3.5 输出域连接 306
9.3.6 输出全局域 306
9.3.7 输出引擎 307
9.3.8 输出路径 307
9.3.9 输出节点的共享实例 311
9.3.10 输出节点工具箱 312
9.3.11 文件的保存类型 314
9.3.12 包含其他文件 315
9.4 读取Open Inventor文件 316
9.4.1 将数据文件读入场景数据库 316
9.4.2 读入节点和引擎 317
9.4.3 读入未知的节点或引擎 318
9.4.4 节点的备用表示 318
9.4.5 将数据文件作为字符串而读入 319
9.5 对VRML的扩展 322
9.6 小结 325
第10章 场景遍历 326
10.1 概述 326
10.1.1 常用的遍历动作 326
10.1.2 基本步骤 327
10.1.3 执行动作 328
10.2 渲染遍历 329
10.2.1 不同类型节点的执行方式 329
10.2.2 透明物体的渲染质量 333
10.2.3 反走样 336
10.2.4 输出场景图 338
10.2.5 渲染缓冲 347
10.2.6 渲染剔除 349
10.3 计算包围盒 351
10.3.1 函数与方法 351
10.3.2 创建实例 352
10.3.3 使用包围盒 352
10.4 累积变换矩阵 353
10.4.1 创建实例 353
10.4.2 使用累积变换矩阵 354
10.4.3 综合应用 355
10.5 输出文件 356
10.5.1 文件写操作 356
10.5.2 输出VRML文件 357
10.6 搜索节点 362
10.6.1 使用方法 362
10.6.2 搜索节点的应用 363
10.7 拾取物体 364
10.7.1 拾取的方式 364
10.7.2 基本步骤 365
10.7.3 拾取处理 368
10.7.4 细节度 369
10.7.5 拾取的综合应用 370
10.8 响应程序 374
10.8.1 基本步骤 374
10.8.2 响应函数的作用 374
10.8.3 为图元添加响应函数 375
10.8.4 响应函数的应用 376
10.9 小结 378
第11章 事件和选择 379
11.1 概述 379
11.1.1 事件处理过程 379
11.1.2 Windows中的Inventor事件 380
11.2 事件处理机制 384
11.2.1 事件的自动处理 385
11.2.2 不同节点对事件的响应方式 385
11.2.3 事件处理者 390
11.3 事件响应机制 391
11.4 事件覆盖机制 394
11.5 选择反馈 396
11.5.1 管理选择列表 397
11.5.2 加亮选中物体 401
11.5.3 高光线的设置 402
11.5.4 自定义高光线 403
11.5.5 选择改变时的处理 403
11.5.6 设置过滤响应函数 407
11.6 在Inventor程序中使用OpenGL 412
11.6.1 在Inventor场景渲染中使用OpenGL 412
11.6.2 使用SoCallback节点 413
11.7 小结 417
第12章 传感器和引擎 418
12.1 概述 418
12.1.1 传感器简介 418
12.1.2 引擎简介 420
12.1.3 传感器和引擎的关系 421
12.2 延迟队列传感器 422
12.2.1 数据传感器的分类 422
12.2.2 数据传感器的用法 423
12.2.3 域传感器 425
12.2.4 使用激发器 427
12.2.5 单触发传感器 429
12.2.6 空闲传感器 431
12.3 定时器队列传感器 432
12.3.1 一般使用步骤 432
12.3.2 警报传感器 433
12.3.3 定时器传感器 437
12.4 域连接 440
12.4.1 多重连接 441
12.4.2 域转换 442
12.4.3 引用计数 442
12.4.4 禁用域连接 443
12.4.5 更新域变量 443
12.4.6 全局域 443
12.5 用于动画的引擎 445
12.5.1 耗时引擎 446
12.5.2 单触发引擎 446
12.5.3 计时器引擎 447
12.5.4 用于动画的节点 450
12.6 其他常用的引擎 454
12.6.1 闸引擎 454
12.6.2 算术类引擎 454
12.7 小结 459
第13章 节点工具箱和组件库 460
13.1 节点工具箱 460
13.1.1 隐藏子节点 461
13.1.2 节点工具箱的目录 462
13.1.3 选择和设置节点部分 465
13.1.4 使用宏获得部分 467
13.1.5 指向节点部分的路径 470
13.1.6 使用节点部分列表 472
13.1.7 使用分隔符工具箱 472
13.1.8 使用具有编辑器的节点工具箱 472
13.2 组件库 475
13.2.1 渲染区 477
13.2.2 Windows组件 479
13.2.3 回传程序数据 481
13.2.4 观察器 484
13.2.5 设置观察器中的场景图 485
13.3 使用三维剪贴板 488
13.4 使用窗口管理组件 489
13.5 小结 491
第14章 拖拽器和操纵器 492
14.1 概述 492
14.1.1 拖拽器 492
14.1.2 操纵器 495
14.2 简单拖拽器 496
14.2.1 将简单拖拽器连接到域 496
14.2.2 使用响应函数 498
14.3 操纵器 500
14.3.1 操纵器的用法 500
14.3.2 节点替换法 501
14.4 自定义拖拽器 502
14.4.1 拖拽器的部分 502
14.4.2 修改拖拽器的部分 503
14.4.3 改变部分的默认几何形状 504
14.5 小结 507
第15章 TGS对Open Inventor的拓展 508
15.1 用于Java的扩展模块 509
15.1.1 Java模块扩展包 510
15.1.2 包括的主要模块 511
15.1.3 一个示例 512
15.2 MeshViz扩展模块 516
15.2.1 MeshViz中的属性类 516
15.2.2 MeshViz中的可视化类 518
15.2.3 管理场景数据库 519
15.2.4 GraphMaster组件 521
15.3 VolumeViz扩展模块 523
15.3.1 VolumeViz的使用 524
15.3.2 读写数据文件 526
15.4 HardCopy扩展模块 529
15.4.1 使用SoVectorizeAction 529
15.4.2 输出PostScript文件 530
15.5 TerrainViz扩展模块 532
15.5.1 高程管理器 533
15.5.2 未定义孔洞数据的管理 534
15.6 小结 535
附录A Open Inventor中的OpenGL状态变量 536
附录B 术语表 539
参考文献 544