第0章 导论 1
0.1 视觉交流与计算机图形学 1
0.2 视觉交流的基本概念 2
0.2.1 使用合适的信息表示方式 2
0.2.2 图像应突出重点 2
0.2.3 使用合适的信息展示级别 2
0.2.4 采用合适的信息格式 3
0.2.5 注意图像显示的准确性 3
0.2.6 理解并尊重观众的文化背景 3
0.2.7 使交互成为用户熟悉的高效操作 4
0.3 三维几何和几何流水线 5
0.3.1 场景与视图 5
0.3.2 三维模型坐标系 5
0.3.3 三维世界坐标系 5
0.3.4 三维眼坐标系 6
0.3.5 投影 6
0.3.6 裁剪 7
0.3.7 选择透视投影或正交投影 7
0.3.8 二维眼坐标 8
0.3.9 二维屏幕坐标 8
0.4 外观属性 8
0.4.1 颜色 9
0.4.2 纹理 9
0.4.3 深度缓存 9
0.5 观察过程 9
0.6 图形卡 10
0.7 一个简单的OpenGL程序 10
0.7.1 OpenGL程序main()函数结构 15
0.7.2 模型空间 15
0.7.3 模型变换 15
0.7.4 三维世界空间 16
0.7.5 视图变换 16
0.7.6 三维眼空间 16
0.7.7 投影操作 16
0.7.8 二维眼空间 17
0.7.9 二维屏幕空间 17
0.7.10 科学问题编程 17
0.7.11 外观属性 17
0.7.12 从另一角度分析程序 17
0.8 OpenGL扩展 18
0.9 小结 19
0.10 本章的OpenGL术语表 19
0.11 思考题 20
0.12 练习题 21
0.13 实验题 21
第1章 视图变换和投影 22
1.1 简介 22
1.2 视图变换的基本模型 24
1.3 定义 24
1.3.1 建立视图环境 25
1.3.2 定义投影 25
1.3.3 视域体 26
1.3.4 正交投影 27
1.3.5 透视投影 27
1.3.6 透视投影的计算 28
1.3.7 视域体裁剪 29
1.3.8 定义窗口和视口 30
1.4 管理视图的其他方面 32
1.4.1 隐藏面 32
1.4.2 双缓存 33
1.5 立体视图 33
1.6 视图变换与视觉交流 34
1.7 在OpenGL中实现视图变换和投影 34
1.7.1 定义窗口和视口 35
1.7.2 改变窗口的形状 35
1.7.3 设置视图变换的环境 36
1.7.4 定义透视投影 37
1.7.5 定义正交投影 37
1.7.6 隐藏面的处理 37
1.7.7 设置双缓存 38
1.8 实现立体视图 38
1.9 小结 39
1.10 本章的OpenGL术语表 39
1.11 思考题 40
1.12 练习题 40
1.13 实验题 41
第2章 建模原理 43
2.1 简单几何建模 44
2.2 定义 44
2.3 例子 46
2.3.1 单点和多点 46
2.3.2 线段 46
2.3.3 线段序列 46
2.3.4 三角形 47
2.3.5 三角形序列 47
2.3.6 四边形 47
2.3.7 四边形序列 48
2.3.8 通用多边形 49
2.3.9 多面体 50
2.3.10 走样和反走样 50
2.3.11 法线 50
2.3.12 裁剪 51
2.3.13 建模的数据结构 52
2.3.14 曲面的建模 53
2.3.15 其他的图形对象源 54
2.3.16 建模行为 55
2.3.17 建议 55
2.4 变换和建模 55
2.5 定义 56
2.5.1 变换 56
2.5.2 复合变换 58
2.5.3 使用变换栈 59
2.5.4 编译几何体 60
2.6 一个例子 60
2.7 建议 62
2.8 建模视觉交流 62
2.9 认识形体的含义 62
2.10 维度 63
2.11 更高维度 65
2.12 图例和标签 66
2.13 精确度 67
2.14 场景图和建模图 67
2.15 场景图的概要 68
2.15.1 场景图中的裁剪 69
2.15.2 用场景图建模的例子 69
2.16 视图变换 71
2.17 场景图和深度测试 73
2.18 用建模图写代码 73
2.18.1 两个场景图的代码实例 75
2.18.2 使用标准的对象生成更加复杂的场景 77
2.19 小结 77
2.20 思考题 77
2.21 练习题 78
2.22 实验题 79
2.23 大型作业 80
第3章 在OpenGL中实现建模 81
3.1 指定几何体的OpenGL模型 81
3.1.1 点和多点模型 82
3.1.2 直线段 82
3.1.3 线段序列 83
3.1.4 封闭线段 83
3.1.5 三角形 83
3.1.6 三角形序列 83
3.1.7 四边形 84
3.1.8 四边形条带 85
3.1.9 普通多边形 85
3.1.10 顶点数组 86
3.1.11 反走样 86
3.1.12 将在很多例子中使用的立方体 86
3.1.13 定义裁剪平面 87
3.2 OpenGL工具中的附加对象 88
3.2.1 GLU二次曲面对象 88
3.2.2 GLU圆柱体 88
3.2.3 GLU圆盘 88
3.2.4 GLU球体 89
3.2.5 GLUT对象 89
3.2.6 例子 89
3.3 OpenGL中的变换 90
3.4 图例和标签 92
3.5 变换的代码实例 93
3.5.1 简单变换 93
3.5.2 变换栈 94
3.5.3 逆转视点变换 95
3.5.4 生成显示列表 96
3.6 到视点的距离 97
3.7 小结 97
3.8 本章的OpenGL术语表 98
3.9 思考题 100
3.10 练习题 100
3.11 实验题 101
3.12 大型作业 102
第4章 建模的数学基础 103
4.1 坐标系 103
4.2 四象限和八象限 104
4.3 点、直线和直线段 104
4.4 直线段、射线、参数化曲线和曲面 105
4.5 点到直线的距离 105
4.6 向量 105
4.7 向量点积和叉积 106
4.8 反射向量 107
4.9 变换 108
4.10 平面和半空间 109
4.11 点到平面的距离 110
4.12 多边形和凸面 110
4.13 多面体 111
4.14 极坐标、柱面坐标和球面坐标 111
4.15 碰撞检测 112
4.16 高维空间 114
4.17 小结 114
4.18 思考题 114
4.19 练习题 114
4.20 实验题 114
第5章 颜色及其混合 116
5.1 简介 116
5.2 原理 117
5.2.1 设置几何物体的颜色 117
5.2.2 RGB立方体 117
5.2.3 亮度和色弱 118
5.2.4 其他颜色模型 119
5.2.5 颜色深度 120
5.2.6 色谱 121
5.2.7 颜色混合与α通道 121
5.2.8 使用混合达到透明效果 122
5.2.9 索引颜色 122
5.3 颜色和视觉交流 123
5.3.1 强调色 123
5.3.2 背景色 123
5.3.3 自然色 124
5.3.4 伪彩色和颜色渐变 124
5.3.5 创建颜色渐变 124
5.3.6 颜色渐变的使用 125
5.3.7 比较形状和颜色编码 126
5.3.8 颜色的文化背景 126
5.4 例子 127
5.5 OpenGL中的颜色 128
5.5.1 颜色定义 128
5.5.2 使用混合 128
5.6 代码实例 129
5.6.1 带有全色谱的模型 129
5.6.2 HSV圆锥 129
5.6.3 HLS双圆锥 130
5.6.4 带半透明面的对象 131
5.6.5 索引颜色 131
5.6.6 OpenGL中的颜色渐变 132
5.7 小结 132
5.8 本章的OpenGL术语表 132
5.9 思考题 132
5.10 练习题 133
5.11 实验题 134
5.12 大型作业 134
第6章 光照处理和着色处理 135
6.1 光照处理 135
6.1.1 环境光、漫反射光和镜面反射光 136
6.1.2 表面法向 138
6.2 材质 139
6.3 光源属性 139
6.3.1 光源颜色 140
6.3.2 位置光 140
6.3.3 聚光灯 140
6.3.4 光线衰减 140
6.3.5 方向光 140
6.4 放置与移动光源 141
6.5 用光照实现特效 141
6.6 场景图中的光源 141
6.7 着色处理 141
6.8 在视觉交流中考虑着色处理 142
6.9 定义 142
6.10 Flat着色处理和平滑着色处理的例子 143
6.11 计算每个顶点的法向 144
6.11.1 平均多边形法向 144
6.11.2 法向的解析计算 144
6.12 其他着色处理模型 145
6.13 各向异性着色处理 146
6.14 全局光照 146
6.14.1 辐射度方法 147
6.14.2 光子映射 147
6.15 局部光照和OpenGL 148
6.15.1 指定和定义光源 148
6.15.2 选择性地使用光源 150
6.15.3 定义材质 150
6.15.4 使用GLU二次曲面物体 151
6.15.5 例子:把三原色光源应用于白色表面 151
6.15.6 示例代码 151
6.15.7 着色处理的例子 152
6.16 建议 154
6.17 小结 154
6.18 本章的OpenGL术语表 154
6.19 思考题 155
6.20 练习题 155
6.21 实验题 156
6.22 大型作业 157
第7章 事件和交互式编程 158
7.1 定义 158
7.2 事件的例子 159
7.3 交互的方式和方法 160
7.4 对象选择 161
7.5 交互和视觉交流 161
7.6 事件和场景图 162
7.7 建议 162
7.8 OpenGL中的事件 163
7.9 回调函数的注册 163
7.10 实现细节 165
7.11 代码实例 167
7.11.1 空闲事件回调函数 168
7.11.2 定时器事件回调函数 168
7.11.3 键盘回调函数 169
7.11.4 菜单回调函数 170
7.11.5 鼠标移动的鼠标回调函数 171
7.11.6 对象拾取的鼠标回调函数 171
7.12 拾取的实现细节 173
7.12.1 定义 173
7.12.2 拾取操作的实现方法 174
7.12.3 拾取矩阵 176
7.12.4 使用后颜色缓存做拾取 176
7.12.5 一个选择操作的例子 177
7.12.6 拾取小结 179
7.13 MUI工具 179
7.13.1 引言 179
7.13.2 应用MUI的功能 180
7.13.3 MUI用户界面对象 181
7.13.4 一个例子 183
7.14 在Windows系统中安装MUI 185
7.15 建议 185
7.16 小结 185
7.17 本章的OpenGL术语表 186
7.18 思考题 187
7.19 练习题 188
7.20 实验题 188
7.21 大型作业 189
第8章 纹理映射 190
8.1 简介 190
8.2 定义 191
8.2.1 1D纹理图 191
8.2.2 2D纹理图 191
8.2.3 3D纹理图 192
8.2.4 纹理坐标与空间坐标的对应关系 192
8.2.5 对象颜色与纹理图颜色的关系 192
8.2.6 纹理图的其他含义 192
8.2.7 场景图中的纹理映射 193
8.3 创建纹理图 193
8.3.1 从图像创建纹理图 193
8.3.2 人工生成纹理图 194
8.3.3 噪声函数生成纹理图 194
8.4 纹理图中的插值操作 195
8.5 纹理映射和布告板技术 196
8.6 纹理图中包含多个纹理 196
8.7 纹理反走样 196
8.8 MIP映射 197
8.9 多纹理 197
8.10 OpenGL中的纹理映射 198
8.10.1 顶点与纹理点相关 198
8.10.2 从屏幕获取纹理 199
8.10.3 纹理环境 199
8.10.4 纹理参数 200
8.10.5 获取及定义纹理图 201
8.10.6 纹理坐标控制 202
8.10.7 纹理插值 202
8.10.8 纹理映射和GLU四边形 203
8.10.9 多纹理 203
8.11 例子 203
8.11.1 使用Chromadepth过程 204
8.11.2 使用2D纹理图在表面中加入信息 204
8.11.3 环境纹理图 204
8.12 建议 205
8.13 代码实例 205
8.13.1 1D颜色渐变 205
8.13.2 2D纹理例子 206
8.13.3 环境纹理图 207
8.13.4 使用多纹理 207
8.14 小结 208
8.15 本章的OpenGL术语表 208
8.16 思考题 210
8.17 练习题 210
8.18 实验题 211
8.19 大型作业 212
第9章 图形在科学计算领域中的应用 213
9.1 简介 213
9.2 例子 215
9.3 扩散 215
9.3.1 长条材料中的温度 215
9.3.2 疾病的传播 217
9.4 函数作图和应用 218
9.5 参数曲线与曲面 219
9.6 极限处理结果的图形对象 222
9.7 标量场 223
9.8 物体和行为仿真 224
9.8.1 气体定律和扩散原理 225
9.8.2 分子显示 226
9.8.3 科学仪器 227
9.8.4 蒙特卡罗建模过程 227
9.9 四维作图 228
9.9.1 体数据 228
9.9.2 向量场 229
9.10 高维作图 230
9.11 数据驱动图形 231
9.12 代码实例 232
9.12.1 扩散 232
9.12.2 函数作图 233
9.12.3 参数曲线与曲面 234
9.12.4 极限处理 235
9.12.5 标量场 235
9.12.6 物体及行为的表示 235
9.12.7 分子显示 236
9.12.8 蒙特卡罗建模 237
9.12.9 四维作图 237
9.12.10 高维作图 238
9.13 小结 239
9.14 思考题 239
9.15 练习题 239
9.16 实验题 240
9.17 大型作业 240
第10章 绘制与绘制流水线 242
10.1 引言 242
10.2 流水线 242
10.3 光栅化处理 244
10.4 OpenGL的绘制流水线 248
10.4.1 绘制流水线中的纹理映射 249
10.4.2 逐片段操作 249
10.4.3 OpenGL与可编程着色器 250
10.4.4 图形卡绘制流水线实现的实例 251
10.5 图形卡的部分三维视图变换操作 251
10.6 小结 252
10.7 本章的OpenGL术语表 252
10.8 思考题 252
10.9 练习题 253
10.10 实验题 253
第11章 动力学和动画 254
11.1 一个例子 255
11.2 动画的分类 256
11.2.1 过程动画 256
11.2.2 场景图中的动画 256
11.2.3 插值动画 257
11.2.4 基于帧的动画 258
11.2.5 一个插值例子 259
11.3 动画中的一些问题 260
11.3.1 帧速率 260
11.3.2 时间走样 260
11.3.3 动画制作 261
11.4 动画和视觉交流 261
11.5 在静止帧中表示运动信息 262
11.5.1 运动轨迹法 262
11.5.2 运动模糊法 263
11.6 一些有趣的观看动画的设备 263
11.7 建议 265
11.8 OpenGL的动画例子 265
11.8.1 在模型中移动物体 265
11.8.2 控制动画的时间 266
11.8.3 移动模型的部件 266
11.8.4 移动视点或模型的观察标架 267
11.8.5 场景的纹理插值 268
11.8.6 改变模型的特征 268
11.8.7 生成轨迹 269
11.8.8 使用累积缓存 270
11.8.9 创建数字视频 271
11.9 用OpenGL制作动画时应注意的一些要点 272
11.10 建议 272
11.11 本章的OpenGL术语表 272
11.12 思考题 273
11.13 练习题 273
11.14 实验题 273
11.15 大型作业 274
第12章 高性能图形技术 276
12.1 定义 276
12.2 技术 277
12.3 建模技术 277
12.3.1 减少可见多边形数量 277
12.3.2 巧妙运用纹理 278
12.3.3 减少光照计算 278
12.3.4 细节层次 278
12.3.5 雾化 280
12.3.6 开始距离和结束距离 280
12.3.7 雾化模式 280
12.3.8 雾密度 281
12.3.9 雾色 281
12.4 绘制技术 282
12.4.1 不使用硬件 282
12.4.2 使用硬件 282
12.4.3 多边形剔除 282
12.4.4 避免深度比较 283
12.4.5 从前到后绘制 284
12.4.6 二元空间划分 284
12.4.7 系统加速技术 285
12.5 碰撞检测 286
12.6 小结 287
12.7 本章的OpenGL术语表 287
12.8 思考题 288
12.9 练习题 288
12.10 实验题 289
12.11 大型作业 289
第13章 插值与样条建模 290
13.1 引言 290
13.1.1 插值 290
13.1.2 另一种Bézier样条的基本概念 293
13.1.3 另一种Bézier样条计算方法 293
13.1.4 扩展插值到更多控制点 293
13.2 样条曲面 295
13.2.1 扩展曲面片为曲面 295
13.2.2 生成曲面片法向 296
13.2.3 生成曲面片纹理坐标 296
13.2.4 另一种曲面片计算方法 296
13.3 其他类型的插值函数 297
13.4 OpenGL中的插值 297
13.4.1 使用求值器自动生成法向和纹理 298
13.4.2 其他技巧 299
13.5 定义 299
13.6 示例 300
13.6.1 样条曲线 300
13.6.2 样条曲面 301
13.7 小结 303
13.8 本章的OpenGL术语表 303
13.9 思考题 304
13.10 练习题 304
13.11 实验题 305
13.12 大型作业 305
第14章 非多边形图形技术 306
14.1 定义 306
14.2 光线投射 306
14.3 光线跟踪 308
14.4 体绘制 309
14.5 迭代函数系统 310
14.5.1 压缩映射 310
14.5.2 生成函数 311
14.6 芒德布罗集和茹利亚集 312
14.7 OpenGL支持的逐像素操作 313
14.8 小结 314
14.9 思考题 314
14.10 练习题 314
14.11 实验题 315
14.12 大型作业 315
第15章 硬拷贝 316
15.1 定义 316
15.2 选择输出媒介 316
15.2.1 数字图像 316
15.2.2 印刷 317
15.2.3 胶片 318
15.2.4 三维图像技术 319
15.2.5 三维对象成型技术 320
15.2.6 STL文件 321
15.2.7 视频 322
15.2.8 数字视频 323
15.3 支持硬拷贝的OpenGL技术 323
15.3.1 捕获输出窗口内容到文件 323
15.3.2 用OpenGL生成立体图 324
15.4 小结 325
15.5 本章的OpenGL术语表 325
15.6 思考题 325
15.7 实验题 325
参考文献和资源 327
附录 330
索引 335