描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111611806
内容简介
本书是计算机图形学领域的著作,系统全面地介绍了计算机图形学领域的关键概念、算法、技术和应用。本书先介绍了如何创建二维和三维图像,接下来介绍了更为广泛的话题,包括图像表示和操纵、图像和信号处理、图像的缩放、纹理和纹理映射、交互技术、曲线分割、曲面分割、形状的隐式表示、网格、光、材料和散射、颜色、光传输、概率和蒙特卡洛集成、动画、空间数据结构、现代图形学硬件等内容。
目 录
出版者的话
译者序
前言
作者简介
第1章 绪论1
1.1 计算机图形学简介1
1.1.1 计算机图形学的世界3
1.1.2 应用领域的现状与前景3
1.1.3 关于用户界面的思考5
1.2 简要历史6
1.3 一个光照的例子7
1.4 目标、资源和适度的抽象8
1.4.1 深度理解与常见的做法9
1.5 图形学中的常数和一些参数值的量级9
1.5.1 光能量和光子到达率9
1.5.2 显示器的特性和眼睛的分辨率10
1.5.3 数码相机的特性10
1.5.4 复杂应用的处理需求10
1.6 图形管线11
1.6.1 纹理映射与近似12
1.6.2 更为详细的图形管线13
1.7 图形学与艺术、设计、感知的关系14
1.8 基本图形系统16
1.8.1 图形数据16
1.9 视为黑盒的多边形绘制18
1.10 图形系统中的交互18
1.11 不同类型的图形应用18
1.12 不同类型的图形包19
1.13 构建真实感绘制模块:概述20
1.13.1 光线20
1.13.2 物体和材料21
1.13.3 接收来自场景中的光线22
1.13.4 图像显示22
1.13.5 人类视觉系统23
1.13.6 数学运算23
1.13.7 积分和采样24
1.14 学习计算机图形学24
第2章 2D图形学简介——基于WPF26
2.1 引言26
2.2 2D图形流水线概述26
2.3 2D图形平台的演变27
2.3.1 从整数坐标到浮点数坐标27
2.3.2 即时模式与保留模式29
2.3.3 过程语言与描述性语言30
2.4 使用WPF定义2D场景31
2.4.1 XAML应用程序结构31
2.4.2 采用抽象坐标系定义场景31
2.4.3 坐标系的选择范围33
2.4.4 WPF画布坐标系34
2.4.5 使用显示变换35
2.4.6 构造并使用模块化模板37
2.5 用WPF实现的2D图形动态显示42
2.5.1 基于描述性动画的动态显示42
2.5.2 基于过程代码的动态显示44
2.6 支持各种形状系数45
2.7 讨论和延伸阅读46
第3章 一个古老的绘制器47
3.1 一幅丢勒的木刻画47
3.2 可见性49
3.3 实现49
3.3.1 绘图52
3.4 程序55
3.5 局限性57
3.6 讨论和延伸阅读59
3.7 练习60
第4章 2D图形测试平台62
4.1 引言62
4.2 测试平台的细节63
4.2.1 使用2D测试平台63
4.2.2 割角63
4.2.3 基于测试平台的程序的结构64
4.3 C#代码68
4.3.1 坐标系70
4.3.2 WPF数据依赖71
4.3.3 事件处理71
4.3.4 其他几何物体73
4.4 动画73
4.5 交互74
4.6 测试平台的一个应用程序74
4.7 讨论77
4.8 练习77
第5章 人类视觉感知简介78
5.1 引言78
5.2 视觉系统79
5.3 眼睛82
5.3.1 眼睛的生理机能82
5.3.2 眼睛中的光感受器83
5.4 恒常性及其影响85
5.5 延续性87
5.6 阴影88
5.7 讨论和延伸阅读89
5.8 练习90
第6章 固定功能的3D图形平台和层次建模简介92
6.1 引言92
6.1.1 WPF 3D部分的设计92
6.1.2 对光与物体交互的物理过程的近似93
6.1.3 WPF 3D概述93
6.2 网格和光照属性94
6.2.1 场景设计94
6.2.2 生成更真实的光照98
6.2.3 固定功能绘制中的“光照”与“着色”101
6.3 曲面表示和绘制102
6.3.1 基于插值的着色处理(Gouraud着色)102
6.3.2 将表面设置为多面体表面和平滑表面104
6.4 WPF中的表面纹理105
6.4.1 基于分片拼接的纹理映射106
6.4.2 基于拉伸的纹理映射107
6.5 WPF反射模型107
6.5.1 颜色设置107
6.5.2 光源几何108
6.5.3 反射率108
6.6 基于场景图进行层次建模112
6.6.1 模块化建模的动因112
6.6.2 自顶向下的部件层次结构设计113
6.6.3 自下而上的构建和组合114
6.6.4 构件的重用118
6.7 讨论120
第7章 2D和3D空间中的基础数学与几何121
7.1 引言121
7.2 记号121
7.3 集合121
7.4 函数122
7.4.1 反正切函数123
7.5 坐标124
7.6 坐标运算124
7.6.1 向量126
7.6.2 如何理解向量127
7.6.3 向量长度127
7.6.4 向量运算127
7.6.5 矩阵乘法130
7.6.6 其他类型的向量131
7.6.7 隐式直线132
7.6.8 平面直线的隐式描述133
7.6.9 能否采用y=mx+b134
7.7 直线求交134
7.7.1 参数化参数化直线求交134
7.7.2 参数化隐式直线求交135
7.8 更一般的求交计算135
7.8.1 光线平面求交136
7.8.2 光线球求交137
7.9 三角形138
7.9.1 重心坐标138
7.9.2 空间三角形139
7.9.3 半平面和三角形140
7.10 多边形141
7.10.1 内/外测试141
7.10.2 非简单多边形的内部143
7.10.3 平面多边形的符号面积:分而治之143
7.10.4 空间多边形的法向量144
7.10.5 更一般多边形的符号面积145
7.10.6 倾斜原理145
7.10.7 重心坐标的模拟146
7.11 讨论147
7.12
译者序
前言
作者简介
第1章 绪论1
1.1 计算机图形学简介1
1.1.1 计算机图形学的世界3
1.1.2 应用领域的现状与前景3
1.1.3 关于用户界面的思考5
1.2 简要历史6
1.3 一个光照的例子7
1.4 目标、资源和适度的抽象8
1.4.1 深度理解与常见的做法9
1.5 图形学中的常数和一些参数值的量级9
1.5.1 光能量和光子到达率9
1.5.2 显示器的特性和眼睛的分辨率10
1.5.3 数码相机的特性10
1.5.4 复杂应用的处理需求10
1.6 图形管线11
1.6.1 纹理映射与近似12
1.6.2 更为详细的图形管线13
1.7 图形学与艺术、设计、感知的关系14
1.8 基本图形系统16
1.8.1 图形数据16
1.9 视为黑盒的多边形绘制18
1.10 图形系统中的交互18
1.11 不同类型的图形应用18
1.12 不同类型的图形包19
1.13 构建真实感绘制模块:概述20
1.13.1 光线20
1.13.2 物体和材料21
1.13.3 接收来自场景中的光线22
1.13.4 图像显示22
1.13.5 人类视觉系统23
1.13.6 数学运算23
1.13.7 积分和采样24
1.14 学习计算机图形学24
第2章 2D图形学简介——基于WPF26
2.1 引言26
2.2 2D图形流水线概述26
2.3 2D图形平台的演变27
2.3.1 从整数坐标到浮点数坐标27
2.3.2 即时模式与保留模式29
2.3.3 过程语言与描述性语言30
2.4 使用WPF定义2D场景31
2.4.1 XAML应用程序结构31
2.4.2 采用抽象坐标系定义场景31
2.4.3 坐标系的选择范围33
2.4.4 WPF画布坐标系34
2.4.5 使用显示变换35
2.4.6 构造并使用模块化模板37
2.5 用WPF实现的2D图形动态显示42
2.5.1 基于描述性动画的动态显示42
2.5.2 基于过程代码的动态显示44
2.6 支持各种形状系数45
2.7 讨论和延伸阅读46
第3章 一个古老的绘制器47
3.1 一幅丢勒的木刻画47
3.2 可见性49
3.3 实现49
3.3.1 绘图52
3.4 程序55
3.5 局限性57
3.6 讨论和延伸阅读59
3.7 练习60
第4章 2D图形测试平台62
4.1 引言62
4.2 测试平台的细节63
4.2.1 使用2D测试平台63
4.2.2 割角63
4.2.3 基于测试平台的程序的结构64
4.3 C#代码68
4.3.1 坐标系70
4.3.2 WPF数据依赖71
4.3.3 事件处理71
4.3.4 其他几何物体73
4.4 动画73
4.5 交互74
4.6 测试平台的一个应用程序74
4.7 讨论77
4.8 练习77
第5章 人类视觉感知简介78
5.1 引言78
5.2 视觉系统79
5.3 眼睛82
5.3.1 眼睛的生理机能82
5.3.2 眼睛中的光感受器83
5.4 恒常性及其影响85
5.5 延续性87
5.6 阴影88
5.7 讨论和延伸阅读89
5.8 练习90
第6章 固定功能的3D图形平台和层次建模简介92
6.1 引言92
6.1.1 WPF 3D部分的设计92
6.1.2 对光与物体交互的物理过程的近似93
6.1.3 WPF 3D概述93
6.2 网格和光照属性94
6.2.1 场景设计94
6.2.2 生成更真实的光照98
6.2.3 固定功能绘制中的“光照”与“着色”101
6.3 曲面表示和绘制102
6.3.1 基于插值的着色处理(Gouraud着色)102
6.3.2 将表面设置为多面体表面和平滑表面104
6.4 WPF中的表面纹理105
6.4.1 基于分片拼接的纹理映射106
6.4.2 基于拉伸的纹理映射107
6.5 WPF反射模型107
6.5.1 颜色设置107
6.5.2 光源几何108
6.5.3 反射率108
6.6 基于场景图进行层次建模112
6.6.1 模块化建模的动因112
6.6.2 自顶向下的部件层次结构设计113
6.6.3 自下而上的构建和组合114
6.6.4 构件的重用118
6.7 讨论120
第7章 2D和3D空间中的基础数学与几何121
7.1 引言121
7.2 记号121
7.3 集合121
7.4 函数122
7.4.1 反正切函数123
7.5 坐标124
7.6 坐标运算124
7.6.1 向量126
7.6.2 如何理解向量127
7.6.3 向量长度127
7.6.4 向量运算127
7.6.5 矩阵乘法130
7.6.6 其他类型的向量131
7.6.7 隐式直线132
7.6.8 平面直线的隐式描述133
7.6.9 能否采用y=mx+b134
7.7 直线求交134
7.7.1 参数化参数化直线求交134
7.7.2 参数化隐式直线求交135
7.8 更一般的求交计算135
7.8.1 光线平面求交136
7.8.2 光线球求交137
7.9 三角形138
7.9.1 重心坐标138
7.9.2 空间三角形139
7.9.3 半平面和三角形140
7.10 多边形141
7.10.1 内/外测试141
7.10.2 非简单多边形的内部143
7.10.3 平面多边形的符号面积:分而治之143
7.10.4 空间多边形的法向量144
7.10.5 更一般多边形的符号面积145
7.10.6 倾斜原理145
7.10.7 重心坐标的模拟146
7.11 讨论147
7.12
前 言
本书面向学生、研究人员和从业人员,介绍计算机图形学的许多重要概念和思想。其中一些概念读者并不陌生,它们早已出现在广为流行的学术出版物、技术报告、教科书和行业报刊中。在某个概念出现一段时间后再将其写入教科书的好处是,人们可以更充分地理解它的长远影响并将其置于一个更大的背景中予以领悟。本书将尽可能详细地介绍这些概念(当然也略过了一些曾经火热但现在已不再重要的概念),并以一种清晰、流畅的风格将它们呈现给初学者。
本书属于第二代图形学教科书:我们并不将之前的所有工作全部认定为天然合理的,而是按今天的理解重新审视它们,进而更新其原有的陈述方式。
甚至一些基本的问题也可能变得非常棘手。举例来说,假如要设计一个适用于低光照环境(如电影院的暗环境)的程序。显然,我们不能采用亮屏幕显示器,这意味着在显示程序中采用亮度对比来区分环境中的不同对象不再适宜。也许可以改用彩色显示,但遗憾的是,在低光照环境中人们对颜色的感知同样有所降低,某些颜色的文字要比其他颜色更易读。在这种情况下,光标是否仍容易被用户看到呢?一种简单的应对方式是利用人眼对运动的感知能力,让光标持续抖动。于是,一个看似简单的问题后涉及交互界面设计、颜色理论以及人类感知等领域。
尽管上述例子很简单,但仍隐含了某些假设:采用图形方式输出(而不是通过触觉或封闭良好的耳机来输出);显示设备既非常规的影院屏幕,也不是头盔显示器。其中也包含了一些显式的假设,例如采用光标(也有一些用户界面不使用光标)。上述每一种假设都是对用户界面的一种选择。
遗憾的是,这种多方面内容相互交织的关系使得我们不可能完全按照某种顺序来讲述各主题,而且还能很好地介绍它们的研究动因和背景,也就是说,这些主题无法以线性方式展开。也许,我们可以先介绍它们涉及的所有相关的数学、感知理论或其他内容,总之,将较为抽象的内容和主题放在前面介绍,然后再介绍图形学应用。尽管这种内容组织方式可能便于参考(读者很容易找到讲述一般化向量叉积的有关章节),但对一本教科书而言,其效果并不好,原因是那些涉及主题研究动因的应用都要等到书的后才会介绍。另一种展开方式是采取案例研究的思路,分别介绍各种不同的任务(难度不断增大),然后根据问题的需要讲述相关内容。在某些情况下,这确实是一种自然的内容演绎方式,但难以对各主题做出整体性、结构化的呈现。本书是这两种方式的折中:开始部分介绍了广泛使用的数学知识和常规的符号标记方式,然后逐个主题展开内容,根据需要补充介绍必要的数学工具。熟悉数学的读者完全可以跳过开始部分而不致错过任何图形学知识。其他人则可从这些章节中获益良多。教师授课时可根据需要对其进行取舍。基于主题的章节安排方式可能会导致内容上的重复。例如,本书从不同的细节层次对图形流水线进行了多次讨论。与其让读者回头参考之前的章节,有时我们会再次陈述部分内容,使对该问题的讨论更为流畅。毕竟让读者返回500页之前去查看一幅图并非令人惬意的事。
对本教材的作者来说,另一个挑战是选材的广度。本书的第1版确实覆盖了当时图形学出版物中的大部分内容,第2版至少也约略提到了其中大部分的研究工作。本版教材不再追求内容的覆盖度,理由很简单:当本书第2版出版时,我们一只手就能拿起SIGGRAPH会议的全部论文集(这些论文几乎包含了图形学领域的代表性工作);如今,SIGGRAPH会议的全部论文集(仅仅是许多图形学出版物中的一种)叠在一起高达数米。即使是电子版的教材也无法将全部内容塞进1000页中。本书这一版旨在为读者指明在哪里可以找到和复制当今的大部分SIGGRAPH论文。下面是几点说明:
●,计算机图形学与计算机视觉的交叉面越来越大,但这并不能构成让我们将本书写成计算机视觉教材的理由,尽管一些有该领域丰富知识的人已经这样做了。
●第二,计算机图形学涉及编程,尽管许多图形学应用题目很大,但本书并没有试图讲授编程和软件工程。当然,在书中我们也会简要讨论一些专门针对图形学的编程方法(尤其是排错)。
●第三,许多图形学应用都提供了用户界面。在编写本书时,大多数界面均基于Windows操作系统,采用菜单和鼠标进行交互。不过基于触觉的交互界面正变得越来越常见。交互界面的研究曾经是图形学的一部分,但如今已成为一个独立的领域(尽管它仍和图形学有很大的交叉)。我们假定读者在编写含用户界面的程序方面已具备了一些经验,因此本书将不再对它们做深入讨论(除了其实现过程与图形学密切关联的3D界面外)。
毋庸置疑,图形学领域的研究论文区别很大:有些涉及很多的数学表述;有些介绍的是一个大规模的系统,涉及各种复杂的工程因素的权衡;还有些涉及物理学、色彩理论、地形学、摄影学、化学、动物学等各个学科的知识。我们的目标是让读者领会这些论文中的图形学贡献,而其他的相关知识则需要读者在课外自行学习。
历史上的方法
在历史上,图形学大多为一些面向当时急需解决的问题的专门方法。这么说并非对那些曾经使用这些方法的人有所不敬,他们手头有任务,必须想办法完成。其中
本书属于第二代图形学教科书:我们并不将之前的所有工作全部认定为天然合理的,而是按今天的理解重新审视它们,进而更新其原有的陈述方式。
甚至一些基本的问题也可能变得非常棘手。举例来说,假如要设计一个适用于低光照环境(如电影院的暗环境)的程序。显然,我们不能采用亮屏幕显示器,这意味着在显示程序中采用亮度对比来区分环境中的不同对象不再适宜。也许可以改用彩色显示,但遗憾的是,在低光照环境中人们对颜色的感知同样有所降低,某些颜色的文字要比其他颜色更易读。在这种情况下,光标是否仍容易被用户看到呢?一种简单的应对方式是利用人眼对运动的感知能力,让光标持续抖动。于是,一个看似简单的问题后涉及交互界面设计、颜色理论以及人类感知等领域。
尽管上述例子很简单,但仍隐含了某些假设:采用图形方式输出(而不是通过触觉或封闭良好的耳机来输出);显示设备既非常规的影院屏幕,也不是头盔显示器。其中也包含了一些显式的假设,例如采用光标(也有一些用户界面不使用光标)。上述每一种假设都是对用户界面的一种选择。
遗憾的是,这种多方面内容相互交织的关系使得我们不可能完全按照某种顺序来讲述各主题,而且还能很好地介绍它们的研究动因和背景,也就是说,这些主题无法以线性方式展开。也许,我们可以先介绍它们涉及的所有相关的数学、感知理论或其他内容,总之,将较为抽象的内容和主题放在前面介绍,然后再介绍图形学应用。尽管这种内容组织方式可能便于参考(读者很容易找到讲述一般化向量叉积的有关章节),但对一本教科书而言,其效果并不好,原因是那些涉及主题研究动因的应用都要等到书的后才会介绍。另一种展开方式是采取案例研究的思路,分别介绍各种不同的任务(难度不断增大),然后根据问题的需要讲述相关内容。在某些情况下,这确实是一种自然的内容演绎方式,但难以对各主题做出整体性、结构化的呈现。本书是这两种方式的折中:开始部分介绍了广泛使用的数学知识和常规的符号标记方式,然后逐个主题展开内容,根据需要补充介绍必要的数学工具。熟悉数学的读者完全可以跳过开始部分而不致错过任何图形学知识。其他人则可从这些章节中获益良多。教师授课时可根据需要对其进行取舍。基于主题的章节安排方式可能会导致内容上的重复。例如,本书从不同的细节层次对图形流水线进行了多次讨论。与其让读者回头参考之前的章节,有时我们会再次陈述部分内容,使对该问题的讨论更为流畅。毕竟让读者返回500页之前去查看一幅图并非令人惬意的事。
对本教材的作者来说,另一个挑战是选材的广度。本书的第1版确实覆盖了当时图形学出版物中的大部分内容,第2版至少也约略提到了其中大部分的研究工作。本版教材不再追求内容的覆盖度,理由很简单:当本书第2版出版时,我们一只手就能拿起SIGGRAPH会议的全部论文集(这些论文几乎包含了图形学领域的代表性工作);如今,SIGGRAPH会议的全部论文集(仅仅是许多图形学出版物中的一种)叠在一起高达数米。即使是电子版的教材也无法将全部内容塞进1000页中。本书这一版旨在为读者指明在哪里可以找到和复制当今的大部分SIGGRAPH论文。下面是几点说明:
●,计算机图形学与计算机视觉的交叉面越来越大,但这并不能构成让我们将本书写成计算机视觉教材的理由,尽管一些有该领域丰富知识的人已经这样做了。
●第二,计算机图形学涉及编程,尽管许多图形学应用题目很大,但本书并没有试图讲授编程和软件工程。当然,在书中我们也会简要讨论一些专门针对图形学的编程方法(尤其是排错)。
●第三,许多图形学应用都提供了用户界面。在编写本书时,大多数界面均基于Windows操作系统,采用菜单和鼠标进行交互。不过基于触觉的交互界面正变得越来越常见。交互界面的研究曾经是图形学的一部分,但如今已成为一个独立的领域(尽管它仍和图形学有很大的交叉)。我们假定读者在编写含用户界面的程序方面已具备了一些经验,因此本书将不再对它们做深入讨论(除了其实现过程与图形学密切关联的3D界面外)。
毋庸置疑,图形学领域的研究论文区别很大:有些涉及很多的数学表述;有些介绍的是一个大规模的系统,涉及各种复杂的工程因素的权衡;还有些涉及物理学、色彩理论、地形学、摄影学、化学、动物学等各个学科的知识。我们的目标是让读者领会这些论文中的图形学贡献,而其他的相关知识则需要读者在课外自行学习。
历史上的方法
在历史上,图形学大多为一些面向当时急需解决的问题的专门方法。这么说并非对那些曾经使用这些方法的人有所不敬,他们手头有任务,必须想办法完成。其中
评论
还没有评论。