本书是一本内容丰富、取材新颖的计算机图形学著作,并在其前一版的基础上进行了全面扩充,增加了许多新的内容,覆盖了近年来计算机图形学的最新发展与成就。全书层次分明、重点突出,并附有使用OpenGL编写的大量程序以及各种效果图,是一本难得的优秀教材。\r\n 本书共分为15章,全面系统地讲解了计算机图形学的基本概念和相关技术。作者首先对计算机图形学进行综述;然后讲解二维图形的对象表示、算法和应用,以及三维图形的相关技术、建模和变换;接着介绍光照模型、颜色模型和动画技术。本书还新增了有关层次建模和图形文件格式的介绍,最后的附录给出了计算机图形学中用到的基本数学概念。 \r\n 本书可作为信息技术等相关专业本科生和研究生和研究生的教材的教材或参考书,也可以作为计算机图形学工作者的参考书。
第1章 计算机图形学综述\r\n 1.1 图和表\r\n 1.2 计算机辅助设计\r\n 1.3 虚拟现实环境\r\n 1.4 数据可视化\r\n 1.5 教学与培训\r\n 1.6 计算机艺术\r\n 1.7 娱乐\r\n 1.8 图像处理\r\n 1.9 图形用户界面\r\n 1.10 小结\r\n 参考文献\r\n第2章 图形系统概述\r\n 2.1 视频显示设备\r\n 2.2 光栅扫描系统\r\n 2.3 图形工作站和观察系统\r\n 2.4 输入设备\r\n 2.5 硬拷贝设备\r\n 2.6 图形网络\r\n 2.7 因特网上的图形\r\n 2.8 图形软件\r\n 2.9 OpenGL简介\r\n 2.10 小结\r\n 参考文献\r\n 练习题\r\n第3章 输出图元\r\n 3.1 坐标系统\r\n 3.2 OpenGL中指定二维世界坐标系统\r\n 3.3 OpenGL画点函数\r\n 3.4 OpenGL画线函数\r\n 3.5 画线算法\r\n 3.6 并行画线算法\r\n 3.7 帧缓存值的装载\r\n 3.8 OpenGL曲线函数\r\n 3.9 圆生成算法\r\n 3.10 椭圆生成算法\r\n 3.11 其他曲线\r\n 3.12 并行曲线算法\r\n 3.13 像素编址和对象的几何要素\r\n 3.14 填充区图元\r\n 3.15 多边形填充区\r\n 3.16 OpenGL多边形填充区函数\r\n 3.17 OpenGL顶点数组\r\n 3.18 像素阵列图元\r\n 3.19 OpenGL像素阵列函数\r\n 3.20 字符图元\r\n 3.21 OpenGL字符函数\r\n 3.22 图形分割\r\n 3.23 OpenGL显示列表\r\n 3.24 OpenGL显示窗口重定形函数\r\n 3.25 小结\r\n 示例程序\r\n 参考文献\r\n 练习题\r\n第4章 图元的属性\r\n 4.1 OpenGL状态变量\r\n 4.2 颜色和灰度\r\n 4.3 OpenGL颜色函数\r\n 4.4 点的属性\r\n 4.5 线的属性\r\n 4.6 曲线属性\r\n 4.7 OpenGL点属性函数\r\n 4.8 OpenGL线属性函数\r\n 4.9 填充区属性\r\n 4.10 通用扫描线填充算法\r\n 4.11 凸多边形的扫描线填充\r\n 4.12 曲线边界区域的扫描线填充\r\n 4.13 不规则边界区域的填充方法\r\n 4.14 OpenGL填充区属性函数\r\n 4.15 字符属性\r\n 4.16 OpenGL字符属性函数\r\n 4.17 反走样\r\n 4.18 OpenGL反走样函数\r\n 4.19 OpenGL查询函数\r\n 4.20 OpenGL属性组\r\n 4.21 小结\r\n 参考文献\r\n 练习题\r\n第5章 几何变换\r\n 5.1 基本的二维几何变换\r\n 5.2 矩阵表示和齐次坐标\r\n 5.3 逆变换\r\n 5.4 二维复合变换\r\n 5.5 其他二维变换\r\n 5.6 几何变换的光栅方法\r\n 5.7 OpenGL光栅变换\r\n 5.8 二维坐标系间的变换\r\n 5.9 三维空间的几何变换\r\n 5.10 三维平移\r\n 5.11 三维旋转\r\n 5.12 三维缩放\r\n 5.13 三维复合变换\r\n 5.14 其他三维变换\r\n 5.15 三维坐标系间的变换\r\n 5.16 仿射变换\r\n 5.17 OpenGL几何变换函数\r\n 5.18 小结\r\n 参考文献\r\n 练习题\r\n第6章 二维观察\r\n 6.1 二维观察流水线\r\n 6.2 裁剪窗口\r\n 6.3 规范化和视口变换\r\n 6.4 OpenGL二维观察函数\r\n 6.5 裁剪算法\r\n 6.6 二维点裁剪\r\n 6.7 二维线裁剪\r\n 6.8 多边形填充区裁剪\r\n 6.9 曲线的裁剪\r\n 6.10 文字的裁剪\r\n 6.11 小结\r\n 参考文献\r\n 练习题\r\n第7章 三维观察\r\n 7.1 三维观察概念综述\r\n 7.2 三维观察流水线\r\n 7.3 三维观察坐标系参数\r\n 7.4 世界坐标系到观察坐标系的变换\r\n 7.5 投影变换\r\n 7.6 正投影\r\n 7.7 斜投影\r\n 7.8 透视投影\r\n 7.9 视口变换和三维屏幕坐标系\r\n 7.10 OpenGL三维观察函数\r\n 7.11 三维裁剪算法\r\n 7.12 OpenGL任选裁剪平面\r\n 7.13 小结\r\n 参考文献\r\n 练习题\r\n第8章 三维对象的表示\r\n 8.1 多面体\r\n 8.2 OpenGL多面体函数\r\n 8.3 曲面\r\n 8.4 二次曲面\r\n 8.5 超二次曲面\r\n 8.6 OpenGL二次曲面和三次曲面函数\r\n 8.7 柔性对象\r\n 8.8 样条表示\r\n 8.9 三次样条插值方法\r\n 8.10 Bezier样条曲线\r\n 8.11 Bezier曲面\r\n 8.12 B样条曲线\r\n 8.13 B样条曲面\r\n 8.14 beta样条\r\n 8.15 有理样条\r\n 8.16 样条表示之间的转换\r\n 8.17 样条曲线和曲面的显示\r\n 8.18 OpenGL的逼近样条函数\r\n 8.19 扫描表示法\r\n 8.20 结构实体几何法\r\n 8.21 八叉树\r\n 8.22 BSP树\r\n 8.23 分形几何方法\r\n 8.24 形状语法和其他过程方法\r\n 8.25 粒子系统\r\n 8.26 基于物理的方法\r\n 8.27 数据集可视化\r\n 8.28 小结\r\n 参考文献\r\n 练习题\r\n第9章 可见面判别算法\r\n 9.1 可见面判别算法的分类\r\n 9.2 后向面判别\r\n 9.3 深度缓存算法\r\n 9.4 A缓存算法\r\n 9.5 扫描线算法\r\n 9.6 深度排序算法\r\n 9.7 BSP树算法\r\n 9.8 区域细分算法\r\n 9.9 八叉树算法\r\n 9.10 光线投射算法\r\n 9.11 可见性检测算法的比较\r\n 9.12 曲面\r\n 9.13 线框可见性算法\r\n 9.14 OpenGL可见性检查函数\r\n 9.15 小结\r\n 参考文献\r\n 练习题\r\n第10章 光照模型与面绘制算法\r\n 10.1 光源\r\n 10.2 表面光照效果\r\n 10.3 基本光照模型\r\n 10.4 透明表面\r\n 10.5 雾气效果\r\n 10.6 阴影\r\n 10.7 照相机参数\r\n 10.8 光强度显示\r\n 10.9 半色调模式和抖动技术\r\n 10.10 多边形绘制算法\r\n 10.11 光线跟踪方法\r\n 10.12 辐射度光照模型\r\n 10.13 环境映射\r\n 10.14 光子映射\r\n 10.15 添加表面细节\r\n 10.16 用多边形模拟表面细节\r\n 10.17 纹理映射\r\n 10.18 凹凸映射\r\n 10.19 帧映射\r\n 10.20 OpenGL 光照和表面绘制函数\r\n 10.21 OpenGL纹理函数\r\n 10.22 小结\r\n 参考文献\r\n 练习题\r\n第11章 图形用户界面和交互输入方法\r\n 11.1 图形数据的输入\r\n 11.2 输入设备的逻辑分类\r\n 11.3 图形数据的输入功能\r\n 11.4 交互式构图技术\r\n 11.5 虚拟现实环境\r\n 11.6 OpenGL支持交互式输入设备的函数\r\n 11.7 OpenGL的菜单功能\r\n 11.8 图形用户界面的设计\r\n 11.9 小结\r\n 参考文献\r\n 练习题\r\n第12章 颜色模型和颜色应用\r\n 12.1 光的特性\r\n 12.2 颜色模型\r\n 12.3 标准基色和色度图\r\n 12.4 RGB颜色模型\r\n 12.5 YIQ颜色模型\r\n 12.6 CMY和CMYK颜色模型\r\n 12.7 HSV颜色模型\r\n 12.8 HLS颜色模型\r\n 12.9 颜色选择及其应用\r\n 12.10 小结\r\n 参考文献\r\n 练习题\r\n第13章 计算机动画\r\n 13.1 计算机动画的光栅方法\r\n 13.2 动画序列的设计\r\n 13.3 传统动画技术\r\n 13.4 通用计算机动画功能\r\n 13.5 计算机动画语言\r\n 13.6 关键帧系统\r\n 13.7 运动的描述\r\n 13.8 关节链形体动画\r\n 13.9 周期性运动\r\n 13.10 OpenGL动画子程序\r\n 13.11 小结\r\n 参考文献\r\n 练习题\r\n第14章 层次建模\r\n 14.1 基本建模概念\r\n 14.2 建模软件包\r\n 14.3 通用层次建模方法\r\n 14.4 使用OpenGL显示列表的层次建模\r\n 14.5 小结\r\n 参考文献\r\n 练习题\r\n第15章 图形文件格式\r\n 15.1 图像文件结构\r\n 15.2 降色方法\r\n 15.3 文件压缩技术\r\n 15.4 主流文件格式的结构\r\n 15.5 小结\r\n 参考文献\r\n 练习题\r\n附录A 计算机图形学的数学基础\r\n参考文献\r\n索引
交互式计算机图形学的飞速发展令人兴奋,其广泛的应用使科学、艺术、工程、商务、工业、医药、政府、娱乐、广告、教学、培训和家庭等各方面均获得巨大收益。
由Donald Hearn和M. Pauline Baker合著的《计算机图形学》初版于1986年,在1994年进行了部分修改,1997年又将其重写,继而推出了第二版。本书第二版的翻译版在国内深受广大读者的欢迎。2004年,两位作者针对计算机图形学领域的最新进展,再次对本书进行了大幅度的修改,从而推出了全新的第三版。在这一版本的相关内容中,除了将二维和三维概念集成在一起讲解之外,作者还对动画、对象表示、三维观察流水线、光照模型、表面绘制技术和纹理映射等许多主题进行了扩展,并且增加了讨论的深度。另外,书中还引入了现在广泛应用的OpenGL技术。通过采用OpenGL软件包中的图形子程序库,全书提供了20多个完整的C++程序示例。
为了适应计算机图形学的发展并促进其应用,几乎所有的高等学校均已开设了计算机图形学课程。人们都希望有更新、更好的计算机图形学教材。在这种情况下,我们把本书介绍给国内读者,希望能对计算机图形学的教学、研究与应用起到积极的作用。
本书由蔡士杰、宋继强和蔡敏共同翻译。蔡士杰翻译了第1章~第6章,宋继强翻译了第7章~第12章,蔡敏翻译了第13章~第15章以及附录。最后,由蔡士杰对全书进行了审校。由于译者的水平有限,书中难免出现错误和不妥之处,敬请读者不吝赐教。
Donald Hearn,从1985年开始任教于伊利诺伊大学Urbana—Champmgn分校的计算机科学学院。Hewn博士担任过多门课程的教学工作,其中包括计算机图形学、科学计算可视化、计算科学、数学和应用科学等。他还指导过多个研究项目并在该领域发表了大量的学术论文。
M.Pauline BakeR,印第安纳大学一普度大学计算机科学学院和信息学院的教授。Baker博士担任着可视化和交互空间渗透技术实验室主任一职,同时她也是一位杰出的科学家。Baker博士正在研究使用计算机图形和虚拟现实技术进行科学数据挖掘。在此之前,她还担任过伊利诺伊大学NCSA的可视化和虚拟环境实验室副主任。
蔡士杰,南京大学计算机科学与技术系教授,博士生导师,从事计算机图形学课程教学已有十余年。研究方向包括计算机图形学、CAD、图形识别,出版论著、译著5部,发表学术论文一百多篇。
计算机图形学是一种最令人兴奋的且发展最快的现代技术。自从本书第一版面市以来,计算机图形已成为一般的应用软件和计算机系统的标准特点。计算机图形方法普遍地应用于许多产品的设计、培训模拟、音乐视频和电视广告产品、动画、数据分析、科学研究以及其他应用之中。各种应用领域所需的许多技术和硬件设备已经投入使用或正在开发之中。特别值得一提的是,当前计算机图形学研究中有许多与改善图片生成的效率和速度有关。为了生成一张自然景象的真实感视图,图形程序必须模拟实际的光照效果和物理对象的折射。因此,当前计算机图形学的趋势是将改进的物理原理的近似结合到图形算法中,从而更好地模拟物体和照明环境之间的复杂交互。
第三版的特色
本书第三版的内容来自于我们多年来开设的各种课程的要点,这些课程包括计算机图形学引论、高级计算机图形学、科学计算可视化、专题和项目课程。在撰写本书第一版时,许多图形学课程和应用仅处理二维方法,因而我们将二维和三维图形技术分开讨论。本书第一版的前一半内容讲述了二维计算机图形处理的基础概念,而在后面讨论三维方法。不过现在三维图形的应用非常普遍,并且许多主要的计算机图形学课程或者主要处理三维方法,或者较早地介绍三维图形;因此,第三版的主要特点是将二维和三维主题集成在一起。
我们也扩充了许多相关主题,包括图形学当前的发展概况和新应用的讨论。本书第三版涵盖的内容有:图形系统当前的硬件和软件组成、分形几何、光线追踪、样条、光照模型、表面绘制、计算机动画、虚拟现实、图形算法的并行实现、反走样、超二次曲面、BSP树、粒子系统、基于物理的建模、科学计算可视化、辐射度、凹凸映射和变形;主要扩展的内容有:动画、对象表示、三维观察流水线、光照模型、表面绘制技术和纹理映射。
第三版中另一有意义的改变是引入现在广泛应用并且多数计算机系统都具备的OpenGL图形子程序。OpenGL软件包为使用通用语言(如C和C++)进行编程以及创建计算机图形显示,提供了巨大的、有效的且设备无关的函数集合。OpenGL的辅助库提供对需要设备交互的输入和输出操作以及其他的图形过程(如生成圆柱形状、球形对象和B样条的处理)。
程序设计示例
第三版中提供了20多个完整的C++程序示例,这些都是采用流行的OpenGL软件包中的图形子程序库编写的。这些程序展示了基本构图技术、二维和三维几何变换、二维和三维观察方法、透视投影、样条生成、分形方法、交互鼠标输入、拾取操作、菜单和子菜单显示以及动画技术的应用。另外,书中还给出了100多个C++/OpenGL程序段,用于展示裁剪、光照效果、表面绘制、纹理映射和许多其他计算机图形方法的算法实现。
所需背景
我们不要求读者预先熟悉计算机图形学,但要求读者具有程序设计和基本的数据结构方面的一些知识。计算机图形学的相关算法中用到了许多数学方法,这些方法的深入讨论将在附录中给出。附录中的数学内容包含了解析几何、线性代数、向量和张量分析、复数、四元数、微积分初步和数值分析等方面的技术。
第三版可作为没有计算机图形学背景的学生的教材和图形学专业人员的参考书。本书的侧重点是对设计、使用和理解计算机图形系统所需的基本理论,以及用来展示每一主题的方法和应用的大量示例程序。
课程安排的建议
对于一学期的课程,可以选择二维方法或二维和三维结合的方法进行教学,并按课程的特定要求进行选择。对两学期的课程,则在第一学期选择基本图形概念和方法,而在第二学期选择覆盖高级三维方法和算法。对于自学的读者,前面一些章节用来理解图形概念,然后再根据读者的兴趣选择后面的某些章节。
对于本科生来说,第2章~第6章、第11章和第13章的内容可用来组织计算机图形学引论的课程。从这几章中选择相关内容用以讲述二维方法,或者再加上第7章和第10章中的一部分内容来介绍三维主题。其他主题,如分形表示、样条曲线、纹理映射、深度缓存方法或颜色模型,可在第一门计算机图形学课程中介绍。对于低年级研究生或高年级本科生的课程来说,授课内容偏重于三维观察、三维建模、光照模型和表面绘制方法。一般情况下,两学期的授课内容可以较好地覆盖二维和三维计算机图形方法的基础,其中包括样条表示、表面绘制和光线跟踪。对于学生已掌握计算机图形学预备知识的专题课,相应地可以讲解可视化技术、分形几何、样条方法、光线跟踪、辐射度和计算机动画等专题中的一到两种。
第1章通过展示采用图形软件生成的各种不同类型的图片,给出了计算机图形应用领域间的差异。第2章介绍了计算机图形学的基本术语,以及图形系统的硬件和软件的组成,然后详细介绍了OpenGL和一个完整的OpenGL示例程序。第3章和第4章给出了表示和显示简单对象的基本算法。这两章考察了生成多边形和圆等基本图形成分的方法与设定对象颜色、大小和其他属性的技术,以及这些技术在OpenGL中的实现。第5章讨论了旋转和缩放等几何变换。第6章和第7章详细解释了显示二维和三维场景视图的过程。复杂对象如二次曲面、样条、分形和粒子系统等的显示生成方法将在第8章进行讨论。识别三维场景中可见面的各种计算机图形技术将在第9章讨论。光照模型和对场景应用光照条件的方法将在第10章进行介绍。交互图形输入和设计图形用户界面(GUI)的方法在第11章给出。计算机图形学中非常有用的各种颜色模型和方法以及颜色设计的考虑在第12章讨论。动画技术则在第13章进行介绍。复杂系统的层次式建模方法将在第14章给出。在第15章,我们综述了主要的图形文件格式。
致谢
多年以来,许多人以各种方式对本书做出了贡献。对提供图片和其他材料的组织与个人,我们再次表示感谢。我们也感谢一些学生在计算机图形学及可视化课程和讲座中提出的许多有帮助的意见。我们感谢所有审阅本书或对本书提出改进意见的人,同时我们对未能致谢的人表示歉意。谢谢Ed Angel、Norman Badler、Phillip Barry、Brian Barsky、Hedley Bond、Bart Braden、Lara Burton、Robert Burton、Greg Chwelos、John Cross、Steve Cunningham、John DeCatrel、Victor Duvaneko、Gary Eerkes、Parris Egbert、Tony Faustini、Thomas Foley、Thomas Frank、Don Gillies、Andrew Glassner、Jack Goldfeather、Georges Grinstein、Eric Haines、Robert Herbst、Larry Hodges、Carol Hubbard、Eng-Kiat Koh、Mike Krogh、Michael Laszlo、Suzanne Lea、Michael May、Nelson Max、David McAllister、Jeffrey McConnell、Gary McDonald、C. L. Morgan、Greg Nielson、James Oliver、Lee-Hian Quek、Laurence Rainville、Paul Ross、David Salomon、Gunther Schrack、Steven Shafer、Cliff Shaffer、Pete Shirley、Carol Smith、Stephanie Smullen、Jeff Spears 、William Taffe、Wai Wan Tsang、Spencer Thomas、Sam Uselton、David Wen、Bill Wicker、Andrew Woo、Angelo Yfantis、Marek Zaremba、Michael Zyda和许多不知名的审稿者。我们也感谢编辑Alan Apt、Toni Holm以及Colorado工作人员的帮助、建议与鼓励。还有Lynda Castillo、Camille Trentacoste、Heather Scott、Xiaohong Zhu、Vince O誃rien、Patricia Burns、Kathy Ewing和David Abel,我们向他们的贡献和认真细致的工作再一次表示感谢。