第1章 绪论 1
1.1 计算机图形学基本概念 2
1.2 计算机图形学的典型应用领域及其分类 3
1.2.1 典型应用领域 3
1.2.2 应用分类 6
1.3 交互式图形学 7
1.3.1 交互式概念 7
1.3.2 交互式图形系统框架 8
1.4 计算机图形学及相关技术的发展 11
1.4.1 图形学发展历程 11
1.4.2 输出技术 13
1.4.3 输入技术 17
1.4.4 软件可移植性及图形标准 18
1.5 图形学当前的研究动态 18
1.5.1 真实感图形实时绘制 19
1.5.2 计算机动画 19
1.5.3 与计算机网络技术的紧密结合 20
1.6 本章小结 20
1.7 习题与思考 21
1.8 参考文献 21
第2章 常用图形软件简介 22
2.1 平面类 22
2.1.1 ANIMO 22
2.1.2 CorelDRAW 23
2.1.3 Illustrator 23
2.1.4 ImageReady 23
2.1.5 PageMaker与InDesign 24
2.1.6 Painter 24
2.1.7 Paint Shop Pro 24
2.1.8 PhotoImpact 24
2.1.9 PhotoLine 25
2.1.10 PhotoShop 25
2.1.11 Photoshop Elements 26
2.2 三维类 26
2.2.1 3D Studio Max 26
2.2.2 Bryce 27
2.2.3 Canoma 27
2.2.4 COOL 3D 28
2.2.5 Dimensions 28
2.2.6 Extreme 3D 28
2.2.7 Houdini 28
2.2.8 Lightscape 29
2.2.9 LightWave 3D 29
2.2.10 Maya 29
2.2.11 Mental Ray 30
2.2.12 Poser 30
2.2.13 RenderMan 30
2.2.14 Rhino 3D 31
2.2.15 SoftImage 3D/XSI 31
2.2.16 Sumatra 32
2.2.17 Swift 3D 32
2.3 多媒体类 32
2.3.1 After Effects 32
2.3.2 Authorware 32
2.3.3 Combustion 33
2.3.4 Digital Fusion 33
2.3.5 Director 33
2.3.6 Premiere 34
2.3.7 Ulead Video Studio 34
2.3.8 Toolbook 34
2.4 网络类 35
2.4.1 DreamWeaver 35
2.4.2 Drumbeat 35
2.4.3 Fireworks 35
2.4.4 Flash 35
2.4.5 FreeHand 36
2.4.6 FrontPage 36
2.4.7 GIF Animator 37
2.4.8 Swish 37
2.5 工程类 38
2.5.1 ACIS 38
2.5.2 3D Studio VIZ 38
2.5.3 AutoCAD 39
2.5.4 AutoDesk VIZ 39
2.5.5 CAXA 39
2.5.6 MicroStation 40
2.5.7 Pro/Enginer 40
2.5.8 Unigraphics 40
2.6 工具类 40
2.6.1 ACDSee 41
2.6.2 SWF Browse 41
2.6.3 EXE2SWF 41
2.6.4 FiLMBOX 41
2.6.5 FlashForge 41
2.6.6 Konvertor 42
2.6.7 SnagIt 42
2.7 编程类 42
2.7.1 Cg图形编程语言 42
2.7.2 C#中图形编程 42
2.7.3 Delphi中图形编程 43
2.7.4 OpenGL 43
2.7.5 RomPager Java图形包 43
2.7.6 VC++中图形编程功能 43
2.7.7 VRML虚拟现实建模语言 43
2.8 本章小结 44
2.9 习题与思考 44
第3章 基于光栅扫描的二维图元生成算法 45
3.1 直线的扫描变换 45
3.1.1 基本增量算法 46
3.1.2 中点画线算法 48
3.1.3 Bresenham画线算法 52
3.2 圆与椭圆的扫描变换 55
3.2.1 圆的扫描变换 55
3.2.2 椭圆的扫描变换 67
3.3 区域填充 71
3.3.1 多边形域的填充 71
3.3.2 圆域的填充 85
3.3.3 图案填充 85
3.4 线宽与线型的处理 86
3.4.1 直线线宽的处理 86
3.4.2 圆弧线宽的处理 88
3.4.3 线型的处理 89
3.5 字符 90
3.5.1 矢量字符 90
3.5.2 点阵字符 91
3.5.3 字型技术 92
3.5.4 字符输出 93
3.6 裁剪 95
3.6.1 窗口视口变换 96
3.6.2 线段裁剪 96
3.6.3 多边形裁剪 108
3.6.4 字符裁剪 117
3.7 反走样基础 118
3.7.1 提高分辨率 119
3.7.2 简单的区域反走样算法 119
3.7.3 卷积积分与反走样算法 120
3.7.4 半色调技术 121
3.8 本章小结 122
3.9 习题与思考 123
3.10 参考文献 123
第4章 图形硬件与图形软件标准化 124
4.1 图形输入设备 124
4.1.1 键盘 125
4.1.2 鼠标器 127
4.1.3 键盘与鼠标的接口及其标准 129
4.1.4 触摸屏 129
4.1.5 坐标数字化仪 131
4.1.6 图形扫描仪 132
4.1.7 数码相机 133
4.1.8 手写笔 135
4.2 图形输出设备 135
4.2.1 图形显示设备 135
4.2.2 图形绘制设备 146
4.3 图形处理设备 149
4.3.1 图形处理器 149
4.3.2 视频控制器 150
4.3.3 显示处理器 150
4.4 图形标准化概述 151
4.5 图形程序接口标准 152
4.5.1 GKS标准 152
4.5.2 GKS-3D标准 154
4.5.3 PHIGS标准 155
4.5.4 非官方图形标准 158
4.6 图形元文件 158
4.6.1 GKSM和VDM文件 158
4.6.2 CGM文件 159
4.7 设备接口标准 160
4.7.1 VDI虚拟设备接口 160
4.7.2 CGI计算机图形设备接口 160
4.8 应用程序接口标准 161
4.8.1 概述 161
4.8.2 原始图形交换规范(IGES) 161
4.8.3 产品模型数据转换标准(STEP) 163
4.9 本章小结 166
4.10 习题与思考 167
第5章 几何变换 168
5.1 二维变换 168
5.1.1 平移变换 168
5.1.2 比例变换 169
5.1.3 旋转变换 169
5.2 齐次坐标系和二维变换的矩阵表示 171
5.2.1 平移变换 171
5.2.2 比例变换 172
5.2.3 旋转变换 173
5.2.4 刚体变换和仿射变换 173
5.2.5 对称变换 175
5.3 二维变换的组合 175
5.3.1 关于任意点P1旋转变换物体 175
5.3.2 关于任意点P1比例变换物体 176
5.3.3 综合变换 176
5.4 窗口到视口的变换 177
5.4.1 基本概念 177
5.4.2 视窗变换实例WindowToViewport的设计 178
5.5 仿射变换的效率问题 182
5.6 三维变换的矩阵表示 183
5.7 三维变换的组合 186
5.7.1 实例一 186
5.7.2 实例二 189
5.8 坐标系的变换 190
5.9 三维变换中的对称变换矩阵 193
5.10 本章小结 194
5.11 习题与思考 195
第6章 三维视图 196
6.1 投影 196
6.1.1 透视投影 198
6.1.2 平行投影 198
6.2 三维视图的定义 202
6.3 平面几何投影的计算 205
6.4 平面几何投影的实现 209
6.4.1 平行投影 210
6.4.2 透视投影 212
6.4.3 三维规格化裁剪盒的裁剪 214
6.4.4 在齐次坐标系中裁剪 215
6.4.5 映射到视区 217
6.4.6 视图变换实现方法小结 218
6.5 坐标系名称 218
6.6 本章小结 219
6.7 习题与思考 220
第7章 三维图形的绘制实践 221
7.1 交互式图形系统应用实例介绍 221
7.1.1 Photoshop制作爆炸效果 221
7.1.2 用Photoshop制作立体台灯 225
7.2 奖杯的制作 229
7.3 利用VC设计三维投影程序 236
7.3.1 用户界面的设计 237
7.3.2 视图过程的简化处理 237
7.3.3 程序结构的设计 242
7.4.4 物体模型的描述 243
7.3.5 视图类的设计 245
7.3.6 3DViewing的具体实现 245
7.4 利用OpenGL图形包编制应用程序 254
7.4.1 OpenGL的构成及工作流程 254
7.4.2 OpenGL的运行环境要求 255
7.4.3 OpenGL的应用程序开发 255
7.5 本章小结 272
7.6 习题与思考 273
7.7 参考文献 273
第8章 图形用户界面与交互技术 274
8.1 交互任务 275
8.2 交互技术 276
8.2.1 定位操作 277
8.2.2 选图 278
8.2.3 实数输入设备 280
8.2.4 字符输入 280
8.2.5 功能选择 281
8.2.6 几何约束 281
8.2.7 拖动 283
8.2.8 橡皮筋技术 283
8.2.9 图形变比 284
8.2.10 引力场效果 285
8.2.11 标尺和导向线 286
8.2.12 坐标显示 286
8.2.13 菜单 287
8.2.14 在三视图上作三维输入 287
8.2.15 扫描表示 288
8.3 图形输入模式 288
8.4 图形输出属性及其处理方法 290
8.4.1 直线的属性 290
8.4.2 多边形填色的属性 290
8.4.3 字符的属性 291
8.4.4 符号的属性 291
8.4.5 属性的组合控制 291
8.4.6 属性的查询 292
8.5 设计人机图形交互的一般原则 292
8.5.1 简单易学 292
8.5.2 提供反馈 292
8.5.3 出错处理 293
8.5.4 设计的一致性 293
8.5.5 可扩充性 293
8.6 交互技术应用实例 293
8.6.1 界面设计 293
8.6.2 结构设计 294
8.6.3 程序实现 295
8.6.4 程序小结 295
8.7 本章小结 295
8.8 练习与思考 296
8.9 参考文献 296
第9章 真实感图形的显示 297
9.1 消隐处理 298
9.1.1 消隐的基础知识 298
9.1.2 常用的消隐方法 298
9.2 光照模型及浓淡处理 305
9.2.1 漫射光照明 305
9.2.2 点光源照明和镜面反射 306
9.2.3 浓淡形成算法 308
9.2.4 整体光照明模型 308
9.3 计算机色彩的构成 310
9.4 透明 312
9.5 阴影 312
9.6 纹理 313
9.7 三维真实感图形显示 314
9.7.1 多面体的仿真显示 314
9.7.2 曲面的仿真显示 315
9.7.3 视线投射算法 315
9.8 真实感图形显示技术应用实例 316
9.8.1 光照模型实例 316
9.8.2 阴影模型实例 320
9.8.3 纹理模型实例 323
9.9 本章小结 327
9.10 习题与思考 327
9.11 参考文献 327
第10章 曲线与曲面 328
10.1 曲线的产生 328
10.1.1 DDA曲线生成算法 328
10.1.2 内插法 331
10.2 自由曲线 338
10.2.1 三次参数样条曲线段 338
10.2.2 三次Bézier曲线段 342
10.2.3 三次B样条曲线段 345
10.2.4 NURBS曲线 350
10.3 曲面 350
10.3.1 Coons曲面 350
10.3.2 Bézier曲面 352
10.3.3 B样条曲面 353
10.3.4 特殊曲面的生成 354
10.4 曲线与曲面实例 355
10.4.1 曲线DDA算法实例 355
10.4.2 Bézier曲面算法实例 355
10.5 本章小结 358
10.6 习题与思考 358
第11章 实体建模 359
11.1 实体的表示 360
11.1.1 参考坐标系 360
11.1.2 元素的定义 361
11.1.3 常用的形体表示方式 363
11.2 二维图形数据结构 369
11.2.1 数据的逻辑结构 369
11.2.2 数据的物理结构 370
11.3 三维形体数据结构 370
11.4 实体建模实例 373
11.4.1 实例程序功能与设计 373
11.4.2 详细设计与实现效果 373
11.5 本章小结 378
11.6 习题与思考 378
第12章 计算机动画技术简介 379
12.1 动画技术的发展与分类 379
12.1.1 动画技术的发展历程 379
12.1.2 动画的种类划分 380
12.2 计算机动画制作的关键技术和技巧 381
12.2.1 制作动画的基本步骤 381
12.2.2 关键帧动画 382
12.2.3 渐变和变形物体动画 383
12.2.4 形状过渡 385
12.2.5 过程动画 385
12.2.6 人体动画与关节动画 386
12.2.7 运动捕获技术 386
12.2.8 设定运动路径 387
12.2.9 换页法 387
12.2.10 位图运算法 387
12.3 计算机动画的实现技术 388
12.3.1 动画播放 388
12.3.2 利用C语言中getimage()和putimage()函数实现动画 389
12.3.3 多重屏幕页 389
12.4 程序举例 390
12.4.1 利用C语言编程实现动画 390
12.4.2 利用网页动画制作软件Flash直接生成网页动画 391
12.5 计算机动画发展的未来 391
12.6 本章小结 392
12.7 习题与思考 393
第13章 简单图形系统的实现 394
13.1 画板系统的需求分析 395
13.2 设计考虑 395
13.2.1 设计思路 395
13.2.2 设计层次 396
13.3 界面设计 397
13.4 类的设计 399
13.4.1 图形类 400
13.4.2 CShapeManager类 423
13.4.3 CHistory类 432
13.4.4 对一些自动生成类的介绍 434
13.5 三维图形系统实例 440
13.5.1 物体及场景的绘制 441
13.5.2 鼠标交互技术 443
13.6 图形系统设计的一般原则 445
13.7 习题与思考 446
第14章 虚拟现实与可视化技术 447
14.1 虚拟现实 447
14.1.1 虚拟现实采用的关键技术 447
14.1.2 虚拟现实系统的应用分类 448
14.1.3 虚拟现实的应用前景 449
14.2 科学计算可视化 451
14.2.1 可视化的主要特点及应用 451
14.2.2 三维可视化技术 453
14.2.3 矢量场可视化的研究 453
14.3 虚拟现实编程实例——虚拟生活小区 455
14.3.1 虚拟现实造型语言 455
14.3.2 实例介绍 458
14.4 本章小结 466
14.5 习题与思考 467
14.6 参考文献 467
第15章 立体显示技术 468
15.1 立体显示研究背景及基本概念 468
15.1.1 立体显示的基本概念 468
15.1.2 电视与显示器的变革 468
15.1.3 立体显示产品与研究现状 469
15.2 立体视觉基本原理 470
15.2.1 视差 470
15.2.2 立体感原理与立体成像系统的任务 470
15.3 立体显示技术与思想综述 471
15.3.1 立体显示的分类 471
15.3.2 时间复用的显示方式 471
15.3.3 同步显示方式 471
15.3.4 立体显示系统的组成 471
15.3.5 体视显示方式 472
15.3.6 自体视显示方式 472
15.4 立体图像的获取 476
15.4.1 用立体摄像机对拍摄立体图像 476
15.4.2 用深度摄像机拍摄立体图像 477
15.4.3 通过平面图像生成立体图像 478
15.5 立体显示技术所需要的编码技术 478
15.5.1 基于视差和深度的编码 478
15.5.2 混合分辨率编码 479
15.5.3 多视点编码 479
15.6 立体视频在Internet上的传输 479
15.7 立体显示技术展望及应用 480
15.7.1 立体显示技术的发展方向 480
15.7.2 立体显示技术的潜在应用 480
15.8 本章小结 481
15.9 习题与思考 481
15.10 参考文献 482
附录A 空间与矩阵概念 483
A1 空间 483
A1.1 标量 483
A1.2 向量空间 483
A1.3 仿射空间 485
A1.4 欧几里得空间 486
A1.5 投影 487
A1.6 Gram-Schmidt正交化 487
A1.7 参考书目 488
A2 矩阵 488
A2.1 定义 488
A2.2 矩阵运算 489
A2.3 行矩阵与列矩阵 489
A2.4 秩 490
A2.5 表示法的变化 490
A2.6 叉积 491
A2.7 特征值和特征向量 492
A2.8 参考书目 493
附录B 动画制作综合实例之摔跤游戏的制作 494
B.1 游戏功能描述 494
B.2 设计思路 495
B.3 详细设计与实现概述 496
B.3.1 菜单模块的实现 496
B.3.2 界面安排与绘制模块的实现 497
B.3.3 声音处理模块的实现 501
B.3.4 游戏信息、摔跤相关知识、帮助模块的实现 501
B.3.5 保存玩家分数模块的实现 502
B.3.6 游戏程序控制模块的实现 502
B.4 总结与延伸 507
参考文献 509
图形学概念索引 510