目录 1
第1章 图形系统和模型 1
1.1 计算机图形学的应用 1
1.1.1 信息显示 1
1.1.2 设计 2
1.1.3 仿真与动画 2
1.1.4 用户界面 3
1.2 计算机图形系统 3
1.2.1 像素与帧缓存 4
1.2.2 输出设备 4
1.2.3 输入设备 6
1.3 图像:物理方法和人工合成方法 6
1.3.1 对象与观察者 6
1.3.2 光照与图像 7
1.3.3 光线跟踪 8
1.4 人眼的视觉系统 9
1.5 针孔照相机 11
1.6 虚拟照相机模型 12
1.7 程序员接口 13
1.7.1 应用程序开发人员的接口 14
1.7.2 笔式绘图仪模型 14
1.7.3 三维API函数 16
1.7.4 彩图介绍 17
1.7.5 建模-绘制模式 18
1.8 图形系统的体系结构 19
1.8.1 显示处理器 19
1.8.2 流水线结构 20
1.8.3 变换 20
1.8.7 性能特性 21
1.8.6 光栅化 21
1.8.5 投影 21
1.8.4 裁剪 21
1.9 小结 22
1.10 补充阅读材料 22
习题 23
第2章 图形学编程 25
2.1 Sierpinski镂垫 25
2.2 二维应用程序编程 26
2.3 OpenGLAPI工具包 29
2.3.1 图形函数 30
2.3.2 图形流水线和状态机 31
2.3.3 OpenGL接口 31
2.4 图元与属性 32
2.4.1 多边形基本概念 33
2.4.2 OpenGL里的多边形类型 34
2.4.3 绘制球体 35
2.4.4 字符 37
2.4.5 曲线和曲面 38
2.4.6 属性 38
2.5 颜色 39
2.5.1 RGB颜色 41
2.5.2 索引颜色 42
2.5.3 设置颜色属性 44
2.6 视图处理 44
2.6.1 二维视图 44
2.6.2 正交视图 45
2.6.3 矩阵模式 46
2.7 控制函数 47
2.7.1 与Windows操作系统的交互作用 47
2.7.2 纵横比和视口 48
2.7.3 main()、display()和myinit()函数 49
2.8 Sierpinski镂垫程序 50
2.7.4 程序结构 50
2.9 多边形与递归过程 52
2.10 三维Sierpinski镂垫 54
2.10.1 使用三维点 54
2.10.2 在三维空间里使用多边形 55
2.10.3 隐藏面消除 56
2.11 小结 57
2.12 补充阅读材料 58
习题 59
第3章 输入与交互 62
3.1 交互模式 62
3.2 输入设备 63
3.2.1 物理输入设备 63
3.2.2 逻辑设备 65
3.2.4 输入模式 66
3.2.3 测量与触发 66
3.3 客户-服务器结构 67
3.4 显示列表 68
3.4.1 显示列表的定义和运行 69
3.4.2 字符和显示列表 71
3.4.3 GLUT库里的字体 73
3.5 事件驱动输入的编程 74
3.5.1 使用指向输入设备 74
3.5.2 窗口事件 76
3.5.3 键盘事件 78
3.5.4 显示回调函数和空闲回调函数 78
3.5.5 窗口管理 79
3.6 菜单 79
3.7 拾取 80
3.8 一个简单的画图程序 . 85
3.9 交互式动画程序 89
3.9.1 旋转的正方形 90
3.9.2 双缓存 91
3.9.3 其他一些缓存问题 92
3.10 交互式程序的设计 93
3.11 逻辑运算 94
3.11.1 绘制可以删除的线段 95
3.11.2 异或操作(XOR)和颜色 97
3.11.3 光标与覆盖层位平面 97
3.12 小结 98
3.13 补充阅读材料 98
习题 99
第4章 几何对象与坐标变换 102
4.1 标量、点和矢量 102
4.1.1 几何观点 102
4.1.3 数学观点:矢量与仿射空间 104
4.1.2 与坐标无关的几何对象 104
4.1.4 计算机科学的观点 105
4.1.5 几何抽象数据类型(ADT) 105
4.1.6 直线 106
4.1.7 仿射加 107
4.1.8 凸性 107
4.1.9 点积和叉积 108
4.1.10 平面 109
4.2 三维图元 110
4.3 坐标系与标架 111
4.3.1 矢量表示与n元组 112
4.3.2 坐标系的变换 113
4.3.3 坐标变换的例子 114
4.3.4 齐次坐标 115
4.3.5 标架变换的例子 117
4.3.7 标架系统与抽象数据类型 119
4.3.6 表示矩阵的运算处理 119
4.3.8 OpenGL里的标架系统 121
4.4 建立一个彩色立方体模型 123
4.4.1 一个立方体模型 123
4.4.2 内侧面与外侧面 124
4.4.3 对象表示的数据结构 124
4.4.4 彩色立方体 125
4.4.5 双线性插值 126
4.4.6 顶点数组 127
4.5 仿射变换 128
4.6 平移、旋转和缩放 130
4.6.1 平移变换 130
4.6.2 旋转变换 131
4.6.3 缩放变换 132
4.7.1 平移 133
4.7 齐次坐标表示的变换公式 133
4.7.2 缩放 134
4.7.3 旋转 134
4.7.4 剪切变换 135
4.8 变换的串乘运算 136
4.8.1 绕某一固定点的旋转 137
4.8.2 一般的旋转变换 138
4.8.3 实例变换 139
4.8.4 绕任一轴旋转 140
4.9 OpenGL中的变换矩阵 142
4.9.1 当前变换矩阵 142
4.9.2 旋转、平移和缩放 143
4.9.3 在OpenGL中绕固定点旋转 144
4.9.4 变换次序 144
4.9.5 立方体的旋转 145
4.10 三维应用程序的交互方式 146
4.9.6 矩阵的装载、压栈和弹栈操作 146
4.10.1 利用屏幕区域 147
4.10.2 一个虚拟跟踪球 147
4.10.3 平滑旋转 149
4.10.4 递增式旋转 149
4.11 四元数 150
4.11.1 复数与四元数 150
4.11.2 四元数与旋转 151
4.12 小结 152
4.13 补充阅读材料 153
习题 153
第5章 视图 155
5.1 经典视图和计算视图 155
5.1.1 经典视图 156
5.1.3 轴测法投影 157
5.1.2 正则投影 157
5.1.4 斜投影 158
5.1.5 透视图 158
5.2 计算机视图 159
5.3 照相机定位 160
5.3.1 照相机标架定位 160
5.3.2 两个处理视图的API工具包 164
5.3.3 Look-At函数 166
5.3.4 其他视图API工具包 167
5.4 简单投影 168
5.4.1 透视投影 168
5.4.2 正交投影 170
5.5 OpenGL的投影视图 171
5.5.1 OpenGL的透视投影 172
5.5.2 OpenGL平行视图 173
5.6 隐藏面消除 174
5.7 在场景中漫游 175
5.8 平行投影矩阵 177
5.8.1 投影正则化 177
5.8.2 正交投影矩阵 178
5.8.3 斜投影 179
5.9 透视投影矩阵 181
5.9.1 透视正则化 182
5.9.2 OpenGL的透视变换 184
5.10 投影与阴影 185
5.11 小结 187
5.12 补充阅读材料 188
习题 188
第6章 明暗处理 190
6.1 光与材质 190
6.2.1 彩色光源 192
6.2 光源 192
6.2.2 环境光 193
6.2.3 点光源 193
6.2.4 聚光灯 194
6.2.5 远距离光源 194
6.3 Phong反射模型 195
6.3.1 环境反射 196
6.3.2 漫反射 196
6.3.3 镜面反射光 197
6.4 矢量计算 199
6.4.1 法向矢量 199
6.4.2 反射角度 201
6.4.3 利用中值矢量 202
6.4.4 折射光 202
6.5 多边形的明暗处理 203
6.5.1 平面明暗处理 204
6.5.2 插值和Gouraud明暗处理方法 205
6.5.3 Phong明暗处理方法 206
6.6 球面的递归细分逼近 206
6.7 OpenGL中的光源 209
6.8 OpenGL里的材质说明 211
6.9 球体模型的明暗处理 213
6.10 全局绘制 214
6.11 小结 215
6.12 补充阅读材料 216
习题 216
第7章 离散技术 218
7.1 缓存 218
7.2 数字图像 219
7.3 缓存写操作 221
7.3.1 写入模式 222
7.4 OpenGL里的位运算和像素运算 223
7.3.2 异或写入模式 223
7.4.1 OpenGL的缓存和像素管道 224
7.4.2 位图 225
7.4.3 光栅字体 225
7.4.4 像素与图像 226
7.4.5 查找表 227
7.4.6 用于拾取的缓存 228
7.5 映射方法 228
7.6 纹理映射 229
7.6.1 二维纹理映射 230
7.6.2 OpenGL里的纹理映射 234
7.6.3 纹理对象 239
7.6.4 多纹理通道 239
7.6.5 创建纹理对象 239
7.7 环境贴图 240
7.8 凹凸贴图 242
7.9.1 不透明性与融合 243
7.9 图像合成技术 243
7.9.2 图像合成 244
7.9.3 OpenGL里的融合与合成 244
7.9.4 反走样 245
7.9.5 从后至前和从前至后的绘制过程 246
7.9.6 景深提示和雾效果 247
7.10 多通道绘制与累积缓存 248
7.10.1 场景反走样 248
7.10.2 凹凸贴图和浮雕效果 248
7.10.3 图像处理 249
7.10.4 OpenGL的图像处理扩展集 250
7.10.5 其他多通道方法 250
7.11 采样与走样 251
7.11.1 采样理论 251
7.11.2 重构 254
7.11.3 量化 255
7.12 小结 256
7.13 补充阅读材料 256
习题 257
第8章 渲染器的实现 259
8.1 实现的基本策略 259
8.2 实现过程的4个主要任务 260
8.2.1 建模 261
8.2.2 几何处理 261
8.2.3 光栅化 262
8.2.4 显示 262
8.3 变换的实现 262
8.4 线段裁剪 264
8.4.1 Cohen-Sutherland裁剪算法 264
8.4.2 Liang-Barsky裁剪算法 266
8.5 多边形裁剪 267
8.6 其他图元的裁剪 269
8.6.1 包围盒和包围体 270
8.6.2 曲线、曲面和字符 270
8.6.3 帧缓存里的裁剪操作 271
8.7 三维裁剪 271
8.8 隐藏面消除 273
8.8.1 景物空间和图像空间 273
8.8.2 排序与隐藏面消除 275
8.8.3 背面剔除 275
8.8.4 z-buffer算法 275
8.8.5 深度排序和画家算法 277
8.8.6 扫描线算法 279
8.9 扫描转换 279
8.10 Bresenham算法 281
8.11 多边形的扫描转换 283
8.11.1 内外测试法 283
8.11.2 OpenGL与凹多边形 284
8.11.3 带z-buffer算法的扫描转换 285
8.11.4 填充与排序 286
8.11.5 种子填充算法 286
8.11.6 扫描线填充算法 287
8.11.7 奇异性 287
8.12 反走样 288
8.13 显示器因素 289
8.13.1 颜色系统 290
8.13.2 颜色矩阵 292
8.13.3 γ校正 292
8.13.4 抖动技术与半色调技术 293
8.14 小结 293
8.15 补充阅读材料 294
习题 295
9.1 图符与实例 297
第9章 层级结构和面向对象的建模方法 297
9.2 层级模型 298
9.3 一个机器人手臂 300
9.4 树与树的遍历 302
9.5 树形数据结构的用途 305
9.6 动画 308
9.7 图形对象 309
9.7.1 方法、属性和消息 309
9.7.2 一个立方体对象 310
9.7.3 实现立方体对象 312
9.7.4 对象与层级结构 312
9.7.5 几何对象 313
9.8 场景图 314
9.9 一个简单场景图的API 315
9.9.1 结点类 316
9.9.2 几何结点 317
9.9.3 照相机类 319
9.9.4 光源和材质 320
9.9.5 变换类 321
9.9.6 机器人类 322
9.9.7 实现观察者类 324
9.9.8 实现结点类 327
9.10 其他的树形结构 330
9.10.1 CSG树 330
9.10.2 明暗处理树 332
9.10.3 BSP树 332
9.10.4 四叉树和八叉树 334
9.11 图形与万维网 335
9.11.1 网络与协议 335
9.11.2 超媒体与HTML语言 336
9.11.4 Java与Applets 337
9.11.3 数据库与VRML 337
9.12 小结 338
9.13 补充阅读材料 338
习题 339
第10章 曲线与曲面 340
10.1 曲线和曲面的表示方法 340
10.1.1 显式表示法 340
10.1.2 隐式表示 341
10.1.3 参数形式 342
10.1.4 参数多项式曲线 343
10.1.5 参数多项式曲面 344
10.2 设计准则 345
10.3 三次多项式参数曲线 346
10.4 插值 347
10.4.1 调和函数 348
10.4.2 三次插值面片 349
10.5 Hermite曲线和曲面 351
10.5.1 Hermite形式 351
10.5.2 几何连续和参数连续 353
10.6 Bezier曲线和曲面 354
10.6.1 Bezier曲线 354
10.6.2 Bezier曲面面片 356
10.7 三次B-样条 356
10.7.1 三次B-样条曲线 357
10.7.2 B-样条与基函数 359
10.7.3 样条曲面 360
10.8 一般的B样条函数 360
10.8.1 B-样条的递归定义 361
10.8.2 均匀样条 362
10.8.3 非均匀B-样条 362
10.8.4 NURBS 362
10.9.1 多项式求解方法 363
10.9 曲线和曲面的绘制 363
10.9.2 Bezier多项式的递归细分 364
10.9.3 其他多项式曲线的细分绘制 366
10.9.4 Bezier曲面的细分 367
10.10 犹他大学茶壶模型 368
10.11 代数曲面 370
10.11.1 二次曲面 370
10.11.2 曲面的光线跟踪方法绘制 370
10.11.3 曲线与曲面的细分 371
10.12 OpenGL里的曲线与曲面 373
10.12.1 Bezier曲线 373
10.12.2 Bezier曲面 374
10.12.3 茶壶显示 375
10.12.4 NURBS函数 376
10.13 小结 377
10.14 补充阅读材料 377
10.12.5 二次曲面 377
习题 378
第11章 过程建模方法 379
11.1 使用过程建模的理由 379
11.2 基于物理模型和粒子系统 380
11.3 牛顿粒子 381
11.3.1 独立粒子 382
11.3.2 弹簧力 382
11.3.3 吸引力与排斥力 383
11.4 求解粒子系统 384
11.5 约束 386
11.5.1 碰撞 386
11.5.2 球体内的粒子 388
11.5.3 软约束 389
11.6 基于语言的模型 389
11.7.1 标尺与长度 392
11.7 递归方法与分形几何 392
11.7.2 分形维数 393
11.7.3 中点分割与布朗运动 394
11.7.4 分形山体 395
11.8 Mandelbrot集合 396
11.9 小结 398
11.10 补充阅读材料 398
习题 399
第12章 可视化 400
12.1 数据+几何 400
12.2 高度场和等高线 400
12.2.1 网格 401
12.2.2 等高线图 403
12.2.3 Marching Squares 403
12.3 表面和标量场的可视化 408
12.3.1 体数据集 409
12.3.2 隐函数的可视化 410
12.4 等值面和Marching Cubes 411
12.5 网格简化 413
12.6 直接体绘制 414
12.6.1 颜色和不透明度赋值 414
12.6.2 溅射法 415
12.6.3 体光线跟踪法 416
12.6.4 体的纹理映射 417
12.7 向量场可视化 417
12.7.1 Hedgehog法 417
12.7.2 图示符 418
12.7.3 颜色 419
12.7.4 粒子轨迹和流线 420
12.8 张量可视化 421
习题 422
12.9 小结 422
12.10 补充阅读材料 422
第13章 高级绘制方法 424
13.1 流水线绘制技术不能解决的问题 424
13.2 光线跟踪 425
13.3 建立一个简单的光线跟踪器 427
13.3.1 光线跟踪的递归过程 427
13.3.2 交点计算 428
13.3.3 光线跟踪的变异形式 430
13.4 绘制方程 431
13.5 辐射度 432
13.5.1 辐射度方程 432
13.5.2 求解辐射度方程 433
13.5.3 计算形状因子 434
13.5.4 实现辐射度算法 436
13.7 大规模场景绘制 437
13.6 RenderMan 437
13.7.1 中排序绘制法 438
13.7.2 后排序绘制法 439
13.7.3 先排序绘制法 441
13.8 基于图像的绘制 442
13.9 小结 443
13.10 补充阅读材料 444
习题 444
附录A 实例程序 446
A.1 Sierpinski镂垫程序 447
A.2 生成Sierpinski镂垫的递归程序 448
A.3 生成三维Sierpinski镂垫程序 450
A.4 生成三维Sierpinski镂垫的递归程序 452
A.5 生成正方形程序 454
A.6 画图程序 457
A.7 介绍双缓存使用的程序 464
A.8 用选择模式实现拾取功能程序 466
A.9 立方体旋转程序 469
A.10 利用顶点数组旋转立方体程序 472
A.11 用虚拟跟踪球实现立方体旋转程序 474
A.12 观察者漫游程序 478
A.13 球体的细分逼近程序 481
A.14 像素读写程序 485
A.15 带纹理立方体的旋转程序 486
A.16 场景图形程序实例 490
A.17 画Bezier曲线程序 495
附录B 空间 501
B.1 标量 501
B.2 向量空间 501
B.3 仿射空间 503
B.4 欧几里德空间 504
B.5 投影 505
B.6 格莱姆—施密特正交化 505
B.7 补充阅读材料 506
习题 506
附录C 矩阵 507
C.1 定义 507
C.2 矩阵运算 507
C.3 行矩阵和列矩阵 508
C.4 秩 509
C.5 不同表示之间的转换 510
C.6 叉乘运算 511
C.7 特征值和特征向量 511
C.8 补充阅读材料 512
习题 512
参考文献 514