交互式计算机图形学

当前位置:首页 > 计算机网络 > 图形图像多媒体 > 交互式计算机图形学

出版社:电子工业出版社
出版日期:2012-7
ISBN:9787121177095
页数:760页

章节摘录

版权页:   插图:   If primitives are the what of an API-the primitive objects that can be displayed-then attributes are the how.That is,the attributes govern the way that a primitive appears on the display.Attribute functions allow us to perform operations ranging from choosing the color with which we display a line segment,to picking apattern with which to fill the inside of a polygon,to selecting a typeface for the titles on a graph.In OpenGL,we can set colors by passing the information from the application to the shader or by having a shader compute a color,for example,through a lighting model that uses data specifying light sources and properties of the surfaces in our model. Our synthetic camera must be described if we are to create an image. As we saw in Chapter I,we must describe the camera's position and orientation in our world and must select the equivalent of a lens.This process will not only fix the view but also allow us to clip out objects that are too close or too far away.The viewing functionsallow us to specify various views,although APIs differ in the degree of flexibility they provide in choosing a view.OpenGL doesnot provide any viewing functions but relies on the use of transformations in the shaders to provide the desired view. One of the characteristics of a good API is that it provides the user with a set of transformation functions that allows her to carry out transformations of objects,such as rotation,translation,and scaling.Our developments of viewing in Chapter 4 and of modeling in Chapter 8 will make heavy use of matrix transformations.In OpenGL,we carry out transformations by forming transformations in our applications and then applying them either in the application or in the shaders. For interactive applications, an API must provide a set of input functions to allow us to deal with the diverse forms of input that characterize modern graphics systems.We need functions to deal with devices such as keyboards,mice,and data tablets.Later in this chapter,we will introduce functions for working with different input modes and with a variety of input devices. In any real application,we also have to worry about handling the complexities of working in a multiprocessing,multiwindow environment-usually an environment where we are connected to a network and there are other users.The control functions enable us to communicate with the window system,to initialize our programs,and to deal with any errors that take place during the execution of our programs.

前言

  第六版新增内容  ●全书使用基于着色器的新版本OpenGL  ●不再使用在OpenGL 3.1中所弃用的OpenGL函数  ●在OpenGL应用程序代码和着色器中均增加了实现变换和观察的细节描述  ●保持与OpenGL ES 2.0和WebGL的一致性  ●用C++代替了C  ●增加了向量类和矩阵类以创建与OpenGL着色语言(GLSL)兼容的应用程序代码  ●讨论了基于顶点的光照计算和基于片元的光照计算  ●增加了多边形的三角细分和Delaunay三角剖分  ●介绍了体绘制  ●重新编写了所有示例程序的代码以适合OpenGL 3.1  ●增加了新合著者,《OpenGL编程指南》的作者Dave Shreiner  本书是计算机图形学的入门教材,重点介绍应用程序的编写。本书于1997年首次出版,第一版在使用标准图形库和自顶向下的方法上多多少少是一场革命。在接下来的13年中,发行了5个版本,大多数计算机图形学概论课以及几乎所有的教科书都采用了本书的方法。  在过去的几年中,图形硬件的重大变化已经导致了图形软件的重大变化。在OpenGL的前15年,新版本的发布一直保持向后兼容,基础软件的升级使代码的可重用能力成为重要的优点,应用软件的开发者和图形学课程的教师都在受益。从所公布的OpenGL 3.0重大变化来看,其中一个关键的变化是从OpenGL 3.1开始,许多先前版本中最常见的函数将被废弃。相对于先前版本的这一根本变化反映出需要使用最新的可编程图形处理单元(GPU)的功能变化,这些变化也是OpenGL ES 2.0和WebGL的一部分,OpenGL ES 2.0用于开发手机和图形输入板等移动终端设备的应用软件,而WebGL支持大多数最新的浏览器。  就像本书以前5个版本的作者(Edward Angel)以及《OpenGL编程指南》和《OpenGL ES 2.0编程指南》的作者(Dave Shreiner)一样,我们面临着如何反映这些变化的难题。我们撰写了多部书籍并在ACM SIGGRAPH中多年从事OpenGL导论课程的教学,我们发现在高等教育界或高端游戏领域之外的应用程序编程人员,几乎没有人了解这些变化,知道这些变化的人并不认为我们可以在初级层次教会这些概念。这曾是一个我们不能抗拒的挑战,在SIGGRAPH的课程教学中,我们从半天的短期课程开始,这使我们确信可以教会以前没有图形编程经验的人如何编写一个基于着色器的实用程序,只不过比早期版本的OpenGL多一点点工作而已。  在编写这一版的时候,我们找到了一些其他理由,这使我们确信这种教学方法不仅是可能的,而且对学生学习计算机图形学甚至更好。就在不久前,我们宣讲了OpenGL带来的优势,它适用于Windows、Linux 以及Mac OS X,这样就可以讲授一门让学生在喜爱的操作系统环境中编程的课程。学生们现在可以用OpenGL ES和WebGL开发手机和Web浏览器上的应用软件,这将激励学习计算机图形学的学生和教师,并开辟许多新的教育和商业机会。  我们认为对于学习经验来说尤为重要的是,读者应该知道在这些OpenGL的新版本中弃用了先前版本中的大部分默认函数以及固定功能的绘制流水线。乍看起来,这种弃用机制似乎使第一节课程的教学更加困难,也可能稍微困难些,但是我们认为会更好。因为大多数学生过于依赖这些函数,而并不太在意课本或教师要讲授给他们什么。为什么当学生使用绘制透视投影图或执行光照计算的OpenGL内置函数就感到畏惧呢?现在,这些函数没有了,学生们不得不自己编写着色器来完成这些任务,这样他们就必须首先理解计算机图形学的基本原理和相关的数学基础。  自顶向下的方法  图形学的新进展以及本书前5个版本的成功一直鞭策着我们坚持采用自顶向下的、面向程序设计的方法来介绍计算机图形学。虽然许多计算机科学与工程系现在开设了多门计算机图形学课程,但是大多数学生只选修一门。在学生们学习了程序设计、数据结构、算法、软件工程和基础数学以后给他们安排一门图形学课程,应允许教师以内容充实并且有趣的方式按上述已学课程来组织计算机图形学课程,我们希望这些学生学习这门课程时尽可能早地编写出三维应用程序。底层的算法,例如绘制线段或者填充多边形,可以在学生们编写了图形程序之后再考虑。  计算机教育的先驱John Kemeny曾经把自顶向下的编程方法与我们熟悉的汽车来类比:你没有必要知道汽车罩下面是什么,但是如果知道内部的工作原理,你就会去驾驶汽车而不是坐在汽车后座上。同样的类比适用于讲授计算机图形学的方法。第一种方法(算法的方法)是把汽车工作原理的方方面面都交代清楚:发动机、传动装置、燃烧过程等;第二种方法(概览的方法)是雇一名司机,自己坐在后面观光;第三种方法(本书采用的编程方法)是教会你如何驾驶并把车开到你想要去的地方,正如一句过时的租赁广告词说的那样:“让我们把你放在驾驶员的位子上去”。  使用OpenGL和C++语言编程  当本书的第一作者Edward Angel在25年前开始讲授计算机图形学的时候,当时以面向编程的方式讲授这门课程并编写相应教材的最大障碍是缺乏一个广泛接受的图形库或者应用程序编程接口(API)。遇到的困难包括:高成本、可用性受限、缺乏通用性以及高复杂性。OpenGL的开发解决了我们中很多人在其他API(例如GKS和PHIGS)中遇到的以及在使用自己编写的软件作为替代时所面临的大多数困难,今天所有的平台都支持OpenGL,它已和Microsoft Windows以及Mac OS X操作系统集成在一起。实际上所有的图形卡都有驱动程序,在大多数Linux发行版中也都包含一个称为Mesa的OpenGL API。  一门图形学的课程远远不能仅讲授如何使用一种特定的API,一种好的API应使得讲授图形学中的一些关键内容变得更容易,这些内容包括三维图形学、光照和明暗处理、客户/服务器图形系统、建模以及实现算法。我们相信,OpenGL的扩展功能以及良好定义的结构可以为讲授图形学理论和实践这两方面提供了更好的基础,而且OpenGL同样也可以为讲授包括纹理映射、图像融合以及可编程着色器在内的一些高级概念提供更好的基础。  大约15年以前Edward Angel就开始在授课时使用OpenGL,结果令他欣喜若狂。在那个学期的期中之前,所有的学生就都能编写出中等复杂程度的三维图形程序,而编写这样的程序需要理解三维显示和事件驱动输入。在这之前几年的计算机图形学教学中,Edward Angel从未收到过如此好的教学效果,那次课程孕育出了本书的第一版。  本书是关于计算机图形学的教科书,并不是OpenGL使用手册。因此,没有把OpenGL API的方方面面都一一介绍,而是仅仅解释了对于掌握本书内容来说必要的那些部分。因而,本书在介绍OpenGL时的定位是允许其他API用户毫无困难地阅读本书的内容。  与前几个版本相比,这一版使用C++代替C语言作为占主导地位的编程语言,主要原因是必须用OpenGL着色语言(GLSL)来编写着色器,而着色器是控制GPU的程序。GLSL是一个类似于C的语言,包括向量和矩阵的原子数据类型,以及操作它们的基本运算符的重载。OpenGL的所有现代版本要求每一个应用程序提供两个着色器,因此学生需要使用这些特征,它们可以支持C++。只通过使用C++的这部分(简单类、构造函数、重载操作符)内容,我们就可以实现基本图形概念,如变换和光照,无论是OpenGL应用程序还是着色器几乎都是完全相同的代码。此外,使用本书网站提供的简单矩阵类和向量类可以编写出更加清晰、简洁的代码。学习Java或C语言的学生理解本书中的代码应该没什么困难。  适用的读者  本书适用于计算机科学和工程专业的高年级本科生和一年级研究生,以及具有良好程序设计能力的其他专业学生。本书对于许多专业人员也是有价值的。我们已经成功地为专业人员讲授了100多次短期课程,从这些非传统意义的学生身上获得的经验极大地影响了本书的内容。  在阅读本书之前,读者应该熟练掌握C++、Java或者C语言,理解链表和树等基本数据结构并具有线性代数和三角学的初步知识。我们发现计算机科学专业学生的数学背景相差很大,不管是本科生还是研究生都是如此。因此,本书包含了很多计算机基础图形学所需的线性代数和几何学知识。  本书的内容组织  本书内容组织如下:第l章概览整个图形学领域并介绍了基于光学设备的图像生成,这样从一开始就引入了三维图形学的概念。第2章介绍OpenGL编程,虽然编写的第一个示例程序是二维的(每一章都有一个或者多个完整的编程示例),但是这个程序是嵌入在三维环境下编写的,并且可以扩展到三维。这一章还介绍交互式图形学以及基于事件驱动的图形程序开发。第3章和第4章讨论三维图形学概念,第3章讨论如何定义和处理三维对象,而第4章讨论如何观察它们。第5章介绍光线和材质之间的相互作用以及明暗绘制。这5章应该按顺序讲授,在一个总共15周的学期里,大约10周可以讲完这些内容。  后面的6章可以按照任何顺序阅读。所有这6章都或多或少是开放式的,读者可以概览,也可以深究其中的一些课题。第6章讨论光栅化,对三维图形绘制流水线中的每个基本步骤都给出了一种或两种主要算法,这些基本步骤包括裁剪、直线段生成和多边形填充。第7章介绍目前图形硬件和OpenGL所支持的许多新的离散技术,所有这些技术都需要与各种缓存打交道,这一章以简单讨论计算机图形学中的走样问题而结束。第6章和第7章讨论了用于所有交互式图形系统的标准观察流水线。  第8章包含层级建模主题中的若干松散内容,涉及从层级模型(封装了各部分之间联系的模型)的构造到互联网图形绘制的高级方法。这一章包括对场景图和开放场景图(OSG)的介绍。第9章介绍若干过程方法,包括粒子系统、分形和过程噪声。第10章讨论曲线和曲面,包括细分曲面。第11章介绍其他一些高绘制方法,进一步讨论了光线

书籍目录

CHAPTER GRAPHICS SYSTEiVtS AND MODELS 31 1.1 Applications of Computer Graphics 32 1.1.1 Display of Information 32 1.1.2 Design 33 1.1.3 S3mulation and Animation 33 1.1.4 User Interfaces 34 1.2 A Graphics System 35 1.2.1 Pixels and the Frame Buffer 35 1.2.2 The CPU and the GPU 36 1.2.3 Output Devices 37 1.2.4 Input Devices 39 1.2.5 Physical Input Devices 40 1.2.6 Logical Devices 42 1.2.7 Input Modes 43 1.3 Images: Physical and Synthetic 45 1.3.1 Objects and Viewers 45 1.3.2 Light and Images 46 1.3.3 Imaging Models 48 1.4 Imaging Systems 50 1.4.1 The Pinhole Camera 50 1.4.2 The Human Visual System 52 1.5 The Synthetic-Camera Model 53 1.6 The Programmer's Interface 55 1.6.1 The Pen-Plotter Model 57 1.6.2 Three-Dimensional APIs 58 1.6.3 A Sequence Of Images 61 1.6.4 The Modeling-Rendering Paradigm 62 1.7 Graphics Architectures 64 1.7.1 Display Processors 64 1.7.2 Pipeline Architectures 64 1.7.3 The Graphics Pipeline 65 1.7.4 Vertex Processing 66 1.7.5 Clipping and Primitive Assembly 66 1.7.6 Rasterization 67 1.7.7 Fragment Processing 67  1.8 Programmable Pipeline 67s 1,9 Performance Characteristics 68 Summary and Notes 69 Suggested Readings 70 Exercises 71 CHAPTER 2 GRAPHICS PROGRAMMING 2.1 The Sierpinski Gasket 73 2.2 Programming Two-Dimensional Applications 76 2.3 The OpenGL Application Programming Interface 80 2.3.1 Graphics Functions 81 2.3.2 The Graphics Pipeline and State Machines 83 2.3.3 The OpenGL Interface 83 2.3.4 Coordinate Systems 85 2.4 Primitives and Attributes 86 2.4.1 Polygon Basics 88 2.4.2 Polygons in OpenGL 89 2.4.3 Approximating a Sphere 90 2.4.4 Triangulation 92 2.4.5 Text 94 2.4.6 Curved Objects 95 2.4.7 Attributes 95 2.5 Color 97 2.5.1 RGB Color 99 2.5.2 Indexed Color 101 2.5.3 Setting of Color Attributes 102 2.6 Viewing 103 2.6.1 The Orthographic View 104 2.6.2 Two-Dimensional Viewing 107 2.7 Control Functions 108 2.7.1 Interaction with the Window System 108 2.7.2 Aspect Ratio and Viewports 109 2.7.3 The main,display,and init Functions 110 2.7.4 Program Structure 113 2.8 The Gasket Program 113 2.8.1 Rendering the Points 114 2.8.2 The Vertex Shader 115 2.8.3 The Fragment Shader 116 2.8.4 Combining the Parts 116 2.8.5 The initShacter Function 116 2.9 Polygons and Recursion 118 2.10 The Three-Dimensional Gasket 121 2.10.1 Use of Three-Dimensiohal Points 121 2.10.2 Use of Polygons in Three Dimensions 122 2.10.3 Hidden-Surface Removal 125 2.11 Adding Interaction 128 2.11.1 Using the Pointing Device 128 2.11.2 Window Events 131 2.11.3 Keyboard Events 132 2.11.4 The Idle Callback 133 2.11.5 Double Buffering 135 2.11.6 Window Management 136 2.12 Menus 136 Summary and Notes 138 Suggested Readings 139 Exercises 140 CHAPTER 3 GEOMETRIC OBJECTS AND TRANSFORMATIONS 145 3.1 Scalars, Points, and Vectors 146 3.1.1 Geometric Objects 146 3.1.2 Coordinate-Free Geometry 147 3.1.3 The Mathematical View: Vector and Affine Spaces 148 3.1.4 The Computer Science View 149 3.1.5 Geometric ADTs 149 3.1.6 Lines 150 3.1.7 Affine Sums 151 3.1.8 Convexity 152 3.1.9 Dot and Cross Products 152 3.1.10 Planes 153 3.2 Three-Dimensional Primitives 155 3.3 Coordinate Systems and Frames 156 3.3.1 Representations and N-Tuples 158 3.3.2 Change of Coordinate Systems 159 3.3.3 Example Change of Representation 162 …… CHAPTER 4 VIEWING CHAPTER 5 LISHTING AND SHADING CHAPTER 6 FROM VERTICES TO FRAGMENTS CHAPTER 7 DISCRETE TECHNIQUES CHAPTER 8 MODELING AND HIERARCHY CHAPTER 9 PROCEDURAL METHODS CHAPTER 10 CURVES AND SURFACES CHAPTER 11 ADVANCED REDERING APPENIX A SAMPLE PROGRAMS APPENIX B SPACER APPENIX C MATRICES APPENIX D SYNOPSIS OF OPENGL FUNCTIONS

编辑推荐

《国外计算机科学教材系列:交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第6版)(英文版)》第六版进一步反映了计算机图形学的最新发展现状,面向图形应用开发并辅以大量的示例和完整的源代码,是一本“基础性与先进性、理论性与应用性、科学性与通俗性”相结合的内容全面而又系统的国外经典计算机图形学教材。

作者简介

《国外计算机科学教材系列:交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第6版)(英文版)》采用自顶向下的方法并辅以面向编程的方式,基于现代可编程GPU的着色器编程,使用C++语言、OpenGL着色语言(GLSL)并结合OpenGL系统地介绍了现代计算机图形学的核心概念、原理和方法。《国外计算机科学教材系列:交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第6版)(英文版)》是作者多年来教学与科研工作的总结,涵盖了基于OpenGL着色器的交互式图形编程、三维可编程绘制流水线、变换与观察、光照与明暗绘制、曲线曲面建模等基本的计算机图形学内容以及离散技术、层级建模、过程建模、光线跟踪、并行绘制和体绘制等高级内容,并为读者进一步深入学习和研究,在每章后面提供了相关的建议阅读资料。

图书封面


 交互式计算机图形学下载



发布书评

 
 


精彩短评 (总计3条)

  •     内容写的很好,书的纸张很薄。
  •     内容安排与第五版基本一致。虽然用C++代替了C,但C++的特点似乎不是特别明显。辅助资料的获取也比较方便。价格比实体书店便宜很多。
  •     英文版,上课教材,非常好!
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024