第一部分 二维计算机图形学:从常见曲线到复杂分形 3
第一章 乌龟绘图 3
1.1概述 3
1.2乌龟命令 3
1.3乌龟程序 7
1.4总结 9
练习 9
第二章 应用递归乌龟程序生成分形 12
2.1分形 12
2.2循环引理 12
2.3分形曲线和递归乌龟程序 16
2.3.1分形地垫 16
2.3.2凹凸分形 18
2.4总结:分形——实实在在的递归 19
练习 20
编程作业 22
第三章 分形的奇特性质 27
3.1分形的奇特性 27
3.2维数 27
3.2.1分形维数 29
3.2.2从递归乌龟程序计算分形维数 29
3.3可微性 30
3.4吸引性 31
3.4.1 Sierpinski地垫的基础情形 31
3.4.2 Koch曲线的基础情形 32
3.4.3吸引子 33
3.5总结 34
练习 34
第四章 仿射变换 36
4.1变换 36
4.2共形变换 37
4.2.1平移 37
4.2.2旋转 38
4.2.3均匀放缩 39
4.3仿射变换的代数表示 40
4.4仿射变换的几何表示 41
4.5仿射坐标和仿射矩阵 41
4.6共形映射的重新表述 42
4.7一般的仿射变换 43
4.7.1一个点与两个线性无关向量的像 43
4.7.2非均匀放缩 45
4.7.3三不共线点的像 46
4.8总结 47
4.8.1仿射变换和仿射坐标 48
4.8.2平面上仿射变换的矩阵 49
练习 51
第五章 仿射几何:二维计算机图形学的连点过程 57
5.1乌龟绘图的两个不足之处 57
5.2仿射绘图 57
5.2.1 CODO语言 58
5.2.2 CODO程序示例 59
5.3总结 61
练习 63
第六章 应用迭代函数系统生成分形 66
6.1利用迭代变换生成分形 66
6.2作为迭代函数系统不动点的分形 67
6.3作为吸引子的分形 69
6.4具有凝聚集的分形 70
6.5总结 71
练习 71
编程作业 73
第七章 不动点定理及其推论 74
7.1不动点与迭代 74
7.2不动点定理 75
7.3不动点定理的推论 77
7.3.1求根方法 77
7.3.2松弛方法 80
7.3.3分形 82
7.4总结 86
练习 87
编程作业 90
第八章 递归乌龟程序与共形迭代函数系统 92
8.1动因 92
8.2对乌龟初始状态进行修改的作用 92
8.3等价定理 94
8.4转化算法 96
8.4.1 Ron算法 96
8.4.2 Tao算法 98
8.5凹凸分形 99
8.6总结 101
练习 102
编程作业 103
第二部分 三维计算机图形学的数学方法 107
第九章向量几何:与坐标无关的过程 107
9.1与坐标无关的方法 107
9.2向量和向量空间 108
9.3点与仿射空间 109
9.4向量乘积 110
9.4.1点积 110
94.2叉积 111
9.4.3行列式 112
9.5总结 113
附录A:叉积无结合律 114
附录B:点和向量的代数 115
练习 117
第十章 坐标代数 120
10.1直角坐标 120
10.2加法、减法和标量乘法 121
10.3向量乘积 121
10.3.1点积 122
10.3.2叉积 122
10.3.3行列式 123
10.4总结 123
练习 124
第十一章 向量几何的应用 127
11.1简介 127
11.2三角定理 127
11.2.1余弦定理 127
11.2.2正弦定理 128
11.3直线和平面的表示 129
11.3.1直线 129
11.3.2平面 129
11.4度量公式 130
11.4.1距离 130
11.4.2面积 133
11.4.3体积 135
11.5直线和平面的交 136
11.5.1两条直线的交点 136
11.5.2三张平面的交点 137
11.5.3两张平面的交线 138
11.6球面线性插值 139
11.7内外检测 141
11.71光线投射 141
11.7.2环绕数 142
11.8总结 144
11.8.1三角定理 144
11.8.2度量公式 144
11.8.3交点/交线 145
11.8.4插值 146
11.8.5环绕数 146
练习 146
第十二章 仿射变换和射影变换的与坐标无关的公式 151
12.1三维计算机图形学中的变换 151
12.2仿射变换和射影变换 151
12.3刚体运动 152
12.3.1平移 152
12.3.2旋转 153
12.3.3镜像 155
12.4放缩 156
12.4.1均匀放缩 156
12.4.2非均匀放缩 157
12.5投影 158
12.5.1正交投影 158
12.5.2透视投影 159
12.6总结 160
12.6.1不利用矩阵的仿射变换和射影变换 160
12.6.2仿射变换和射影变换的公式 161
练习 162
第十三章 仿射变换和射影变换的矩阵表示 165
13.1仿射变换的矩阵表示 165
13.2线性变换矩阵和平移向量 167
13.2.1线性变换矩阵 168
13.2.2平移向量 169
13.3刚体运动 169
13.3.1平移 169
13.3.2旋转 170
13.3.3镜像 171
13.4放缩 172
13.4.1均匀放缩 173
13.4.2非均匀放缩 173
13.5投影 174
13.6透视投影 175
13.6.1射影变换和齐次坐标 175
13.6.2透视投影的矩阵 177
13.7总结 178
13.7.1仿射变换和射影变换的矩阵表示 178
13.7.2仿射变换和射影变换的矩阵 179
练习 180
编程作业 184
第十四章 射影空间与质点通用空间的对比 189
14.1代数和几何 189
14.2射影空间:标准模型 190
14.3质点空间:通用模型 193
14.4透视投影与伪透视 196
14.4.1透视和杠杆定律 196
14.4.2伪透视和伪深度 197
14.5总结 201
练习 202
第十五章 四元数:质点空间中的乘法 204
15.1向量空间和除法代数 204
15.2复数 205
15.3四元数 209
15.3.1四元数乘法 209
15.3.2四维空间中相互正交的平面 212
15.3.3四元数乘法的几何意义 214
15.3.4共形变换的四元数表示 218
15.3.5四元数方法与矩阵方法的对比 219
15.3.6退化的避免 220
15.3.7关键帧动画 221
15.3.8逆公式 221
15.4总结 224
练习 226
编程作业 232
第三部分 三维计算机图形学:真实感渲染 237
第十六章 颜色和亮度 237
16.1动机 237
16.2 RGB颜色模型 237
16.3环境光 238
16.4漫反射光 239
16.5镜面高光 240
16.6总亮度 242
16.7总结 242
练习 243
第十七章 递归光线跟踪 244
17.1光栅图形 244
17.2递归光线跟踪 244
17.3阴影 246
17.4反射 247
17.5折射 248
17.6总结 251
练习 252
第十八章 曲面(一):一般理论 253
18.1曲面的表示 253
18.1.1隐式曲面 253
18.1.2参数曲面 253
18.1.3变形曲面 254
18.1.4程序生成的曲面 254
18.2曲面法向量 255
18.2.1隐式曲面 255
18.2.2参数曲面 255
18.2.3变形曲面 256
18.3光线与曲面交点的计算 257
18.3.1隐式曲面 258
18.3.2参数曲面 258
18.3.3变形曲面 259
18.4平均曲率和Gauss曲率 259
18.4.1隐式曲面 260
18.4.2参数曲面 260
18.4.3变形曲面 261
18.5总结 261
18.5.1隐式曲面 261
18.5.2参数曲面 262
18.5.3变形曲面 263
练习 263
第十九章 曲面(二):简单曲面 266
19.1简单曲面 266
19.2 交点的计算策略 266
19.3平面和多边形 267
19.4自然二次曲面 269
19.4.1球面 269
19.4.2圆柱面 272
19.4.3圆锥面 275
19.4.4椭球面、椭圆柱面和椭圆锥面 276
19.5一般二次曲面 277
19.6圆环面 280
19.6.1圆环面的包围 283
19.7旋转曲面 285
19.8总结 288
练习 288
编程作业 291
第二十章 实体造型 293
20.1实体 293
20.2构造实体几何(CSG) 293
20.3边界表示(B-Rep) 297
20.4八叉树 301
20.5总结 303
练习 304
编程作业 306
第二十一章 明暗处理 308
21.1多边形模型 308
21.1.1多边形法向量计算的Newell公式 309
21.2均匀明暗处理 309
21.3 Gouraud明暗处理 310
21.4 Phong明暗处理 314
21.4.1简单的Phong明暗处理 314
21.4.2快速Phong明暗处理和漫反射 315
21.4.3快速Phong明暗处理和镜面反射 317
21.4.4 Phong明暗处理和球面线性插值 318
21.5总结 320
练习 322
编程作业 323
第二十二章 隐藏面消除算法 324
22.1隐藏面消除算法概述 324
22.2粗心画家算法 325
22.3z缓冲区(深度缓冲区)算法 325
22.4扫描线算法 326
22.5光线投射算法 330
22.6深度排序算法 331
22.6.1多边形的部分 333
22.7 BSP树算法 335
22.8总结 336
练习 337
编程作业 337
第二十三章 辐射度方法 338
23.1辐射度方法 338
23.2辐射度方程 338
23.2.1光照方程 339
23.2.2辐射度方程:连续形式 339
23.2.3辐射度方程:离散形式 342
23.3形状因子 343
23.4辐射度渲染算法 348
23.5辐射度方程的求解 350
23.5.1光能收集法 350
23.5.2射击法:渐进改良 352
23.6总结 354
练习 355
编程作业 357
第四部分 几何造型:自由曲线和曲面 361
第二十四章Bézier曲线和曲面 361
24.1插值与逼近 361
24.2 de Casteljau求值算法 362
24.3 Bernstein表示 365
24.4 Bézier曲线的几何性质 366
24.4.1仿射不变性 366
24.4.2凸包性质 367
24.4.3变差减缩性质 368
24.4.4首末控制点插值性质 369
24.5 de Casteljau算法的微分 370
24.5.1两条Bézier曲线的光滑拼接 372
24.5.2 Bézier控制点的唯一性 373
24.6张量积Bézier曲面片 373
24.7总结 377
练习 379
第二十五章Bézier细分算法 381
25.1分而治之的策略 381
25.2 de Casteljau细分算法 381
25.3显示和求交算法 385
25.3.1 Bézier曲线的显示和求交算法 385
25.3.2 Bézier曲面的显示和求交算法 387
25.4 Bézier曲线的变差减缩性质 389
25.5 Bézier曲线的光滑拼接 390
25.6总结 391
练习 392
编程作业 393
第二十六章 开花 395
26.1动机 395
26.2开花 396
26.3开花与de Casteljau算法 397
26.3.1基于开花的Bézier细分 400
26.4微分和齐次开花 400
26.4.1齐次化和齐次开花 401
26.4.2de Casteljau算法的微分 405
26.4.3单项式和Bézier形式之间的转化算法 407
26.5总结 409
练习 411
第二十七章B样条曲线和曲面 413
27.1动机 413
27.2开花和局部de Boor算法 414
27.3 B样条曲线和全局de Boor算法 417
27.4光滑性 419
27.5全局de Boor算法中的标记和局部性 421
27.6每个样条都是B样条 422
27.7 B样条曲线的几何性质 424
27.8张量积B样条曲面 425
27.9非均匀有理B样条(NURBS) 427
27.10总结 428
练习 429
第二十八章B样条曲线和曲面的节点插入算法 432
28.1动机 432
28.2节点插入 432
28.3局部节点插入算法 433
28.3.1 Boehm节点插入算法 433
28.3.2 Oslo算法 435
28.3.3从B样条转化为分片Bézier形式 436
28.3.4 B样条曲线的变差减缩性质 436
28.3.5 B样条曲线和曲面的显示和求交算法 437
28.4全局节点插入算法 438
28.4.1 Lane-Riesenfeld算法 439
28.4.2节点插入的Schaefer算法 441
28.4.3节点插入算法的收敛性 443
28.4.4 B样条曲线和曲面的显示和求交算法的修正 444
28.5总结 446
练习 448
编程作业 450
第二十九章 细分矩阵和迭代函数系统 451
29.1细分算法和分形过程 451
29.2细分矩阵 452
29.2.1 Bézier曲线的细分矩阵 453
29.2.2均匀B样条曲线的细分矩阵 455
29.3从细分矩阵建立迭代函数系统 459
29.3.1把控制点提升到高维空间 459
29.3.2规范曲线 463
29.4具有控制点的分形 465
29.5总结 467
29.5.1 Bézier曲线 468
29.5.2均匀B样条 469
练习 470
编程作业 471
第三十章 细分曲面 472
30.1动机 472
30.2箱样条 473
30.2.1分裂与平均 473
30.2.2箱样条曲面的细分过程 475
30.3四边形网格 476
30.3.1重心平均法 478
30.3.2任意四边形网格 479
30.3.3模板方法 481
30.4三角形网格 484
30.4.1三角形网格的重心平均 485
30.4.2三角形网格的模板 488
30.5总结 490
30.5.1双三次张量积B样条和三方向四次箱样条 491
30.5.2任意拓扑网格的重心平均 494
30.5.3异常顶点的模板 495
练习 496
编程作业 499
参考读物 501
索引 506