计算机图形学
作者 : Steve Cunningham
译者 : 石教英 潘志庚
丛书名 : 计算机科学丛书
出版日期 : 2008-06-23
ISBN : 7-111-24102-7
定价 : 48.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 343
开本 : 16开
原书名 : Computer Graphics:Programming in OpenGL for Visual Communication
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

投影变换建模流水线绘制明暗处理,循序渐进
  坐标视图颜色场景图光照视觉交流,由浅入深
  本书主要介绍计算机图形学原理而不讨论实现这些原理的算法和数学细节,重点在于讲述如何采用图形APIOpenGL的编程技术来解决实际问题。作者以描述性和面向过程的方式阐述了计算机图形学中的重要主题,使得计算机科学及相关专业的学生在学习阶段的早期便能接触并理解这些主题;同时使用OpenGL来说明计算机图形学的基本概念,使学生可以绕过图形学算法和数学细节,快速生成有意义的可交互且动态的三维图形,创建有效的视觉交流。
  本书注重计算机图形学精髓的理解和图形编程技术的掌握,非常适合作为高等院校计算机及相关专业计算机图形学课程的教材,同时也适合作为具有熟练编程经验的其他专业学生和专业技术人员学习图形学及图形编程的自学教材。

主要特点
  ●强调利用计算机图形进行有效的交流,特别是在科学领域。
  ●广泛采用场景图组织图形程序。
  ●首次在硬拷贝一章中介绍了三维硬拷贝(或称为快速原型生成)技术,在其他导论性教材中均没有该内容。
  ●代码示例遍及全书,既包含伪代码,也包含全部OpenGL程序列表。
  ●包含大量组织新颖独特的问题和练习:
  ●每章的学生问题划分为四部分:思考题、练习题、实验题和大型作业。
  ●这些问题帮助学生更深入地思考问题,进行编程练习,尝试新的思路和方法,以及开发大型的具有挑战性的项目。

图书特色

图书前言

计算机技术对世界产生了重大影响,而计算机图形学正是其最令人振奋的成就之一。图形学渗透到我们生活的方方面面,从可以利用电子表格轻松地创建能够看到数据的图表,到可以通过图形学提供各种动画、特殊效果来增强娱乐性,再到借助图形更直观地展示和理解科学原理等。这些重要作用源于计算机系统中图形硬件与软件的不断进步。正是这些改进和提高,计算机图形学已成为不再需要昂贵的计算机和帧缓存,也不再要求程序员掌握生成图像所需要的所有数学和算法知识的高端技术领域。计算机图形学已经演化成一门让图形程序员关注高层建模、创造与用户有高度交互性场景的学科。我们认为,初级计算机图形学课程的重点在于指导学生如何利用计算机图形学知识建立与用户的有效交流,例如交互和动画技术。图形学相关的算法与数学方面的更多技术细节将在图形学的高级课程中介绍。
什么是计算机图形学
计算机图形学研究的是应用计算机产生图像的所有工作,不管图像是静态的还是动态的,可交互的还是固定的,用于电影的、视频的、屏幕显示的还是打印输出的。这种特质使得计算机图形学有着非常广泛的应用领域,包括创意、商业或科学领域的许多应用。图形学广泛的应用范围促使我们为所有这些不同的领域开发出各种有用的生成图像和操纵图像的工具。而大量图形工具与应用实例也意味着我们可以借此了解和学习图形学的许多知识。
目前大部分计算机图形学方面的书籍可分为两类。第一类是传统的图形学教科书,强调建模、绘制、视图变换方面的算法与技术。这些都是很重要的概念,但是过分强调图像生成过程容易忽略图像内容。第二类着眼于图像生成的各种应用,特别是商业与娱乐行业的应用。这类课程受限于应用领域的需求和局限性,无法拓展到应用中未提到的部分。在学习应用实例时会提到一些基本概念,但重点还是学习应用本身。
本书将算法与应用结合起来。我们不过分强调计算机图形学领域内的算法与技术细节,也不会专注于图像生成的应用,而是将计算机图形学视为对图像内容中的几何、外观和表示等属性编程,并将编程结果展示在图形输出与交互设备上,从而生成合成图像的一门学科。这种强调通过编程方法生成图像的方式意味着我们必须掌握一些基本概念,因为我们要学会用计算机可理解的方式表示图形与交互的概念。这种强调通过编程生成图像的方法可以让学生掌握整个图像生成的过程,因而对学生既有机遇又有挑战。
掌握图像生成过程并非最终目标,由于图像会向其观察者传达某种信息,因此图像本身也很重要。我们要考虑图像的视觉交流效果。因此,图形学专业人员所做的图像生成工作包括理解图像表达的内容、开发组成图像的几何对象表示方法,将这些对象在几何空间组织起来以符合图像所需的关系,定义和表示场景中的每个对象,指定观察场景的方法和指定将看到的场景显示在图形设备上的方法。编程方法有很多种,但当前实践应用中通常采用能支持必要建模的与能完成通过编程定义的场景绘制工作的图形API。目前有很多的图形API,但OpenGL可能是目前应用最广泛的图形API,它提供了一个很好的学习图形技术的平台。
除了建模、视图变换、场景外观属性表示之外,图形学专业人员还有另外两个重要任务。由于静态图像携带的信息量不如动态图像多,因此,在场景中加入运动信息(即定义图像动画)很重要。由于观察者希望或需要改变图像的内容、观察方式或图像的计算方法,因此,为用户设计与场景的交互方式也是十分重要的。图形API也支持这些额外的任务。
  什么是图形API
  API即应用编程接口(Application Programming Interface),是可供程序员开发应用程序的工具集。API的工具面向应用领域的具体任务,可以让程序员使用该领域的概念开发应用程序,而无需了解计算机系统的细节。API的作用在于屏蔽了任意一个计算机系统的细节,可以让程序员开发的应用程序运行在许多系统上。因此,图形API就是允许程序员开发包含交互式计算机图形操作的应用而不需要关注图形操作细节或任务系统细节(比如窗口处理和交互)的工具集。
本书除了包含交互式计算机图形学的基本知识外,还将介绍OpenGL图形API,并给出一些例子帮助理解OpenGL提供的功能,帮助大家学习将图形学编程与自己的工作相结合的方法。与大多数API一样,OpenGL除了提供本书中提到的入门内容之外,还支持很多高级操作。如果你需要进一步了解,请参考资源网站http://www.opengl.org/。
  为什么需要计算机图形学
  计算机图形学包含很多方面,因此,需要计算机图形学有很多原因。计算机图形学的一些最突出的应用是为许多用途创建图像,例如科学用途 (将科学成果通过可视化的方式展示和解释给公众),娱乐用途(电影、视频游戏和特效),创意或艺术创作(艺术品、交互式影像装置),商业用途(广告、通信、产品设计),或日常交流(天气预报动画展示、图形资讯)等。本书提到的方法都是这些应用的基础,虽然有些应用可能涉及一些简单API编程无法达到的图像特殊效果或真实感效果。
在上文提到的所有应用领域,甚至更多领域中,计算机图形学在问题求解方面扮演非常重要的角色。问题求解是人们日常生活经常遇到的过程,因而,计算机图形学几乎在所有的领域都扮演着重要的角色,如图1所示。该图描述了问题求解过程:
  ·提出问题
  ·通过建模表达问题,使问题更抽象地表达
  ·提出用几何模型表示问题的方法
  ·由几何模型生成图像,将问题可视化
  ·根据生成的图像理解问题或模型,从中思考解决方法
  图1  图形学在问题求解过程中的作用
  表示问题的图像可由多种方法生成。一种经典的简单方法是采用草图来表示讨论问题的图像,和同事作非正式地交流。(有个民间笑话称,餐馆非常不希望见到一群科学家或数学家来吃饭,因为他们会在桌布上画草图!)图像也可采用计算机图形学来生成,特别是当需要与大量观众分享想法的时候很有用。如果根据问题生成模型,这些图像可以是动画或者能作交互式显示,这比用简单草图更能将问题表达清楚。然后,问题解决者或者观众可以利用图像进一步了解模型,从而进一步了解问题,使问题不断细化,创建更为复杂的模型,这个过程可以重复进行。
  这个过程是第9章讨论图形学解决科学领域问题的基础,可应用到更广泛的领域。计算机图形学将大脑的视觉功能和智慧有效地应用到问题求解过程中,给我们提供了思考世界的强有力的工具。用俄勒冈州立大学的Mike Bailey先生的话来说,如同工具扳手增加了我们的手部力量,计算机图形学给我们提供了“脑扳手”来增强我们思考的能力。
  本书概况
  本书作为计算机图形学初级教材,要求学生具有较好的编程背景(大致相当于学生已经修完了一年的程序设计课程)。由于C语言是OpenGL应用中最常用的语言,因此本书的例子采用C语言编程,但本课程也可采用C++语言和其他面向对象语言。与传统图形学教材不同,本书不要求读者事先具备计算机图形学方面的知识,也不要求具备大量的数学基础和高级计算机科学知识。因为我们注重图形学编程而非算法和技巧,所以,本书不会涉及很多数据结构和其他算法技巧。与传统图形学教材不同,本书可作为计算机系学生早期阶段的计算机图形学教材,也可作为具有熟练编程经验的学生的自学教材。特别是本书可作为社区大学等的计算机图形学教材。
本书中的许多例子来自科学领域,其中有一章介绍计算机图形学在科学和数学领域的不同应用。因此,本书可作为计算科学或需要与其他科学领域交叉的计算机科学课程教材,特别适合旨在为理科学生提供计算科学或科学可视化背景知识的课程教材。我们也曾想过在本书题目中加入可视化这个词,但后来考虑到这个词适合用在主要介绍科学而图形学为辅助内容的教材中,并不适合作为本书的题目。因为我们的观点刚好相反,认为科学可视化是计算机图形学的一种应用。
  本书按照计算机图形学的传统顺序:投影处理、视图变换、建模、绘制、光照、着色处理等学科内容来组织。这些要素都纳入场景图之中,场景图可以很好地帮助程序员组织场景。我们还强调了产生图像的图形处理流水线。除了基本的图像处理技术,本书还着重介绍了如何采用计算机图形学来解决实际问题,及如何更有效地将结果展示给观察者的方法。本书介绍了计算机图形学中一系列的基本概念和技术,并说明OpenGL API如何提供实现这些概念和技术的图形学工具。我们的目标是使学生理解图形学概念,并学会使用图形API来实现图形学操作并为观察者创造有效的图像。我们深知仅有本课程是远远不够的,因此,我们会在介绍实现技术时提到涉及到的算法和原理,但并不会像理论课本一样对其深入展开。如有必要,将由你的导师为你深入讲解。
  我们尽量将本书的各章节顺序安排为计算机图形学的入门教材应采用的顺序,有时候一章中提到的内容有可能依赖于该章之前的知识。如果在某一章中明显提到其他章节的内容,我们会做相应的说明。假设课程要包含交互式图形学内容,则第7章就是介绍交互技术(第7章数学章节可列为参考资料),第10章图形流水线也与交互技术有关。除此之外,其他章节都是相对独立的,读者可按兴趣选读。
  本书重点在于介绍采用图形API的编程技术,主要使用OpenGL API计算机编程来说明计算机图形学的基本概念。每一章讲述图形学的一个主题,并讨论其在OpenGL中的处理方式。除了用OpenGL作为例子讲述API的用法之外,有时也使用其他图形API。我们对图形学的基础算法和技术进行简要介绍,使大家能够理解图形学编程中的问题。这一点与大多数计算机图形学课本不同,在那些课本里面通常会花很多笔墨讲述算法和技术的细节。对于希望更深入了解这些知识的读者,我们建议选修高级计算机图形学课程。我们相信,基于API的图形学编程经验能够帮助读者更好地理解这些算法和技术的重要性,并可以在实际工作中更熟练地应用这些算法,没有相关算法背景知识会感到困难。
  本书包含其他初级教科书中没有的几个特点。这些特点很好地满足了当前计算机图形学编程实践的需要。本书着重讨论三维图形技术,几乎完全不讨论二维技术。而传统图形学课程通常从二维开始再到三维,因为从二维开始掌握算法和技术相对比较容易。但直接从三维概念开始更为便利,因为二维图形学可视为三维图形学的特例,例如在X-Y平面上作三维建模。
  建模是计算机图形学领域的基础,可用多种方法在图形显示器上为物体建模。由于OpenGL和大多数图形API支持多边形建模,本书也从标准的多边形建模开始。书中所讨论的建模着重讲述将场景图作为创建图形场景的基础工具。场景图的概念使学生可以设计变换、几何与复杂图元的外观属性,即使图形API本身并不直接支持场景图,也能方便地用清晰的代码来实现。这一点对层次式建模尤为重要,同时提供了统一的建模方法及许多有用的应用,使得读者能更多地关注场景,以管理运动和动画。
  本书的一个重要特点在于强调采用计算机图形学创建有效的视觉交流。这个思想的提出是基于下列认识:计算机图形学在深入理解复杂问题并与他人交流方面的关键作用已被科学家群体和公众理解和认识。而这一点通常为计算机图形学教材所忽略,当然,我们希望大部分教师能在课程中提到这点。由于在图形建模、视图变换、颜色和交互中都应考虑有效交流的问题,因此本书的许多章节都会提到这个问题。相信关于这个主题的系统讨论对学生在以后的职业生涯中更有效地应用计算机图形学十分有用,无论他们从事计算机技术领域,还是从事计算机图形学的特殊应用领域的工作。
  本书还强调创建交互显示的技术。大多数计算机图形学教科书都会提到交互和交互图形的创建。这一直以来是比较难于实现的领域,因为它涉及编写或应用一些特殊设备的驱动程序的技术。但随着OpenGL和其他图形API的日益普及,这项技术变得越来越普通了。由于我们非常关注图像与观众的有效交流,因而有必要了解与图像交互交流信息的重要作用。本文对交互的讨论包括事件驱动编程、OpenGL中使用的事件和回调函数,也包括交互在创建有效交流中的作用。我们在具体任务中观察交互的作用,而非仅学习交互技术,因此,应该将交互技术与本书所有内容结合起来学习。
  可能你会注意到本书所举的例子比大多数计算机图形学教材的例子相对简单,这是有意如此设计的。我们认为既然本书要学习与OpenGL难度相当的图形生成方法,那么所举的例子也应该是这个难度。希望这些“自制的”例子比较有用,也希望读者能创建更好的例子。
  本书介绍图形学原理而不讨论实现这些原理的算法和数学细节。这与大多数计算机图形学教科书有所不同。对希望更深入了解这门课程的读者,我们建议您再选读另一门图形学高级课程。我们相信,有了基于API图形学编程背景,学生将对计算机图形学算法与技术有更深入的理解,也有助于学生更熟练地应用图形算法和技术。
  小结
  读完本书后,相信您将具有以下方面的技能:
  ·理解图形系统中图形信息的表示方法,使用图形系统编码生成图像
  ·理解在程序中怎样组织图形信息,应用图形API生成图像
  ·理解怎样使用图形系统中的事件信息生成交互图形显示
  ·理解生成能与观察者有效交流的图像的相关知识
  ·掌握用OpenGL API生成有效图像的技巧
  我们希望读者将学到的原理和技巧应用到计算机图形学起重要作用的领域,并理解其在这些领域中的作用。本书主要将这些原理和技巧应用在科学领域(它们在很多其他领域也有广泛的应用)。如果有人采用本书为非科学或工程学科的学生开设课程,本书作者听到这一消息时将会十分高兴。
  致谢
  本书的写作最早得到美国国家科学基金会课题的支持,课题编号为DUE-9950121。本书提到的观点、发现、研究成果、结论与推荐意见均是作者本人提出的,与美国国家科学基金会无关。作者同时非常感谢加州州立大学Stanislaus分校(California State University Stanislaus)给我学术假期的支持,感谢圣地亚哥超级计算机中心(SDSC)的支持,特别是Mike Bailey(现在俄勒冈州立大学任教)在学术假期接待了我,使本书写作计划得以启动,也感谢他提供了大量可视化和科学方面的示例。圣地亚哥州立大学的Kris Stewart,沃福德学院的Angela Shiflet,SDSC的Rozeanne Steckler和Kim Baldridge,CSU Stanislaus的Ian Littlewood等学者为图形学在科学领域章节中提供了许多重要帮助。Grinnell学院的Sam Rebelsky提供了宝贵意见。Botswana大学的Sampson Asare,Swaziland大学的Petros Mashwama,Sa~o Paolo大学的Marcelo Zuffo允许作者使用研讨会文件的原稿。作者的几位在CSU Stanislaus和圣地亚哥州立大学的学生提供了重要例子并审读本书的有关章节。尤其是Ken Brown为本书原稿提出了许多有用的图形和概念。同时,还感谢我的学生Mike Dibley,Ben Eadington, Jordan Maynard和Virginia Muncy为提供本书中的例子所做出的贡献。
  感谢本书前期的审稿人。他们在许多方面,从基本概念到具体建议到校正错误提供了帮助。本书的成功完成源于我的学生、同事以及审稿人的共同努力。由于作者本人的学识有限,本书中难免有疏漏和不当之处,敬请读者不吝赐教。

  Steve Cunningham
  Coralville, Iowa

作者简介

Steve Cunningham:Steve Cunningham: 美国加州大学斯坦尼斯洛斯分校计算机系资深教授,长期从事计算机图形学教学和研究工作。他对计算机图形学理论和OpenGL编程均有很深的造诣,曾经担任ACM SIGGRAPH学会的主席和Eurographics学会教育委员会的主任,多次组织计算机图形学和可视化教学研讨会。

译者简介

石教英 潘志庚:暂无简介

译者序

我们应机械工业出版社编辑的邀请,组织翻译本书,这本书的作者Steve Cunningham先生是美国著名的图形学专家,曾经担任过ACM SIGGRAPH学会的主席和EUROGRAPHICS学会教育委员会的主任,并曾多次组织计算机图形学和可视化教学研讨会。
Steve Cunningham先生也是我们在美国的老朋友,他多次应邀访问中国,为我们做学术报告,对中美两国在计算机图形学方面的学术交流做出了重要贡献。另外,他对中国的美丽风景也是情有独钟,仅在2006年,他就三次来我国访问旅游。Steve Cunningham先生是美国加州大学Stanislaus分校计算机系资深教授,长期从事计算机图形学教学和研究工作。他对计算机图形学理论和OpenGL编程均有很深的造诣。他愿意花时间把自己的经验写出来和大家分享是一件非常好的事情。
图形学理论经过这么多年的发展,图形学技术本身也发生了很大的变化,可以用下面两句话来概括图形学的发展:
绘点绘线绘面绘体,描绘五彩世界
求好求快求新求美,追求永无止境
OpenGL作为一个性能优越的图形应用程序设计接口(API),适用于广泛的计算机环境,它已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。OpenGL有十分广泛的应用领域,如军事、电视广播、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟现实等。本书的内容及特点可以用下面的对联给以概括:
投影变换建模绘制流水线着色处理,循序渐进
坐标视图颜色光照场景图视觉交流,由浅入深
就像本书作者在前言中所叙述的,本书非常适合于作为图形学的教材来用,也适合学习图形学及图形编程的自学者阅读。本书系统地介绍了交互式计算机图形学的基础知识和OpenGL图形接口,并给出一些例子帮助理解OpenGL提供的功能,每章附有思考题、练习题、实验题和大型作业,供读者检查自己掌握本书内容的程度。因此,本书是一本优秀的计算机图形学教材。
我们给本书读者提出的希望是:认认真真,夯实图形基础;踏踏实实,掌握编程技巧。希望读者通过本书的学习,能理解图形学的精髓、学会图形编程技术、找到一份好的工作。诚能如此,我们也就很欣慰了。
最后,要感谢参加本书翻译工作的张明敏副教授和各位研究生,他们各自负责翻译的部分是:前言和第0章(陈薇薇)、第1章和第6章(潘卫敏)、第2章和第3章(程熙)、第4章和第9章(朱杰杰)、第5章和第8章(张明敏)、第7章和第11章(王田和王总辉)、第10章和第15章(彭浩宇)、第12章和第13章(熊华)、第14章和附录(张亚萍)。本书由石教英教授负责审校前言、第0章、第7章、第10~15章和附录,由潘志庚研究员负责审校第1~6章、第8章和第9章。另外,我们也要感谢机械工业出版社的编辑的组织和指导工作。
由于时间仓促,本书的翻译难免有疏漏和不当之处,敬请读者指正,我们会在后续的版本中更正。
感谢Mike Bailey提供优秀的计算机图形学教学示例和本书的许多写作思路。
封面照片是中国安徽省黄山著名风景—“猴子观海”。这张照片由本书作者摄于2006年6月的一次日出前。日出时刻是公认的观看黄山云海的最佳时间。下面这张黑白照片是“猴子观海”景点的铭牌。
作者以封面照片献给浙江大学石教英教授,一位中国计算机图形学界长期以来的领军人物。照片上的那只石猴子看起来很像一名学生正在沉思他的课程作业(当然是计算机图形学作业!)。

石教英、潘志庚
2007年12月于浙江大学

图书目录

出版者的话
译者序
前言

第0章  导论 1
0.1  视觉交流与计算机图形学 1
0.2  视觉交流的基本概念 2
0.2.1  使用合适的信息表示方式 2
0.2.2  图像应突出重点 2
0.2.3  使用合适的信息展示级别 2
0.2.4  采用合适的信息格式 3
0.2.5  注意图像显示的准确性 3
0.2.6  理解并尊重观众的文化背景 3
0.2.7  使交互成为用户熟悉的高效操作 4
0.3  三维几何和几何流水线 5
0.3.1  场景与视图 5
0.3.2  三维模型坐标系 5
0.3.3  三维世界坐标系 5
0.3.4  三维眼坐标系 6
0.3.5  投影 6
0.3.6  裁剪 7
0.3.7  选择透视投影或正交投影 7
0.3.8  二维眼坐标 8
0.3.9  二维屏幕坐标 8
0.4  外观属性 8
0.4.1  颜色 9
0.4.2  纹理 9
0.4.3  深度缓存 9
0.5  观察过程 9
0.6  图形卡 10
0.7  一个简单的OpenGL程序 10
0.7.1  OpenGL程序main()函数结构 15
0.7.2  模型空间 15
0.7.3  模型变换 15
0.7.4  三维世界空间 16
0.7.5  视图变换 16
0.7.6  三维眼空间 16
0.7.7  投影操作 16
0.7.8  二维眼空间 17
0.7.9  二维屏幕空间 17
0.7.10  科学问题编程 17
0.7.11  外观属性 17
0.7.12  从另一角度分析程序 17
0.8  OpenGL扩展 18
0.9  小结 19
0.10  本章的OpenGL术语表 19
0.11  思考题 20
0.12  练习题 21
0.13  实验题 21
第1章  视图变换和投影 22
1.1  简介 22
1.2  视图变换的基本模型 24
1.3  定义 24
1.3.1  建立视图环境 25
1.3.2  定义投影 25
1.3.3  视域体 26
1.3.4  正交投影 27
1.3.5  透视投影 27
1.3.6  透视投影的计算 28
1.3.7  视域体裁剪 29
1.3.8  定义窗口和视口 30
1.4  管理视图的其他方面 32
1.4.1  隐藏面 32
1.4.2  双缓存 33
1.5  立体视图 33
1.6  视图变换与视觉交流 34
1.7  在OpenGL中实现视图变换和投影 34
1.7.1  定义窗口和视口 35
1.7.2  改变窗口的形状 35
1.7.3  设置视图变换的环境 36
1.7.4  定义透视投影 37
1.7.5  定义正交投影 37
1.7.6  隐藏面的处理 37
1.7.7  设置双缓存 38
1.8  实现立体视图 38
1.9  小结 39
1.10  本章的OpenGL术语表 39
1.11  思考题 40
1.12  练习题 40
1.13  实验题 41
第2章  建模原理 43
2.1  简单几何建模 44
2.2  定义 44
2.3  例子 46
2.3.1  单点和多点 46
2.3.2  线段 46
2.3.3  线段序列 46
2.3.4  三角形 47
2.3.5  三角形序列 47
2.3.6  四边形 47
2.3.7  四边形序列 48
2.3.8  通用多边形 49
2.3.9  多面体 50
2.3.10  走样和反走样 50
2.3.11  法线 50
2.3.12  裁剪 51
2.3.13  建模的数据结构 52
2.3.14  曲面的建模 53
2.3.15  其他的图形对象源 54
2.3.16  建模行为 55
2.3.17  建议 55
2.4  变换和建模 55
2.5  定义 56
2.5.1  变换 56
2.5.2  复合变换 58
2.5.3  使用变换栈 59
2.5.4  编译几何体 60
2.6  一个例子 60
2.7  建议 62
2.8  建模视觉交流 62
2.9  认识形体的含义 62
2.10  维度 63
2.11  更高维度 65
2.12  图例和标签 66
2.13  精确度 67
2.14  场景图和建模图 67
2.15  场景图的概要 68
2.15.1  场景图中的裁剪 69
2.15.2  用场景图建模的例子 69
2.16  视图变换 71
2.17  场景图和深度测试 73
2.18  用建模图写代码 73
2.18.1  两个场景图的代码实例 75
2.18.2  使用标准的对象生成
更加复杂的场景 77
2.19  小结 77
2.20  思考题 77
2.21  练习题 78
2.22  实验题 79
2.23  大型作业 80
第3章  在OpenGL中实现建模 81
3.1  指定几何体的OpenGL模型 81
3.1.1  点和多点模型 82
3.1.2  直线段 82
3.1.3  线段序列 83
3.1.4  封闭线段 83
3.1.5  三角形 83
3.1.6  三角形序列 83
3.1.7  四边形 84
3.1.8  四边形条带 85
3.1.9  普通多边形 85
3.1.10  顶点数组 86
3.1.11  反走样 86
3.1.12  将在很多例子中使用的立方体 86
3.1.13  定义裁剪平面 87
3.2  OpenGL工具中的附加对象 88
3.2.1  GLU二次曲面对象 88
3.2.2  GLU圆柱体 88
3.2.3  GLU圆盘 88
3.2.4  GLU球体 89
3.2.5  GLUT对象 89
3.2.6  例子 89
3.3  OpenGL中的变换 90
3.4  图例和标签 92
3.5  变换的代码实例 93
3.5.1  简单变换 93
3.5.2  变换栈 94
3.5.3  逆转视点变换 95
3.5.4  生成显示列表 96
3.6  到视点的距离 97
3.7  小结 97
3.8  本章的OpenGL术语表 98
3.9  思考题 100
3.10  练习题 100
3.11  实验题 101
3.12  大型作业 102
第4章  建模的数学基础 103
4.1  坐标系 103
4.2  四象限和八象限 104
4.3  点、直线和直线段 104
4.4  直线段、射线、参数化曲线和曲面 105
4.5  点到直线的距离 105
4.6  向量 105
4.7  向量点积和叉积 106
4.8  反射向量 107
4.9  变换 108
4.10  平面和半空间 109
4.11  点到平面的距离 110
4.12  多边形和凸面 110
4.13  多面体 111
4.14  极坐标、柱面坐标和球面坐标 111
4.15  碰撞检测 112
4.16  高维空间 114
4.17  小结 114
4.18  思考题 114
4.19  练习题 114
4.20  实验题 114
第5章  颜色及其混合 116
5.1  简介 116
5.2  原理 117
5.2.1  设置几何物体的颜色 117
5.2.2  RGB立方体 117
5.2.3  亮度和色弱 118
5.2.4  其他颜色模型 119
5.2.5  颜色深度 120
5.2.6  色谱 121
5.2.7  颜色混合与a通道 121
5.2.8  使用混合达到透明效果 122
5.2.9  索引颜色 122
5.3  颜色和视觉交流 123
5.3.1  强调色 123
5.3.2  背景色 123
5.3.3  自然色 124
5.3.4  伪彩色和颜色渐变 124
5.3.5  创建颜色渐变 124
5.3.6  颜色渐变的使用 125
5.3.7  比较形状和颜色编码 126
5.3.8  颜色的文化背景 126
5.4  例子 127
5.5  OpenGL中的颜色 128
5.5.1  颜色定义 128
5.5.2  使用混合 128
5.6  代码实例 129
5.6.1  带有全色谱的模型 129
5.6.2  HSV圆锥 129
5.6.3  HLS双圆锥 130
5.6.4  带半透明面的对象 131
5.6.5  索引颜色 131
5.6.6  OpenGL中的颜色渐变 132
5.7  小结 132
5.8  本章的OpenGL术语表 132
5.9  思考题 132
5.10  练习题 133
5.11  实验题 134
5.12  大型作业 134
第6章  光照处理和着色处理 135
6.1  光照处理 135
6.1.1  环境光、漫反射光和镜面反射光 136
6.1.2  表面法向 138
6.2  材质 139
6.3  光源属性 139
6.3.1  光源颜色 140
6.3.2  位置光 140
6.3.3  聚光灯 140
6.3.4  光线衰减 140
6.3.5  方向光 140
6.4  放置与移动光源 141
6.5  用光照实现特效 141
6.6  场景图中的光源 141
6.7  着色处理 141
6.8  在视觉交流中考虑着色处理 142
6.9  定义 142
6.10  Flat着色处理和平滑着色处理的例子 143
6.11  计算每个顶点的法向 144
6.11.1  平均多边形法向 144
6.11.2  法向的解析计算 144
6.12  其他着色处理模型 145
6.13  各向异性着色处理 146
6.14  全局光照 146
6.14.1  辐射度方法 147
6.14.2  光子映射 147
6.15  局部光照和OpenGL 148
6.15.1  指定和定义光源 148
6.15.2  选择性地使用光源 150
6.15.3  定义材质 150
6.15.4  使用GLU二次曲面物体 151
6.15.5  例子:把三原色光源应
用于白色表面 151
6.15.6  示例代码 151
6.15.7  着色处理的例子 152
6.16  建议 154
6.17  小结 154
6.18  本章的OpenGL术语表 154
6.19  思考题 155
6.20  练习题 155
6.21  实验题 156
6.22  大型作业 157
第7章  事件和交互式编程 158
7.1  定义 158
7.2  事件的例子 159
7.3  交互的方式和方法 160
7.4  对象选择 161
7.5  交互和视觉交流 161
7.6  事件和场景图 162
7.7  建议 162
7.8  OpenGL中的事件 163
7.9  回调函数的注册 163
7.10  实现细节 165
7.11  代码实例 167
7.11.1  空闲事件回调函数 168
7.11.2  定时器事件回调函数 168
7.11.3  键盘回调函数 169
7.11.4  菜单回调函数 170
7.11.5  鼠标移动的鼠标回调函数 171
7.11.6  对象拾取的鼠标回调函数 171
7.12  拾取的实现细节 173
7.12.1  定义 173
7.12.2  拾取操作的实现方法 174
7.12.3  拾取矩阵 176
7.12.4  使用后颜色缓存做拾取 176
7.12.5  一个选择操作的例子 177
7.12.6  拾取小结 179
7.13  MUI工具 179
7.13.1  引言 179
7.13.2  应用MUI的功能 180
7.13.3  MUI用户界面对象 181
7.13.4  一个例子 183
7.14  在Windows系统中安装MUI 185
7.15  建议 185
7.16  小结 185
7.17  本章的OpenGL术语表 186
7.18  思考题 187
7.19  练习题 188
7.20  实验题 188
7.21  大型作业 189
第8章  纹理映射 190
8.1  简介 190
8.2  定义 191
8.2.1  1D纹理图 191
8.2.2  2D纹理图 191
8.2.3  3D纹理图 192
8.2.4  纹理坐标与空间坐标的对应关系 192
8.2.5  对象颜色与纹理图颜色的关系 192
8.2.6  纹理图的其他含义 192
8.2.7  场景图中的纹理映射 193
8.3  创建纹理图 193
8.3.1  从图像创建纹理图 193
8.3.2  人工生成纹理图 194
8.3.3  噪声函数生成纹理图 194
8.4  纹理图中的插值操作 195
8.5  纹理映射和布告板技术 196
8.6  纹理图中包含多个纹理 196
8.7  纹理反走样 196
8.8  MIP映射 197
8.9  多纹理 197
8.10  OpenGL中的纹理映射 198
8.10.1  顶点与纹理点相关 198
8.10.2  从屏幕获取纹理 199
8.10.3  纹理环境 199
8.10.4  纹理参数 200
8.10.5  获取及定义纹理图 201
8.10.6  纹理坐标控制 202
8.10.7  纹理插值 202
8.10.8  纹理映射和GLU四边形 203
8.10.9  多纹理 203
8.11  例子 203
8.11.1  使用Chromadepth过程 204
8.11.2  使用2D纹理图在表面中加入信息 204
8.11.3  环境纹理图 204
8.12  建议 205
8.13  代码实例 205
8.13.1  1D颜色渐变 205
8.13.2  2D纹理例子 206
8.13.3  环境纹理图 207
8.13.4  使用多纹理 207
8.14  小结 208
8.15  本章的OpenGL术语表 208
8.16  思考题 210
8.17  练习题 210
8.18  实验题 211
8.19  大型作业 212
第9章  图形在科学计算领域中的应用 213
9.1  简介 213
9.2  例子 215
9.3  扩散 215
9.3.1  长条材料中的温度 215
9.3.2  疾病的传播 217
9.4  函数作图和应用 218
9.5  参数曲线与曲面 219
9.6  极限处理结果的图形对象 222
9.7  标量场 223
9.8  物体和行为仿真 224
9.8.1  气体定律和扩散原理 225
9.8.2  分子显示 226
9.8.3  科学仪器 227
9.8.4  蒙特卡罗建模过程 227
9.9  四维作图 228
9.9.1  体数据 228
9.9.2  向量场 229
9.10  高维作图 230
9.11  数据驱动图形 231
9.12  代码实例 232
9.12.1  扩散 232
9.12.2  函数作图 233
9.12.3  参数曲线与曲面 234
9.12.4  极限处理 235
9.12.5  标量场 235
9.12.6  物体及行为的表示 235
9.12.7  分子显示 236
9.12.8  蒙特卡罗建模 237
9.12.9  四维作图 237
9.12.10  高维作图 238
9.13  小结 239
9.14  思考题 239
9.15  练习题 239
9.16  实验题 240
9.17  大型作业 240
第10章  绘制与绘制流水线 242
10.1  引言 242
10.2  流水线 242
10.3  光栅化处理 244
10.4  OpenGL的绘制流水线 248
10.4.1  绘制流水线中的纹理映射 249
10.4.2  逐片段操作 249
10.4.3  OpenGL与可编程着色器 250
10.4.4  图形卡绘制流水线实现的实例 251
10.5  图形卡的部分三维视图变换操作 251
10.6  小结 252
10.7  本章的OpenGL术语表 252
10.8  思考题 252
10.9  练习题 253
10.10  实验题 253
第11章  动力学和动画 254
11.1  一个例子 255
11.2  动画的分类 256
11.2.1  过程动画 256
11.2.2  场景图中的动画 256
11.2.3  插值动画 257
11.2.4  基于帧的动画 258
11.2.5  一个插值例子 259
11.3  动画中的一些问题 260
11.3.1  帧速率 260
11.3.2  时间走样 260
11.3.3  动画制作 261
11.4  动画和视觉交流 261
11.5  在静止帧中表示运动信息 262
11.5.1  运动轨迹法 262
11.5.2  运动模糊法 263
11.6  一些有趣的观看动画的设备 263
11.7  建议 265
11.8  OpenGL的动画例子 265
11.8.1  在模型中移动物体 265
11.8.2  控制动画的时间 266
11.8.3  移动模型的部件 266
11.8.4  移动视点或模型的观察标架 267
11.8.5  场景的纹理插值 268
11.8.6  改变模型的特征 268
11.8.7  生成轨迹 269
11.8.8  使用累积缓存 270
11.8.9  创建数字视频 271
11.9  用OpenGL制作动画时应
注意的一些要点 272
11.10  建议 272
11.11  本章的OpenGL术语表 272
11.12  思考题 273
11.13  练习题 273
11.14  实验题 273
11.15  大型作业 274
第12章  高性能图形技术 276
12.1  定义 276
12.2  技术 277
12.3  建模技术 277
12.3.1  减少可见多边形数量 277
12.3.2  巧妙运用纹理 278
12.3.3  减少光照计算 278
12.3.4  细节层次 278
12.3.5  雾化 280
12.3.6  开始距离和结束距离 280
12.3.7  雾化模式 280
12.3.8  雾密度 281
12.3.9  雾色 281
12.4  绘制技术 282
12.4.1  不使用硬件 282
12.4.2  使用硬件 282
12.4.3  多边形剔除 282
12.4.4  避免深度比较 283
12.4.5  从前到后绘制 284
12.4.6  二元空间划分 284
12.4.7  系统加速技术 285
12.5  碰撞检测 286
12.6  小结 287
12.7  本章的OpenGL术语表 287
12.8  思考题 288
12.9  练习题 288
12.10  实验题 289
12.11  大型作业 289
第13章  插值与样条建模 290
13.1  引言 290
13.1.1  插值 290
13.1.2  另一种B巣ier样条的基本概念 293
13.1.3  另一种B巣ier样条计算方法 293
13.1.4  扩展插值到更多控制点 293
13.2  样条曲面 295
13.2.1  扩展曲面片为曲面 295
13.2.2  生成曲面片法向 296
13.2.3  生成曲面片纹理坐标 296
13.2.4  另一种曲面片计算方法 296
13.3  其他类型的插值函数 297
13.4  OpenGL中的插值 297
13.4.1  使用求值器自动生成法向和纹理 298
13.4.2  其他技巧 299
13.5  定义 299
13.6  示例 300
13.6.1  样条曲线 300
13.6.2  样条曲面 301
13.7  小结 303
13.8  本章的OpenGL术语表 303
13.9  思考题 304
13.10  练习题 304
13.11  实验题 305
13.12  大型作业 305
第14章  非多边形图形技术 306
14.1  定义 306
14.2  光线投射 306
14.3  光线跟踪 308
14.4  体绘制 309
14.5  迭代函数系统 310
14.5.1  压缩映射 310
14.5.2  生成函数 311
14.6  芒德布罗集和茹利亚集 312
14.7  OpenGL支持的逐像素操作 313
14.8  小结 314
14.9  思考题 314
14.10  练习题 314
14.11  实验题 315
14.12  大型作业 315
第15章  硬拷贝 316
15.1  定义 316
15.2  选择输出媒介 316
15.2.1  数字图像 316
15.2.2  印刷 317
15.2.3  胶片 318
15.2.4  三维图像技术 319
15.2.5  三维对象成型技术 320
15.2.6  STL文件 321
15.2.7  视频 322
15.2.8  数字视频 323
15.3  支持硬拷贝的OpenGL技术 323
15.3.1  捕获输出窗口内容到文件 323
15.3.2  用OpenGL生成立体图 324
15.4  小结 325
15.5  本章的OpenGL术语表 325
15.6  思考题 325
15.7  实验题 325
参考文献和资源 327
附录 330
索引 335

教学资源推荐
参考读物推荐
作者: 华诚科技 编著
作者: Charles L. Phillips; John M. Parr; Eve A. Riskin
作者: 于中华,黄桂钦等
作者: 华诚科技 编著