交互式計算機圖形學

出版時間:2012-7  出版社:電子工業(yè)出版社  作者:(美) Edward Angel (美) Dave Shre  頁數(shù):760  
Tag標簽:無  

前言

  第六版新增內(nèi)容  ●全書使用基于著色器的新版本OpenGL  ●不再使用在OpenGL 3.1中所棄用的OpenGL函數(shù)  ●在OpenGL應(yīng)用程序代碼和著色器中均增加了實現(xiàn)變換和觀察的細節(jié)描述  ●保持與OpenGL ES 2.0和WebGL的一致性  ●用C++代替了C  ●增加了向量類和矩陣類以創(chuàng)建與OpenGL著色語言(GLSL)兼容的應(yīng)用程序代碼  ●討論了基于頂點的光照計算和基于片元的光照計算  ●增加了多邊形的三角細分和Delaunay三角剖分  ●介紹了體繪制  ●重新編寫了所有示例程序的代碼以適合OpenGL 3.1  ●增加了新合著者,《OpenGL編程指南》的作者Dave Shreiner  本書是計算機圖形學的入門教材,重點介紹應(yīng)用程序的編寫。本書于1997年首次出版,第一版在使用標準圖形庫和自頂向下的方法上多多少少是一場革命。在接下來的13年中,發(fā)行了5個版本,大多數(shù)計算機圖形學概論課以及幾乎所有的教科書都采用了本書的方法?! ≡谶^去的幾年中,圖形硬件的重大變化已經(jīng)導(dǎo)致了圖形軟件的重大變化。在OpenGL的前15年,新版本的發(fā)布一直保持向后兼容,基礎(chǔ)軟件的升級使代碼的可重用能力成為重要的優(yōu)點,應(yīng)用軟件的開發(fā)者和圖形學課程的教師都在受益。從所公布的OpenGL 3.0重大變化來看,其中一個關(guān)鍵的變化是從OpenGL 3.1開始,許多先前版本中最常見的函數(shù)將被廢棄。相對于先前版本的這一根本變化反映出需要使用最新的可編程圖形處理單元(GPU)的功能變化,這些變化也是OpenGL ES 2.0和WebGL的一部分,OpenGL ES 2.0用于開發(fā)手機和圖形輸入板等移動終端設(shè)備的應(yīng)用軟件,而WebGL支持大多數(shù)最新的瀏覽器?! 【拖癖緯郧?個版本的作者(Edward Angel)以及《OpenGL編程指南》和《OpenGL ES 2.0編程指南》的作者(Dave Shreiner)一樣,我們面臨著如何反映這些變化的難題。我們撰寫了多部書籍并在ACM SIGGRAPH中多年從事OpenGL導(dǎo)論課程的教學,我們發(fā)現(xiàn)在高等教育界或高端游戲領(lǐng)域之外的應(yīng)用程序編程人員,幾乎沒有人了解這些變化,知道這些變化的人并不認為我們可以在初級層次教會這些概念。這曾是一個我們不能抗拒的挑戰(zhàn),在SIGGRAPH的課程教學中,我們從半天的短期課程開始,這使我們確信可以教會以前沒有圖形編程經(jīng)驗的人如何編寫一個基于著色器的實用程序,只不過比早期版本的OpenGL多一點點工作而已?! ≡诰帉戇@一版的時候,我們找到了一些其他理由,這使我們確信這種教學方法不僅是可能的,而且對學生學習計算機圖形學甚至更好。就在不久前,我們宣講了OpenGL帶來的優(yōu)勢,它適用于Windows、Linux 以及Mac OS X,這樣就可以講授一門讓學生在喜愛的操作系統(tǒng)環(huán)境中編程的課程。學生們現(xiàn)在可以用OpenGL ES和WebGL開發(fā)手機和Web瀏覽器上的應(yīng)用軟件,這將激勵學習計算機圖形學的學生和教師,并開辟許多新的教育和商業(yè)機會?! ∥覀冋J為對于學習經(jīng)驗來說尤為重要的是,讀者應(yīng)該知道在這些OpenGL的新版本中棄用了先前版本中的大部分默認函數(shù)以及固定功能的繪制流水線。乍看起來,這種棄用機制似乎使第一節(jié)課程的教學更加困難,也可能稍微困難些,但是我們認為會更好。因為大多數(shù)學生過于依賴這些函數(shù),而并不太在意課本或教師要講授給他們什么。為什么當學生使用繪制透視投影圖或執(zhí)行光照計算的OpenGL內(nèi)置函數(shù)就感到畏懼呢?現(xiàn)在,這些函數(shù)沒有了,學生們不得不自己編寫著色器來完成這些任務(wù),這樣他們就必須首先理解計算機圖形學的基本原理和相關(guān)的數(shù)學基礎(chǔ)。  自頂向下的方法  圖形學的新進展以及本書前5個版本的成功一直鞭策著我們堅持采用自頂向下的、面向程序設(shè)計的方法來介紹計算機圖形學。雖然許多計算機科學與工程系現(xiàn)在開設(shè)了多門計算機圖形學課程,但是大多數(shù)學生只選修一門。在學生們學習了程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、算法、軟件工程和基礎(chǔ)數(shù)學以后給他們安排一門圖形學課程,應(yīng)允許教師以內(nèi)容充實并且有趣的方式按上述已學課程來組織計算機圖形學課程,我們希望這些學生學習這門課程時盡可能早地編寫出三維應(yīng)用程序。底層的算法,例如繪制線段或者填充多邊形,可以在學生們編寫了圖形程序之后再考慮?! ∮嬎銠C教育的先驅(qū)John Kemeny曾經(jīng)把自頂向下的編程方法與我們熟悉的汽車來類比:你沒有必要知道汽車罩下面是什么,但是如果知道內(nèi)部的工作原理,你就會去駕駛汽車而不是坐在汽車后座上。同樣的類比適用于講授計算機圖形學的方法。第一種方法(算法的方法)是把汽車工作原理的方方面面都交代清楚:發(fā)動機、傳動裝置、燃燒過程等;第二種方法(概覽的方法)是雇一名司機,自己坐在后面觀光;第三種方法(本書采用的編程方法)是教會你如何駕駛并把車開到你想要去的地方,正如一句過時的租賃廣告詞說的那樣:“讓我們把你放在駕駛員的位子上去”?! ∈褂肙penGL和C++語言編程  當本書的第一作者Edward Angel在25年前開始講授計算機圖形學的時候,當時以面向編程的方式講授這門課程并編寫相應(yīng)教材的最大障礙是缺乏一個廣泛接受的圖形庫或者應(yīng)用程序編程接口(API)。遇到的困難包括:高成本、可用性受限、缺乏通用性以及高復(fù)雜性。OpenGL的開發(fā)解決了我們中很多人在其他API(例如GKS和PHIGS)中遇到的以及在使用自己編寫的軟件作為替代時所面臨的大多數(shù)困難,今天所有的平臺都支持OpenGL,它已和Microsoft Windows以及Mac OS X操作系統(tǒng)集成在一起。實際上所有的圖形卡都有驅(qū)動程序,在大多數(shù)Linux發(fā)行版中也都包含一個稱為Mesa的OpenGL API?! ∫婚T圖形學的課程遠遠不能僅講授如何使用一種特定的API,一種好的API應(yīng)使得講授圖形學中的一些關(guān)鍵內(nèi)容變得更容易,這些內(nèi)容包括三維圖形學、光照和明暗處理、客戶/服務(wù)器圖形系統(tǒng)、建模以及實現(xiàn)算法。我們相信,OpenGL的擴展功能以及良好定義的結(jié)構(gòu)可以為講授圖形學理論和實踐這兩方面提供了更好的基礎(chǔ),而且OpenGL同樣也可以為講授包括紋理映射、圖像融合以及可編程著色器在內(nèi)的一些高級概念提供更好的基礎(chǔ)?! 〈蠹s15年以前Edward Angel就開始在授課時使用OpenGL,結(jié)果令他欣喜若狂。在那個學期的期中之前,所有的學生就都能編寫出中等復(fù)雜程度的三維圖形程序,而編寫這樣的程序需要理解三維顯示和事件驅(qū)動輸入。在這之前幾年的計算機圖形學教學中,Edward Angel從未收到過如此好的教學效果,那次課程孕育出了本書的第一版?! ”緯顷P(guān)于計算機圖形學的教科書,并不是OpenGL使用手冊。因此,沒有把OpenGL API的方方面面都一一介紹,而是僅僅解釋了對于掌握本書內(nèi)容來說必要的那些部分。因而,本書在介紹OpenGL時的定位是允許其他API用戶毫無困難地閱讀本書的內(nèi)容。  與前幾個版本相比,這一版使用C++代替C語言作為占主導(dǎo)地位的編程語言,主要原因是必須用OpenGL著色語言(GLSL)來編寫著色器,而著色器是控制GPU的程序。GLSL是一個類似于C的語言,包括向量和矩陣的原子數(shù)據(jù)類型,以及操作它們的基本運算符的重載。OpenGL的所有現(xiàn)代版本要求每一個應(yīng)用程序提供兩個著色器,因此學生需要使用這些特征,它們可以支持C++。只通過使用C++的這部分(簡單類、構(gòu)造函數(shù)、重載操作符)內(nèi)容,我們就可以實現(xiàn)基本圖形概念,如變換和光照,無論是OpenGL應(yīng)用程序還是著色器幾乎都是完全相同的代碼。此外,使用本書網(wǎng)站提供的簡單矩陣類和向量類可以編寫出更加清晰、簡潔的代碼。學習Java或C語言的學生理解本書中的代碼應(yīng)該沒什么困難?! ∵m用的讀者  本書適用于計算機科學和工程專業(yè)的高年級本科生和一年級研究生,以及具有良好程序設(shè)計能力的其他專業(yè)學生。本書對于許多專業(yè)人員也是有價值的。我們已經(jīng)成功地為專業(yè)人員講授了100多次短期課程,從這些非傳統(tǒng)意義的學生身上獲得的經(jīng)驗極大地影響了本書的內(nèi)容?! ≡陂喿x本書之前,讀者應(yīng)該熟練掌握C++、Java或者C語言,理解鏈表和樹等基本數(shù)據(jù)結(jié)構(gòu)并具有線性代數(shù)和三角學的初步知識。我們發(fā)現(xiàn)計算機科學專業(yè)學生的數(shù)學背景相差很大,不管是本科生還是研究生都是如此。因此,本書包含了很多計算機基礎(chǔ)圖形學所需的線性代數(shù)和幾何學知識?! ”緯膬?nèi)容組織  本書內(nèi)容組織如下:第l章概覽整個圖形學領(lǐng)域并介紹了基于光學設(shè)備的圖像生成,這樣從一開始就引入了三維圖形學的概念。第2章介紹OpenGL編程,雖然編寫的第一個示例程序是二維的(每一章都有一個或者多個完整的編程示例),但是這個程序是嵌入在三維環(huán)境下編寫的,并且可以擴展到三維。這一章還介紹交互式圖形學以及基于事件驅(qū)動的圖形程序開發(fā)。第3章和第4章討論三維圖形學概念,第3章討論如何定義和處理三維對象,而第4章討論如何觀察它們。第5章介紹光線和材質(zhì)之間的相互作用以及明暗繪制。這5章應(yīng)該按順序講授,在一個總共15周的學期里,大約10周可以講完這些內(nèi)容?! 『竺娴?章可以按照任何順序閱讀。所有這6章都或多或少是開放式的,讀者可以概覽,也可以深究其中的一些課題。第6章討論光柵化,對三維圖形繪制流水線中的每個基本步驟都給出了一種或兩種主要算法,這些基本步驟包括裁剪、直線段生成和多邊形填充。第7章介紹目前圖形硬件和OpenGL所支持的許多新的離散技術(shù),所有這些技術(shù)都需要與各種緩存打交道,這一章以簡單討論計算機圖形學中的走樣問題而結(jié)束。第6章和第7章討論了用于所有交互式圖形系統(tǒng)的標準觀察流水線?! 〉?章包含層級建模主題中的若干松散內(nèi)容,涉及從層級模型(封裝了各部分之間聯(lián)系的模型)的構(gòu)造到互聯(lián)網(wǎng)圖形繪制的高級方法。這一章包括對場景圖和開放場景圖(OSG)的介紹。第9章介紹若干過程方法,包括粒子系統(tǒng)、分形和過程噪聲。第10章討論曲線和曲面,包括細分曲面。第11章介紹其他一些高繪制方法,進一步討論了光線

內(nèi)容概要

  《國外計算機科學教材系列:交互式計算機圖形學·基于OpenGL著色器的自頂向下方法(第6版)(英文版)》采用自頂向下的方法并輔以面向編程的方式,基于現(xiàn)代可編程GPU的著色器編程,使用C++語言、OpenGL著色語言(GLSL)并結(jié)合OpenGL系統(tǒng)地介紹了現(xiàn)代計算機圖形學的核心概念、原理和方法。本書是作者多年來教學與科研工作的總結(jié),涵蓋了基于OpenGL著色器的交互式圖形編程、三維可編程繪制流水線、變換與觀察、光照與明暗繪制、曲線曲面建模等基本的計算機圖形學內(nèi)容以及離散技術(shù)、層級建模、過程建模、光線跟蹤、并行繪制和體繪制等高級內(nèi)容,并為讀者進一步深入學習和研究,在每章后面提供了相關(guān)的建議閱讀資料?!  秶庥嬎銠C科學教材系列:交互式計算機圖形學·基于OpenGL著色器的自頂向下方法(第6版)(英文版)》第六版進一步反映了計算機圖形學的最新發(fā)展現(xiàn)狀,面向圖形應(yīng)用開發(fā)并輔以大量的示例和完整的源代碼,是一本“基礎(chǔ)性與先進性、理論性與應(yīng)用性、科學性與通俗性”相結(jié)合的內(nèi)容全面而又系統(tǒng)的國外經(jīng)典計算機圖形學教材。

書籍目錄

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

章節(jié)摘錄

版權(quán)頁:   插圖:   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著色器的自頂向下方法(第6版)(英文版)》第六版進一步反映了計算機圖形學的最新發(fā)展現(xiàn)狀,面向圖形應(yīng)用開發(fā)并輔以大量的示例和完整的源代碼,是一本“基礎(chǔ)性與先進性、理論性與應(yīng)用性、科學性與通俗性”相結(jié)合的內(nèi)容全面而又系統(tǒng)的國外經(jīng)典計算機圖形學教材。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    交互式計算機圖形學 PDF格式下載


用戶評論 (總計3條)

 
 

  •   英文版,上課教材,非常好!
  •   內(nèi)容寫的很好,書的紙張很薄。
  •   內(nèi)容安排與第五版基本一致。雖然用C++代替了C,但C++的特點似乎不是特別明顯。輔助資料的獲取也比較方便。價格比實體書店便宜很多。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7