---------------------------8054338 - 计算机图形学原理及实践(原书第3版)(基础篇)---------------------------
本书面向学生、研究人员和从业人员,介绍计算机图形学的许多重要概念和思想。其中一些概念读者并不陌生,它们早已出现在广为流行的学术出版物、技术报告、教科书和行业报刊中。在某个概念出现一段时间后再将其写入教科书的好处是,人们可以更充分地理解它的长远影响并将其置于一个更大的背景中予以领悟。本书将尽可能详细地介绍这些概念(当然也略过了一些曾经火热但现在已不再重要的概念),并以一种清晰、流畅的风格将它们呈现给初学者。
本书属于第二代图形学教科书:我们并不将之前的所有工作全部认定为天然合理的,而是按今天的理解重新审视它们,进而更新其原有的陈述方式。
甚至一些最基本的问题也可能变得非常棘手。举例来说,假如要设计一个适用于低光照环境(如电影院的暗环境)的程序。显然,我们不能采用亮屏幕显示器,这意味着在显示程序中采用亮度对比来区分环境中的不同对象不再适宜。也许可以改用彩色显示,但遗憾的是,在低光照环境中人们对颜色的感知同样有所降低,某些颜色的文字要比其他颜色更易读。在这种情况下,光标是否仍容易被用户看到呢?一种简单的应对方式是利用人眼对运动的感知能力,让光标持续抖动。于是,一个看似简单的问题最后涉及交互界面设计、颜色理论以及人类感知等领域。
尽管上述例子很简单,但仍隐含了某些假设:采用图形方式输出(而不是通过触觉或封闭良好的耳机来输出);显示设备既非常规的影院屏幕,也不是头盔显示器。其中也包含了一些显式的假设,例如采用光标(也有一些用户界面不使用光标)。上述每一种假设都是对用户界面的一种选择。
遗憾的是,这种多方面内容相互交织的关系使得我们不可能完全按照某种顺序来讲述各主题,而且还能很好地介绍它们的研究动因和背景,也就是说,这些主题无法以线性方式展开。也许,我们可以先介绍它们涉及的所有相关的数学、感知理论或其他内容,总之,将较为抽象的内容和主题放在前面介绍,然后再介绍图形学应用。尽管这种内容组织方式可能便于参考(读者很容易找到讲述一般化向量叉积的有关章节),但对一本教科书而言,其效果并不好,原因是那些涉及主题研究动因的应用都要等到书的最后才会介绍。另一种展开方式是采取案例研究的思路,分别介绍各种不同的任务(难度不断增大),然后根据问题的需要讲述相关内容。在某些情况下,这确实是一种自然的内容演绎方式,但难以对各主题做出整体性、结构化的呈现。本书是这两种方式的折中:开始部分介绍了广泛使用的数学知识和常规的符号标记方式,然后逐个主题展开内容,根据需要补充介绍必要的数学工具。熟悉数学的读者完全可以跳过开始部分而不致错过任何图形学知识。其他人则可从这些章节中获益良多。教师授课时可根据需要对其进行取舍。基于主题的章节安排方式可能会导致内容上的重复。例如,本书从不同的细节层次对图形流水线进行了多次讨论。与其让读者回头参考之前的章节,有时我们会再次陈述部分内容,使对该问题的讨论更为流畅。毕竟让读者返回500页之前去查看一幅图并非令人惬意的事。
对本教材的作者来说,另一个挑战是选材的广度。本书的第1版确实覆盖了当时图形学出版物中的大部分内容,第2版至少也约略提到了其中大部分的研究工作。本版教材不再追求内容的覆盖度,理由很简单:当本书第2版出版时,我们一只手就能拿起SIGGRAPH会议的全部论文集(这些论文几乎包含了图形学领域的代表性工作);如今,SIGGRAPH会议的全部论文集(仅仅是许多图形学出版物中的一种)叠在一起高达数米。即使是电子版的教材也无法将全部内容塞进1000页中。本书这一版旨在为读者指明在哪里可以找到和复制当今的大部分SIGGRAPH论文。下面是几点说明:
●第一,计算机图形学与计算机视觉的交叉面越来越大,但这并不能构成让我们将本书写成计算机视觉教材的理由,尽管一些有该领域丰富知识的人已经这样做了。
●第二,计算机图形学涉及编程,尽管许多图形学应用题目很大,但本书并没有试图讲授编程和软件工程。当然,在书中我们也会简要讨论一些专门针对图形学的编程方法(尤其是排错)。
●第三,许多图形学应用都提供了用户界面。在编写本书时,大多数界面均基于Windows操作系统,采用菜单和鼠标进行交互。不过基于触觉的交互界面正变得越来越常见。交互界面的研究曾经是图形学的一部分,但如今已成为一个独立的领域(尽管它仍和图形学有很大的交叉)。我们假定读者在编写含用户界面的程序方面已具备了一些经验,因此本书将不再对它们做深入讨论(除了其实现过程与图形学密切关联的3D界面外)。
毋庸置疑,图形学领域的研究论文区别很大:有些涉及很多的数学表述;有些介绍的是一个大规模的系统,涉及各种复杂的工程因素的权衡;还有些涉及物理学、色彩理论、地形学、摄影学、化学、动物学等各个学科的知识。我们的目标是让读者领会这些论文中的图形学贡献,而其他的相关知识则需要读者在课外自行学习。
历史上的方法
在历史上,图形学大多为一些面向当时急需解决的问题的专门方法。这么说并非对那些曾经使用这些方法的人有所不敬,他们手头有任务,必须想办法完成。其中
. ---------------------------8078191 - 计算机图形学原理及实践(原书第3版)(进阶篇)---------------------------
本书面向学生、研究人员和从业人员,介绍计算机图形学的许多重要概念和思想。其中一些概念读者并不陌生,它们早已出现在广为流行的学术出版物、技术报告、教科书和行业期刊中。在某个概念出现一段时间后再将其写入教科书的好处是,人们可以更充分地理解它的长远影响并将其置于一个更大的背景中予以领悟。本书将尽可能详细地介绍这些概念(当然也略过了一些曾经热门但现在已不再重要的概念),并以一种清晰、流畅的风格将它们呈现给初学者。
本书属于第二代图形学教科书:我们并不将之前的所有工作全部认定为天然合理的,而是按今天的理解重新审视它们,进而更新其原有的陈述方式。
甚至一些最基本的问题也可能变得非常棘手。举例来说,假如要设计一个适用于低光照环境(如电影院的暗环境)的程序。显然,我们不能采用亮屏幕显示器,这意味着在显示程序中采用亮度对比来区分环境中的不同对象不再适宜。也许可以改用彩色显示,但遗憾的是,在低光照环境中人们对颜色的感知同样有所降低,某些颜色的文字要比其他颜色更易读。在这种情况下,光标是否仍容易被用户看到呢?一种简单的应对方式是利用人眼对运动的感知能力,让光标持续抖动。于是,一个看似简单的问题最后涉及交互界面设计、颜色理论以及人类感知等领域。
尽管上述例子很简单,但仍隐含了某些假设:采用图形方式输出(而不是通过触觉或封闭良好的耳机来输出);显示设备既非常规的影院屏幕,也不是头盔显示器。其中也包含了一些显式的假设,例如采用光标(也有一些用户界面不使用光标)。上述每一种假设都是对用户界面的一种选择。
遗憾的是,这种多方面内容相互交织的关系使得我们不可能完全按照某种顺序来讲述各主题,而且还能很好地介绍它们的研究动因和背景,也就是说,这些主题无法以线性方式展开。也许,我们可以先介绍它们涉及的所有相关的数学、感知理论或其他内容,总之,将较为抽象的内容和主题放在前面介绍,然后再介绍图形学应用。尽管这种内容组织方式可能便于参考(读者很容易找到讲述一般化向量叉积的有关章节),但对一本教科书而言,其效果并不好,原因是那些涉及主题研究动因的应用都要等到书的最后才会介绍。另一种展开方式是采取案例研究的思路,分别介绍各种不同的任务(难度不断增大),然后根据问题的需要讲述相关内容。在某些情况下,这确实是一种自然的内容演绎方式,但难以对各主题做出整体性、结构化的呈现。本书是这两种方式的折中:开始部分介绍了广泛使用的数学知识和常规的符号标记方式,然后逐个主题展开内容,根据需要补充介绍必要的数学工具。熟悉数学的读者完全可以跳过开始部分而不致错过任何图形学知识,其他人则可从这些章节中获益良多,教师授课时可根据需要对其进行取舍。基于主题的章节安排方式可能会导致内容上的重复,例如,本书从不同的细节层次对图形流水线进行了多次讨论。与其让读者回头参考之前的章节,有时我们会再次陈述部分内容,使对该问题的讨论更为流畅。毕竟让读者返回500页之前去查看一幅图并非令人惬意的事。
对本教材的作者来说,另一个挑战是选材的广度。本书的第1版确实覆盖了当时图形学出版物中的大部分内容,第2版至少也约略提到了其中大部分的研究工作。本版教材不再追求内容的覆盖度,理由很简单:当本书第2版出版时,我们一只手就能拿起SIGGRAPH会议的全部论文集(这些论文几乎包含了图形学领域的代表性研究);如今,SIGGRAPH会议的全部论文集(仅仅是许多图形学出版物中的一种)叠在一起高达数米。即使是电子版的教材也无法将全部内容塞进1000页中。本书这一版旨在为读者指明在哪里可以找到当今的大部分SIGGRAPH论文。下面是几点说明:
●第一,计算机图形学与计算机视觉的交叉面越来越大,但这并不能构成让我们将本书写成计算机视觉教材的理由,尽管一些有该领域丰富知识的人已经这样做了。
●第二,计算机图形学涉及编程,尽管有许多大型图形学应用项目,但本书并没有试图讲授编程和软件工程。当然,在书中我们也会简要讨论一些专门针对图形学的编程方法(尤其是排错)。
●第三,许多图形学应用都提供了用户界面。在编写本书时,大多数界面均基于Windows操作系统,采用菜单和鼠标进行交互。不过基于触觉的交互界面正变得越来越常见。交互界面的研究曾经是图形学的一部分,但如今已成为一个独立的领域(尽管它仍和图形学有很大的交叉)。我们假定读者在编写含用户界面的程序方面已具备了一些经验,因此本书将不再对它们做深入讨论(除了其实现过程与图形学密切关联的3D界面外)。
毋庸置疑,图形学领域的研究论文区别很大:有些涉及很多的数学表述;有些介绍的是一个大规模的系统,涉及各种复杂的工程因素的权衡;还有些涉及物理学、颜色理论、地形学、摄影学、化学、动物学等各个学科的知识。我们的目标是让读者领会图形学在这些论文中所起的作用,而其他的相关知识则需要读者在课外自行学习。
历史上的方法
在历史上,图形学大多为一些面向当时急需解决的问题的专门方法。这么说并非对那些曾经使用这些方法的人有所不敬,他们手头有任务,必须想办法完成。其中一些解决方法中包含了重要的思想,而另一些解决方法不过是为了完成任务。但这些方法无疑对后面图形学的发展产生了影响。举例来说,大多数图形系统中采用的图像合成模型均假定图像中存储的颜色可以线性方式融合。但实践中,图像中存储的颜色值与其显示的光亮度之间却呈非线性关系,因此颜色的线性组合并不对应光亮度的线性组合。两者之间的差别一直到摄影工作室试图将现实场景的照片与计算机生成的图像合成时才为人们所注意,即上述图像合成方式并不能生成正确的结果。此外,尽管一些早期方法描述十分原则化,但其关联的程序却对实现的硬件做了一些假设,几年后,这些假设不再适用,当读者看到这些实现细节时会说:“这不是过时的东西吗,与我们毫不相关啊!”于是,就忽略了这些研究工作中某些仍旧重要的思想。更多的时候,研究人员只是在重新利用其他学科运用多年的那些概念和方法。
因此,我们不打算按照图形学发展的年代顺序来讲述。正如物理学教程并不从亚里士多德的动力学讲起,而是直接介绍牛顿动力学(更好的是一开始就讲述牛顿动力学系统的局限性,将平台搭建在量子力学的基础上),我们将直接从对相关问题的最新理解入手,当然也会介绍与之相关的各种传统研究思路。同时,我们还会指出这些思路的源头(可能不为大家所熟悉),例如,关于3D多边形法向量的Newell公式即19世纪初期的Grassmann公式。我们希望,指出这些参考源头能增加读者对许多早已开发并有望应用于图形学的方法的了解。
教学方法
日常生活中图形学最令人瞩目的应用是视频游戏中的3D形象以及娱乐行业和广告中的特效。然而,我们每天在家庭电脑和手机中的交互也都离不开计算机图形学。这些界面之所以不那么显眼也许是由于它们太成功了:其实,最好的界面会让你完全忘记它的存在。虽然“2D图形学要比3D图形学简单”这句话听上去很诱人,但是3D图形学不过是一个稍复杂的版本而已。2D图形学中的许多问题,诸如在方形发光单元(像素)组成的屏幕上如何完美地显示一幅图像,或者如何构建高效且功能强大的界面等,都和在绘制3D场景图像时遇到的问题一样困难。而2D图形学中通常采用的简单模型在怎样完美地表示颜色和形状等方面也可能对学生造成误导。因此,我们将2D和3D图形学的讲述交织在一起,分析和讨论两者共同的敏感问题。
VII本书设置“黑盒”的层次与众不同。几乎每一本计算机科学的书都需要选择一个合适的层次来讲述计算机的有关内容,该层次应便于读者理解和掌握。在图形学教科书中,我们同样需要选择一个读者将会遇到的图形学系统。也许,在输入某些指令后,计算机的硬件和软件就能在屏幕上生成一个彩色三角形。但这一切是怎样发生的?其中的细节与图形学的大部分内容并无关联。举例来说,假如你让图形系统绘制一个位于屏幕可显示区域下方的红色三角形,将会发生什么?是先确定那些应置为红色的像素的位置然后因其不在屏幕显示区域内而将其抛弃?还是图形系统尚未开始计算任何像素值之前因发现该三角形位于屏幕之外而终止后面的过程?从某种意义上说,除非你正在设计一块图形卡,否则上述问题并不那么重要,它并非一个图形系统用户所能控制的。因此,我们假定图形系统能够显示像素的值,或画出三角形和直线,而不考虑该过程是怎样实现的。具体实现的细节将在光栅化和图形硬件的相关章节中介绍,但因其大都超出了我们的控制范围,所以诸如裁剪、直线反走样、光栅化算法等内容均将推迟到其后面章节予以介绍。
本书教学方法的另一点是试图展示相关的思想和技术是怎样浮现出来的。这样做无疑会增长篇幅,但我们希望会有所帮助。当学生需要独立推导自己的算法时,他们遇到过的研究案例可能会为当前问题提供解决思路。
我们相信,学习图形学最好的途径是先学习其背后的数学。与直接跨入图形学应用相比,先学习较为抽象的数学确实会延长你开始学习最初的几个图形算法所需的时间,但这个代价是一次性的。等你学习到第10个算法时,先前的投入将会完全得到补偿,因为你会发现新的方法组合了之前已经学过的许多内容。
当然,阅读本书表明你有兴趣编写绘图程序。因此,本书一开始就引入多个题目并直接给出解决方案,然后再回过头仔细讨论更广泛的数学背景。书中大部分篇幅都集中于其后面的处理上。在打下必要的数学基础后,我们将结束上述题目,延伸到其他的相关问题并给出求解思路。由于本书聚焦于基础性的原则,因此并未提供这些方法的实现细节。一旦读者领会了基础原则,每一个求解思路的具体算法就会了然于胸,并将具有足够的知识来阅读和理解其原始参考文献中给出的论述,而不是基于我们的转述。我们能做的是采用更为现代化的形式来介绍那些早期的算法,当读者回头阅读原始文献时,能比较容易理解文献中词汇的含义及其表达方式。
编程实践
图形学是一门需要自己动手实践的学科。由于图形产业为观众提供的是视觉类信息以及相关的交互手段,图形工具也经常用来为新开发的图形算法排错。但这样做需具备编写图形程序的能力。如今已有许多不同的方法可在计算机上生成图像,对本书中介绍的大部分算法而言,每一种方法都有其优点。尽管将一种编程语言和库转化为另一种编程语言和库已成为常规,但从教学的角度,最好是采用单一编程语言以便学生可以聚焦于算法的更深层面。对本书提供的所有练习,我们建议使用WPF(Windows Presentation Foundation,一种广泛使用的图形系统)完成。为此,我们编写了一段基本且易于修改的程序(称为testbed)以便学生使用。对于一些不适于采用WPF的情形,我们通常采用G3D(一个公共的图形库,由本书的一位作者维护)。大多数情况下,我们使用伪代码,因为它提供了一种简洁的算法表述方式,而且,绝大多数算法的实际代码(按你所选语言编制)均可从网上下载,因此将其编入书中并无意义。注意代码形成过程中的变化,在有些情形中,它的最初版本只是一个非正式的框架,然后逐步发展成采用某种语言编写的接近于完成的程序,因此对其之前的版本进行语法检查并无意义,可以免去。有时,我们希望代码能反映数学推导过程,故采用诸如xR之类的变量名,这使其看上去如同数学表达式。总的来说,伪代码并非正式编程语言,我们用它来表达宏观的思路而非算法的细节。
本书并非一本讨论如何编写图形程序的书,书中不会讨论应用图形程序中的细节。例如,读者无法从本书中找到有关Adobe最新图像编辑软件如何存储图像的任何提示。但只要读者领会了书中的概念并具备足够的编程能力,就一定能编写图形程序,并知道如何应用这些程序。
原则
在本书中,我们列出了一些计算机图形学的原则,希望对读者未来的工作有所帮助。也收录了一些有关图形学实践的章节,如怎样运用现有的硬件来逼近理想解,或者更快速地计算出实际解。虽然这些实现方法是面向现有硬件的,但对未来也有价值。也许十年后不能直接照搬这些实现方法,但其中蕴含的算法在多年内仍有意义。
预备知识
本书大部分内容所需的预备知识并未超出一般理工类在校生的知识范围,如:编写面向对象程序的能力;掌握微积分工具;对向量有所了解(可能是从数学、物理学甚至是计算机科学的课程中学到的);至少遇到过线性变换等。我们也希望学生编写过一两个含有2D图形对象(如按钮、复选框、图标等)的程序。
本书一部分内容会涉及更多的数学知识,但在有限的篇幅内讲授这些知识是不现实的。一般而言,这些稍显复杂的数学知识将被精心安排于少数章节内,而这些章节更适合作为研究生的课程。它们和某些涉及深度数学知识的练习均注有“数学延伸”()标记。同样,涉及计算机科学中较深概念的内容注有“计算机科学延伸”()标记。
书中某些数学表述可能令那些曾在其他地方接触过向量的人感到困惑。本书的第一作者是一位数学博士,当第一次看到图形学研究论文中涉及数学问题的表述时,他也同样感到奇怪。本书试图清晰和彻底地解释它们与标准的数学表述之间的不同之处。
讲授本书的方式
本书可作为一个学期或一个学年的本科生课程的教科书,或者作为研究生课程的参考书。作为本科生的教学用书时,其中较深的数学内容(如仿重心坐标标架、流形网格、球面调和函数等)可以略去,而集中于几何模型的建模与显示,各种变换的数学原理,相机的数学描述,以及标准的光照、颜色、反射率模型及其局限性等基础问题。也应介绍一些基本的图形学应用和用户界面,讨论在设计中如何对各种因素进行权衡和折中以使其更有效率,也许最后再介绍几个特殊的主题,如怎样创建一段简单的动画、编写一个基础的光线跟踪程序等。上述内容对一学期的课程而言可能太多,即使是一学年的课程,也不可能覆盖书中的每一节,未讲授的内容可供有兴趣的学生课后学习。
IX安排较满的一学期课程(14周)可讲授下述内容:
1.绪论和一个简单的2D程序:第1、2、3章。
2.对绘制中几何问题的介绍,进一步的2D和3D程序:第3、4章。视觉感知和人类的视觉系统:第5章。
3.2D和3D几何建模——网格、样条、隐函数模型:7.1~7.9节,第8、9章,22.1~22.4节,23.1~23.3节,24.1~24.5节。
4.图像,第一部分:第17章、18.1~18.11节。
5.图像,第二部分:18.12~18.20节、第19章。
6.2D和3D变换:10.1~10.12节、11.1~11.3节、第12章。
7.取景、相机以及posthomogeneous插值:13.1~13.7节、15.6.4节。
8.图形学中的标准近似:第14章、某些相关的章节。
9.光栅化与光线投射:第15章。
10.光照与反射:26.1~26.7节(26.5节或可不选)、26.10节。
11.颜色:28.1~28.12节。
12.基本反射模型,光能传输:27.1~27.5节、29.1~29.2节、29.6节、29.8节。
13.递归光线跟踪细节,纹理:24.9节、31.16节、20.1~20.6节。
14.可见面判定和面向加速的数据结构,更前沿的图形绘制技术:第31、36、37章中的相关节。
不过,并非上面提到的每一节中的所有内容都适合于初学者。
另外,也可参考作为本科生基于物理的绘制课(12周课程)的教学大纲。该课程按离线绘制到实时绘制的原则安排授课内容。可深入其中的核心数学和光线跟踪背后的辐射度学,然后回过头来再介绍计算机科学中提升算法可扩展性和性能的有关方法。
1.绪论:第1章。
2.光照:第26章。
3.感知,光能传输:第5、29章。
4.网格和场景图简介:6.6节、14.1~14.5节。
5.变换:第10、13章(简要介绍)。
6.光线投射:15.1~15.4节、7.6~7.9节。
7.面向加速的数据结构:第37章、36.1~36.3节、36.5~36.6节、36.9节。
8.绘制理论:第30、31章。
9.绘制实践:第32章。
10.颜色和材质:14.6~14.11节,第27、28章。
11.光栅化:15.5~15.9节。
12.着色器和硬件:16.3~16.5节,第33、38章。
注意上述授课内容并非按各章顺序排列。在编著本书时,我们试图让大多数章的内容独立成篇,彼此交叉引用而不互为必需的预备知识,以支持这种授课思路。
与之前版本的差异
尽管本版教材包含了之前版本中的大部分主题,但其内容几乎是全新的。随着GPU的出现,三角形的光栅化(转换为像素或采样)已采用完全不同的方法而非传统的扫描转换算法,对传统的算法本书将不再介绍。在讲述光照模型时,将更偏重测量所用的物理单位,这无疑增加了讨论的复杂性,而传统模型并未涉及各物理量的单位。此外,之前版本分别准备了2D和3D两个图形学平台,而本书采用现在广泛使用的系统,并提供了有助于学生起步的工具。
网址
在本书中常可看到本书的网址http://cgpp.net,其中不仅包含测试程序和实现的实例,而且包含许多章节的附加参考材料以及第2、6章中的WPF交互实验。
致谢
本书虽系作者编著,但因包含了众多人的贡献而大为增色。
本书受到Microsoft公司的支持和鼓励,感谢Eric Rudder和S.Somasegar在本项目启动和结束时给予的帮助。
3D测试程序最初源于Dan Leventhal 编写的代码,kindohm.com的Mike Hodnick慷慨地提供他的代码作为早期版本开发的起点,感谢Jordan Parker和Anthony Hodsdon在WPF系统方面的帮助。
Williams学院的两名学生为本书出版付出了很大努力。其中Guedis Cardenas协助整理了全书的参考文献,Michael Mara则协助开发了在本书多章中均有应用的G3D Innovation Engine。电子艺术系的Corey Taylor对开发G3D软件提供了帮助。
CMU的Nancy Pollard、Pittsburgh大学的Liz Marai在他们的图形学课程中曾讲授过本书部分章节的早期版本,并向我们提供了有价值的反馈意见。
Jims Arvo不仅是本书中有关绘制的一切问题的总指导,而且还重塑了本书第一作者对图形学的理解。
除了以上提到的,还有许多人阅读过各章的初稿、提供了图像或插图、对主题或其讲述方式提出建议或通过其他方式提供帮助,他们是(按字母顺序):John Anderson, Jim Arvo, Tom Banchoff, Pascal Barla, Connelly Barnes, Brian Barsky, Ronen Barzel, Melissa Byun, MariePaule Cani, Lauren Clarke, Elaine Cohen, Doug DeCarlo, Patrick Doran, Kayvon Fatahalian, Adam Finkelstein, Travis Fischer, Roger Fong, Mike Fredrickson, Yudi Fu, Andrew Glassner, Bernie Gordon, Don Greenberg, Pat Hanrahan, Ben Herila, Alex Hills, Ken Joy, Olga Karpenko, Donnie Kendall, Justin Kim, Philip Klein, Joe LaViola, Kefei Lei, Nong Li, Lisa Manekofsky, Bill Mark, John Montrym, Henry Moreton, Tomer Moscovich, Jacopo Pantaleoni, Jill Pipher, Charles Poynton, Rich Riesenfeld, Alyn Rockwood, Peter Schroeder, Franois Sillion, David Simons, Alvy Ray Smith, Stephen Spencer, Erik Sudderth, Joelle Thollot, Ken Torrance, Jim Valles, Daniel Wigdor, Dan Wilk, Brian Wyvill, Silvia Zuffi。尽管我们力图列出所有帮助过我们的人的名单,但仍可能有所遗漏,在此谨致歉意。
作为本领域团结与合作的例证,我们也收到了其他同类书作者的书信,他们对本书写作表示了极大的支持。Eric Haines、Greg Humphreys、Steve Marschner、Matt Pharr和Pete Shirley对本书的出版提供了很好的意见。能在这样一个学术领域中工作我们深感荣幸。
没有彼此之间的支持、宽容、对任务的执着以及责任编辑Peter Gordon独到的视角,本书的出版是不可想象的!尤为感谢我们的家人在整个项目期间对本项工作的理解和巨大支持!
致学生
也许你的老师已经选择了一种讲授本书的方式,选择时已考虑各主题之间的相互衔接,或者可能采用了上面所建议的一种教学思路。不过你不必受此束缚。倘若你有意了解某些内容,可根据目录直接阅读。如感到缺乏某方面的背景知识,难以领悟所阅读的内容,可阅读必要的背景材料。因为有动机,你会感到此时比其他时候学起来更容易。停下来时,可从网上搜索他人的实现代码,下载并运行。假如感到结果有问题,可检查执行程序,尝试进行反向推断。有时候这的确是一种学习某些内容的有效方式,即采用实践理论再实践的学习模式:先尝试做某件事,看能否成功,倘若不成,则研读别人怎样做此事,然后再试。初次尝试可能会遭遇一些挫折,但一旦成功,你会获得对其理论的更深的理解。如果难以采取实践理论再实践的学习模式,至少应该花点时间完成你所阅读章节中的课内练习。
图形学是一门年轻的学科,经常可看到本科生作为合作作者在SIGGRAPH上发表论文。只需一年,你就可以掌握足够的知识并开始形成新的思想。
图形学也涉及许多数学知识。假如对你来说数学总是显得那么抽象和理论化,图形学将改变你的这一印象。数学在图形学中的应用可谓立竿见影,你很容易在所绘图中见到应用某一理论的实际效果。倘若你运用数学已得心应手,则可尝试采用本书提出的学术思路并做进一步推广,从而享受其中的乐趣。尽管本书包含了大量的数学内容,然而,对于当代研究论文中用到的数学而言,它不过刚刚触及其表皮而已。
最后,质疑一切。尽管作者已尽最大努力按当今的理解讲述所有内容,但只能说绝大部分内容叙述准确。在少数地方,当引入一个概念时,我们有意只讲述了部分内涵,而在稍后章节讨论细节时才全面展开。但在除此之外的其他地方,我们并未都这样做。有时候甚至会出错,遗漏一个“负号”或在循环中犯“循环次数少一次”的错误。在某些情形中,图形学领域对某概念的理解可能存在偏差,而我们采信了某一些人的观点,这只能留待未来纠正。上述问题读者都可能遇到。正如Martin Gardner所言,在科学探索中真正的声音不是“啊哈!”而是“哟,有点奇怪啊……”。假如你在阅读中发现某处显得有点怪,请大胆质疑,再仔细看几遍。如果证实是对的,将可澄清你理解中的混乱之处。如果真有问题,则将成为你推动学科进展的机会。
致教师
如果你是教师,你也许已浏览了上面“致学生”的内容(尽管它不是面向教师的,但你的学生也读了此节)。在那部分中,我们建议学生可以按任意顺序阅读本书各章,并可质疑一切。
我们向你建议两件事。第一,你应鼓励甚至要求你的学生完成本书中的课内练习。对那些声称“我有许多事要做,不能浪费时间停下来做练习”的人,你只需说:“是呀,我们没时间将车停下来加油……因为我们已经迟了!”第二,你在给学生布置课题或作业时,应既有一个确定的任务,也有一个开放的目标。那些成绩稳定的学生将会完成确定的任务,并学习你指定的内容。而另一些学生,当有机会做点有趣的事时,可能会做朝向开放目标的练习而让你惊讶。在做此类练习时,他们将会感到需要学习一些恰巧不懂的知识,而当他们掌握了这些知识后,问题就会迎刃而解。图形学就是这样一种特别的学问:成功马上看得见而且立刻有回报,从而形成一个推动向前的正反馈。可见性反馈加上算法的可扩展性(计算机科学中经常遇到)能给人以启示。
讨论和延伸阅读
本书中许多章都包含了“讨论和延伸阅读”一节,其中会给出若干背景参考文献或对该章思想的深层次应用。对前言来说,唯一适合延伸阅读的内容并非特定文献而是一般化的读物:我们建议读者着手查阅ACM SIGGRAPH和Eurographics、Computer Graphics International或其他图形学会议的论文集。根据你的兴趣,还可关注一些更为专门的会议,如Eurographics Symposium on Rendering、I3D、Symposium on Animation等。乍一看,这些会议的论文似乎涉及大量的知识,但你很快就会觉察哪些事是有可能做到的(假若只看图形效果),以及需要哪些技能才能达到目的。你会很快发现某些问题在你非常感兴趣的领域中多次出现,在后面学习图形学时这将指引你做延伸阅读。