图书简介:
目 录
第1章 绪论 1
1.1 计算机图形学及其相关概念 1
1.2 计算机图形学的发展 2
1.2.1 计算机图形学学科的发展 2
1.2.2 图形硬件设备的发展 3
1.2.3 图形软件的发展 4
1.3 计算机图形学的应用 4
1.3.1 计算机辅助设计与制造 4
1.3.2 计算机辅助绘图 5
1.3.3 计算机辅助教学 5
1.3.4 办公自动化和电子出版技术 5
1.3.5 计算机艺术 6
1.3.6 在工业控制及交通方面的应用 6
1.3.7 在医疗卫生方面的应用 6
1.3.8 图形用户界面 6
1.4 计算机图形学研究动态 7
1.4.1 计算机动画 7
1.4.2 地理信息系统 8
1.4.3 人机交互 9
1.4.4 真实感图形显示 10
1.4.5 虚拟现实 10
1.4.6 科学计算可视化 12
1.4.7 并行图形处理 13
习题1 13
第2章 计算机图形系统及图形硬件 15
2.1 计算机图形系统概述 15
2.1.1 计算机图形系统的功能 15
2.1.2 计算机图形系统的结构 16
2.2 图形输入设备 18
2.2.1 键盘 18
2.2.2 鼠标器 19
2.2.3 光笔 19
2.2.4 触摸屏 20
2.2.5 操纵杆 20
2.2.6 跟踪球和空间球 20
2.2.7 数据手套 21
2.2.8 数字化仪 21
2.2.9 图像扫描仪 22
2.2.10 声频输入系统 22
2.2.11 视频输入系统 23
2.3 图形显示设备 23
2.3.1 阴极射线管 23
2.3.2 CRT图形显示器 27
2.3.3 平板显示器 30
2.3.4 三维观察设备 33
2.4 图形显示子系统 34
2.4.1 光栅扫描图形显示子系统的结构 34
2.4.2 绘制流水线 36
2.4.3 相关概念 37
2.5 图形硬拷贝设备 40
2.5.1 打印机 40
2.5.2 绘图仪 41
2.6 OpenGL图形软件包 41
2.6.1 OpenGL的主要功能 42
2.6.2 OpenGL的绘制流程 42
2.6.3 OpenGL的基本语法 43
2.6.4 一个完整的OpenGL程序 44
习题2 47
第3章 用户接口与交互式技术 48
3.1 用户接口设计 48
3.1.1 用户模型 48
3.1.2 显示屏幕的有效利用 48
3.1.3 反馈 49
3.1.4 一致性原则 50
3.1.5 减少记忆量 50
3.1.6 回退和出错处理 51
3.1.7 联机帮助 51
3.1.8 视觉效果设计 51
3.1.9 适应不同的用户 52
3.2 逻辑输入设备与输入处理 52
3.2.1 逻辑输入设备 52
3.2.2 输入模式 55
3.3 交互式绘图技术 56
3.3.1 基本交互式绘图技术 56
3.3.2 三维交互技术 58
3.4 OpenGL中橡皮筋技术的实现 59
3.4.1 基于鼠标的实现 60
3.4.2 基于键盘的实现 62
3.5 OpenGL中拾取操作的实现 63
3.6 OpenGL的菜单功能 67
习题3 68
第4章 图形的表示与数据结构 69
4.1 基本概念 69
4.1.1 基本图形元素 69
4.1.2 几何信息与拓扑信息 70
4.1.3 坐标系 71
4.1.4 实体的定义 73
4.1.5 正则集合运算 74
4.1.6 平面多面体与欧拉公式 76
4.2 三维形体的表示 77
4.2.1 多边形表面模型 78
4.2.2 扫描表示 81
4.2.3 构造实体几何法 81
4.2.4 空间位置枚举表示 83
4.2.5 八叉树 84
4.2.6 BSP树 85
4.2.7 OpenGL中的实体模型函数 85
4.3 非规则对象的表示 90
4.3.1 分形几何 90
4.3.2 形状语法 92
4.3.3 粒子系统 93
4.3.4 基于物理的建模 93
4.3.5 数据场的可视化 93
4.4 层次建模 94
4.4.1 段与层次建模 94
4.4.2 层次模型的实现 95
4.4.3 OpenGL中层次模型的实现 96
习题4 98
第5章 基本图形生成算法 99
5.1 直线的扫描转换 99
5.1.1 数值微分法 99
5.1.2 中点Bresenham算法 101
5.1.3 Bresenham算法 103
5.2 圆的扫描转换 105
5.2.1 八分法画圆 105
5.2.2 中点Bresenham画圆算法 106
5.3 椭圆的扫描转换 107
5.3.1 椭圆的特征 108
5.3.2 椭圆的中点Bresenham算法 109
5.4 多边形的扫描转换与区域填充 112
5.4.1 多边形的扫描转换 112
5.4.2 边缘填充算法 116
5.4.3 区域填充 118
5.4.4 其他相关概念 122
5.5 字符处理 123
5.5.1 点阵字符 123
5.5.2 矢量字符 124
5.6 属性处理 124
5.6.1 线型和线宽 124
5.6.2 字符的属性 127
5.6.3 区域填充的属性 127
5.7 反走样 128
5.7.1 过取样 129
5.7.2 简单的区域取样 130
5.7.3 加权区域取样 131
5.8 在OpenGL中绘制图形 132
5.8.1 点的绘制 132
5.8.2 直线的绘制 133
5.8.3 多边形面的绘制 134
5.8.4 OpenGL中的字符函数 138
5.8.5 OpenGL中的反走样 139
习题5 141
第6章 二维变换及二维观察 143
6.1 基本概念 143
6.2 基本几何变换 144
6.2.1 平移变换 144
6.2.2 比例变换 145
6.2.3 旋转变换 146
6.2.4 对称变换 146
6.2.5 错切变换 148
6.2.6 二维图形几何变换的计算 149
6.3 复合变换 150
6.3.1 二维复合平移变换和比例变换 150
6.3.2 二维复合旋转变换 150
6.3.4 其他二维复合变换 151
6.3.5 相对任一参考点的二维几何变换 151
6.3.6 相对于任意方向的二维几何变换 152
6.3.7 坐标系之间的变换 153
6.3.8 光栅变换 154
6.3.9 变换的性质 155
6.4 二维观察 156
6.4.1 基本概念 156
6.4.2 用户坐标系到观察坐标系的变换 158
6.4.3 窗口到视区的变换 158
6.5 裁剪 159
6.5.1 点的裁剪 160
6.5.2 直线段的裁剪 160
6.5.3 多边形的裁剪 166
6.5.4 其他裁剪 169
6.6 OpenGL中的二维观察变换 170
习题6 172
第7章 三维变换及三维观察 173
7.1 三维变换的基本概念 173
7.1.1 几何变换 173
7.1.2 三维齐次坐标变换矩阵 173
7.1.3 平面几何投影 174
7.2 三维几何变换 175
7.2.1 三维基本几何变换 175
7.2.2 三维复合变换 180
7.3 三维投影变换 183
7.3.1 正投影 183
7.3.2 斜投影 189
7.4 透视投影 190
7.4.1 一点透视 192
7.4.2 二点透视 193
7.4.3 三点透视 194
7.5 观察坐标系及观察空间 195
7.5.1 观察坐标系 195
7.5.2 观察空间 196
7.6 三维观察流程 199
7.6.1 用户坐标系到观察坐标系的变换 200
7.6.2 平行投影的规范化投影变换 200
7.6.3 透视投影的规范化投影变换 202
7.7 三维裁剪 205
7.7.1 关于规范化观察空间的裁剪 205
7.7.2 齐次坐标空间的裁剪 206
7.8 OpenGL中的变换 207
7.8.1 矩阵堆栈 207
7.8.2 模型视图变换 208
7.8.3 投影变换 209
7.8.4 实例 211
习题7 213
第8章 曲线与曲面 215
8.1 基本概念 215
8.1.1 曲线/曲面数学描述的发展 215
8.1.2 曲线/曲面的表示要求 216
8.1.3 曲线/曲面的表示 217
8.1.4 插值与逼近 218
8.1.5 连续性条件 218
8.1.6 样条描述 219
8.2 三次样条 220
8.2.1 自然三次样条 220
8.2.2 Hermite插值样条 221
8.3 Bezier曲线/曲面 222
8.3.1 Bezier曲线的定义 223
8.3.2 Bezier曲线的性质 224
8.3.3 Bezier曲线的生成 226
8.3.4 Bezier曲面 229
8.4 B样条曲线/曲面 230
8.4.1 B样条曲线 230
8.4.2 B样条曲线的性质 235
8.4.3 B样条曲面 237
8.5 有理样条曲线/曲面 237
8.5.1 NURBS曲线/曲面的定义 238
8.5.2 有理基函数的性质 239
8.5.3 NURBS曲线/曲面的特点 240
8.6 曲线/曲面的转换和计算 241
8.6.1 样条曲线/曲面的转换 241
8.6.2 样条曲线/曲面的离散生成 242
8.7 OpenGL生成曲线/曲面 244
8.7.1 Bezier曲线/曲面函数 244
8.7.2 GLU中的B样条曲线/曲面函数 247
习题8 252
第9章 消隐 253
9.1 深度缓存器算法 253
9.2 区间扫描线算法 255
9.3 深度排序算法 257
9.4 区域细分算法 258
9.5 光线投射算法 260
9.6 BSP树 260
9.7 多边形区域排序算法 261
9.8 OpenGL中的消隐处理 262
习题9 267
第10章 真实感图形绘制 268
10.1 简单光照模型 268
10.1.1 环境光 268
10.1.2 漫反射光 269
10.1.3 镜面反射光 270
10.1.4 光强衰减 271
10.1.5 颜色 272
10.2 基于简单光照模型的多边形绘制 273
10.2.1 恒定光强的多边形绘制 274
10.2.2 Gouraud明暗处理 274
10.2.3 Phong明暗处理 276
10.3 透明处理 277
10.4 产生阴影 278
10.5 模拟景物表面细节 278
10.5.1 用多边形模拟表面细节 279
10.5.2 纹理的定义和映射 279
10.5.3 凹凸映射 280
10.6 整体光照模型与光线追踪 281
10.6.1 整体光照模型 281
10.6.2 Whitted光照模型 281
10.6.3 光线跟踪算法 282
10.6.4 光线跟踪反走样 284
10.7 OpenGL中的光照与表面绘制函数 285
10.7.1 OpenGL点光源 285
10.7.2 OpenGL全局光照 286
10.7.3 OpenGL表面材质 287
10.7.4 OpenGL透明处理 288
10.7.5 OpenGL表面绘制 289
10.7.6 实例 289
10.8 OpenGL中的纹理映射 291
习题10 293
参考文献 295
展开
前 言
近几十年来,交互式计算机图形学有了引人瞩目的发展。可以说:“已经没有哪一个领域未从计算机图形学的发展和应用中获得好处。”
目前,几乎所有的高等学校均已开设了“计算机图形学”课程。国内外知名大学通常这样来安排计算机图形学的课程体系:本科生开设“计算机图形学基础”或“计算机图形学引论”课程,讲述计算机图形学的基本知识和基础技术,为在这一领域深入学习和研究奠定基础;研究生开设“高级计算机图形学”“计算机图形学热点话题”“真实感图形显示”“虚拟现实技术”等课程,重点讨论计算机图形学的发展动态与研究热点。
我们在多年教学实践的基础上,参阅国内外最新版本的教材,主要针对高等院校本科生编写了本书。力争达到三个目标:
一是着重介绍计算机图形学的基本内容,让学生逐渐掌握和熟悉这个学科中涉及的基本概念和思维方式;
二是尽量给出计算机图形学最新发展所需要的基础知识;
三是坚持理论与实践相结合,尽可能多地采用现有的成熟技术,提供相关的编程实例。
本书第2版入选普通高等教育“十一五”国家级规划教材。结合教学实践、教材使用反馈和最新技术发展,由陆枫和何云峰进行了修订和改写。
本书内容全面翔实,概念简明清晰,实例丰富实用,教学资源配套。本书配有教学资源,包含作者多年来教学改革和实践的成果——电子教案和相关教学编程实例,教师可通过华信教育资源网http://www.hxedu.com.cn负责注册下载。
全书共10章。
第1章,简要介绍计算机图形学的基本概念、应用和发展动态。
第2~5章,由“外”到“内”介绍计算机图形处理系统的硬件设备、人机交互处理、图形对象在计算机内的表示以及基本图素的生成算法等。
第6章,主要介绍二维变换和二维观察的概念。
第7~10章,主要涉及三维图形的变换、处理和绘制。
第7章介绍三维变换及三维观察的基本内容,包括几何变换和投影变换等。
第8章介绍曲线和曲面的生成。
第9章简要介绍常用的消隐算法。
第10章对真实感图形绘制的基本思想做了简单描述。
在本书的编写过程中,得到了华中科技大学计算机科学与技术学院卢正鼎、王炎坤、金海、李桂兰、刘乐善、周功业等教授的支持,在此表示衷心感谢。感谢杨薇薇、于俊清、徐海银、李丹、万琳、凌贺飞、邹复好、陶文兵、李国宽等华中科技大学计算机科学与技术学院计算机图形学课程组的教师们,他们参与了本书的教学实践并提出了宝贵的修改意见。感谢李其申、龚文杰、谢琦珺、张林、庞敏、张潇、白云、王重、闵敏、李涛、杨红圆、陈文辉、沙晋、华睿、宋承璐、马琰、慎厚雄、王玉琼、邓黎明、陈霞、洪雪松、曾辉、严川鳔、吴峰、方涛、黎良、章昆、熊炎、谢欣荣、朱唯波、姚杰、钱达胜、李磊、吴为、王敖、章仙军、陈慧、杨波、潘龙、潘伟文、盛斌、夏永、高玉琴、杨文、杨亮、张聪、卢嘉、任天兵、李晓宇、何文珺、刘紫兆、万季、方哲翔等同学在计算机图形学教学中提出的建议和制作的相关程序。
由于作者水平有限,书中难免有不妥甚至错误之处,恳请读者不吝指正。作者的E-mail地址:lufeng@hust.edu.cn。
作者
于武汉喻家山
展开