出版時間:2009-2 出版社:清華大學(xué)出版社 作者:Francis S Hill, Jr. 頁數(shù):706 譯者:胡事民,劉利剛
Tag標(biāo)簽:無
前言
本書原著在國外是很有影響力的教材,被許多國外著名的大學(xué)所采用。譯者在盡量保持原書精髓的基礎(chǔ)上,對原書做了一些表述上的調(diào)整,以符合中文習(xí)慣,原書中的一些筆誤,也給予了糾正。本書譯者中,胡事民、劉永進(jìn)、張松海來自清華大學(xué)計算機(jī)科學(xué)與技術(shù)系,劉利剛來自浙江大學(xué)數(shù)學(xué)系,均在第一線從事計算機(jī)圖形學(xué)的教學(xué)和科研工作。在本書的翻譯中,胡事民教授負(fù)責(zé)第1、2、8章,劉利剛副教授負(fù)責(zé)10、11、12章,劉永進(jìn)副教授負(fù)責(zé)5、6、7章,張松海博士負(fù)責(zé)3、4、9章。經(jīng)過一年多的努力,本書終于完成翻譯,并付印。在翻譯過程中,得到了許多同事和學(xué)生的幫助,研究生徐昆、高岳、李勇、張硯、雷勵星、陳韜、張一飛、藏域、程明明、來煜坤、勒力、楊永亮、張國鑫、王王禹屏、邊哲、佟強(qiáng)、白石、沈超慧、盧少平、陳中貴、陳仁杰、陳軍、胡建偉、孟敏、張冬梅等參與翻譯了部分初稿,在此一并表示感謝。 由于譯者水平有限,本書翻譯過程中難有疏漏和不妥之處,敬請讀者批評和指正。前 言 對于有志于學(xué)習(xí)計算機(jī)圖形學(xué)基本原理和技術(shù),并且渴望自己能夠編寫優(yōu)質(zhì)圖形學(xué)程序的讀者,本書為他們提供了入門的詳細(xì)介紹。計算機(jī)圖形學(xué)具有強(qiáng)大的生命力并正在持續(xù)發(fā)展。動畫電影已經(jīng)展示給人們圖形學(xué)知識所能做到的令人激動的視覺效果。電腦游戲和因特網(wǎng)中的圖形效果同樣激勵人們?nèi)W(xué)習(xí)如何自己動手做出這樣的效果?! D形軟硬件系統(tǒng)正在以驚人的速度朝著更好、更快和更廉價的方向發(fā)展。每年從研究和業(yè)界中提出的大量新技術(shù)不斷地涌現(xiàn)。然而,圖形學(xué)最基本的原理和方法,卻保持著穩(wěn)定和連貫,并且這些知識中的大部分可以通過一個圖形學(xué)課程學(xué)習(xí)得到。本書將圖形學(xué)的一些基本思想和方法組織起來,通過閱讀使讀者從只會編寫簡單程序的水平,提高到能夠自行設(shè)計并編寫出優(yōu)良圖形學(xué)程序的水平。 適用的讀者范圍 該書被設(shè)定為本科高年級或研究生一年級的一個或兩個學(xué)期的課程教材。該書也可用于自學(xué)。該書的主要對象是專業(yè)為計算機(jī)科學(xué)或計算機(jī)工程的學(xué)生,當(dāng)然也適用于其他專業(yè)如物理和數(shù)學(xué)的學(xué)生?! ?shù)學(xué)基礎(chǔ)的要求 讀者應(yīng)該具備相當(dāng)于大學(xué)一年級的數(shù)學(xué)水平;并具備初等代數(shù)、幾何、三角函數(shù)和初等微積分的基本知識。向量和矩陣的有關(guān)知識將有助于本書的閱讀,但不是必須的。本書在相關(guān)章節(jié)中介紹了向量和矩陣的基本知識,同時,附錄中總結(jié)了向量和矩陣的關(guān)鍵概念?! ∮嬎銠C(jī)圖形學(xué)中使用了大量的數(shù)學(xué)符號來表達(dá)線、面和視點(diǎn)之間的基本幾何關(guān)系。雖然每個數(shù)學(xué)符號都很容易理解,但所需的符號數(shù)量卻令人生畏。書中特別強(qiáng)調(diào)了使用每種符號或技術(shù)的原因,以及如何利用這些數(shù)學(xué)符號合理地描述圖形程序中感興趣的對象。 對編程水平的要求 一般情況下,讀者應(yīng)具有至少一個學(xué)期使用C、C++或Java編寫程序的經(jīng)驗。相當(dāng)多有關(guān)圖形的編程涉及到將幾何關(guān)系直接轉(zhuǎn)換為代碼,包括使用變量、函數(shù)、數(shù)組、循環(huán)和條件測試等,而這些東西在不同編程語言中都是類似的。本書使用的編程語言是C++,但是,有C語言背景的讀者可以輕易地讀懂大部分材料?! ∽x者如果熟練掌握C中的結(jié)構(gòu)或C++中的類,將非常有助于本書的閱讀。如用于描述復(fù)雜場景的圖形對象結(jié)構(gòu),這些場景(如一個城堡或一架飛機(jī))可能由許多部分組成,而這些部分本身又由復(fù)雜的更小部分組成。如果能熟練使用鏈表或樹結(jié)構(gòu)也會有一些幫助,但不是必須的?! τ谥欢肅但不懂得C++的讀者來說,需要掌握面向?qū)ο蟮木幊汤砟睢1緯卸x了許多有用的類(如網(wǎng)格、場景、相機(jī)和紋理等類),并且說明了這些類為什么方便易用。在某些場合下,為了使程序更加清晰易讀,我們使用了面向?qū)ο缶幊讨械囊恍┘夹g(shù),如繼承和多態(tài),不過,我們并不過分強(qiáng)調(diào)面向?qū)ο蟮姆椒ā! ∮嬎銠C(jī)圖形學(xué) (OpenGL版)(第3版)前言教學(xué)理念 第3版與前兩版相比,幾乎被完全重新組織和改寫,但是基本的教學(xué)理念沒有改變: 我們堅信計算機(jī)圖形學(xué)是在實際使用中學(xué)習(xí)到的,一定要動手編寫程序并進(jìn)行測試,才能真正地掌握計算機(jī)圖形學(xué)。本書的一個主要目標(biāo)就是讓讀者懂得如何將一個特定的設(shè)計任務(wù)轉(zhuǎn)換成相應(yīng)的幾何結(jié)構(gòu),并找到一個合適的數(shù)學(xué)表達(dá),最后將這個表達(dá)轉(zhuǎn)換為算法和程序代碼。本書將以循序漸進(jìn)的方式讓讀者首先學(xué)習(xí)到如何編寫簡單的程序來繪制簡單的圖像,然后一步一步深入地掌握如何生成更加復(fù)雜的特殊效果的技巧。 練習(xí)和問題 本書包含超過350道來源于實際問題的練習(xí)題。其中大部分都是讓讀者停下來進(jìn)行思考但并不需要編程的那種類型,這可以讓讀者自己測試一下知識掌握的程度。其余小部分則需要編程實現(xiàn)?! 〈送猓谒姓鹿?jié)的末尾,列出了總共超過50個的實例分析。它們都是一些編程的項目,難易程度由簡到繁,適合于作為課后作業(yè)。這些案例分析對相應(yīng)章節(jié)內(nèi)的內(nèi)容進(jìn)行了擴(kuò)展。無論是否全部完成這些實例分析任務(wù),它們都應(yīng)該作為相應(yīng)章節(jié)的一個有機(jī)組成部分?! ∶恳粋€實例分析任務(wù)都注明了相應(yīng)的難易程度,用以判斷完成該任務(wù)所需的大致時間。學(xué)生編程能力各異,編程過程不可預(yù)測,但可大致總結(jié)如下?! ‰y易程度 I. 簡單的練習(xí),應(yīng)該可以一晚完成?! I. 較難任務(wù),應(yīng)該可以一周內(nèi)完成,讀者需要一定的時間來設(shè)計程序,并且有足夠的時間反復(fù)測試和調(diào)試程序。 III. 復(fù)雜任務(wù),一般需要3周時間來完成設(shè)計和實現(xiàn)。完成它可以被視為一項重大進(jìn)步?! penGL的使用 剛開始學(xué)習(xí)計算機(jī)圖形學(xué)時,一個很大的障礙就是如何繪制一幅圖像。寫一個程序通常很簡單,但最終要通過某些工具在屏幕上繪制出來。現(xiàn)在,這些工具已經(jīng)存在并且很容易獲取。1992年, Silicon Graphics 公司推出了OpenGL?,F(xiàn)在它已經(jīng)成為最廣泛使用的圖形應(yīng)用編程接口(API)之一。OpenGL通過提供可以在程序中調(diào)用的方法接口來繪制圖像,并且它可以在因特網(wǎng)上免費(fèi)下載。正如附錄1中所述,在大專院校和工業(yè)界中使用的各種計算機(jī)系統(tǒng)上,都可以使用OpenGL。它易于安裝和使用,目前作為標(biāo)準(zhǔn)的圖形API已經(jīng)成熟。它的制定和修改由OpenGL評審委員會(一個負(fù)責(zé)引導(dǎo)OpenGL發(fā)展的工業(yè)協(xié)會)負(fù)責(zé)?! penGL非常適用于計算機(jī)圖形的一個特殊原因是因為它的設(shè)備獨(dú)立性或可移植性。不同院校的機(jī)房使用不同種類的計算機(jī),學(xué)生可以利用OpenGL在任何一臺計算機(jī)上開發(fā)并運(yùn)行程序。此外,該程序也可以在不同操作系統(tǒng)下、不同類型的另一臺計算機(jī)上運(yùn)行,兩臺計算機(jī)上生成的圖像也一定相同?! penGL提供了豐富且易用的二維圖形和圖像操作的API函數(shù),然而OpenGL最強(qiáng)大之處在于處理三維圖形。使用OpenGL,讀者可以在一個學(xué)期之內(nèi)學(xué)習(xí)并掌握制作精美動畫效果的技巧?! penGL的發(fā)展歷史 OpenGL的第一個版本1.0在1992年發(fā)布。從那時起, OpenGL一直都是一個成功的跨平臺的圖形API。第一個版本可以很好地兼容一個叫做IrisGL的專有API,這種API是由Silicon Graphics公司設(shè)計開發(fā)的。兼容的目的是為了建立一個工業(yè)標(biāo)準(zhǔn)。為此,Silicon Graphics公司聯(lián)合其他幾家圖形硬件公司,共同制定了一個開放標(biāo)準(zhǔn),命名為OpenGL。不足為奇,在隨后的10年,人們努力使得OpenGL變得更好和更加強(qiáng)大。在這段時間,圖形硬件也發(fā)展迅猛,產(chǎn)生了越來越強(qiáng)大的圖形加速卡,這使得程序開發(fā)者迫切需要一個能夠達(dá)到OpenGL最佳效果的API。因此,OpenGL提供了一系列的擴(kuò)展函數(shù),允許開發(fā)者在圖形硬件新特征出現(xiàn)后就可以馬上充分利用它們。 每當(dāng)有一種強(qiáng)大的軟件系統(tǒng)面世,標(biāo)準(zhǔn)的問題也隨即產(chǎn)生。對于OpenGL,為使它朝著可控、有序的方向發(fā)展,Silicon Graphics成立了一個監(jiān)督組織,該組織被稱作OpenGL 架構(gòu)評審委員會(Architecture Review Board, ARB). ARB的主要任務(wù)是指導(dǎo)OpenGL規(guī)范的制定和一致性測試。OpenGL規(guī)范詳盡地描述了每個OpenGL方法和標(biāo)識符的使用方法。目前,ARB的成員有3Dlabs、蘋果公司、IBM、英特爾、nVidia、ATI、SGI和Sun Microsystems等?! penGL規(guī)范中定義的方法由各個圖形硬件廠商在圖形驅(qū)動程序中實現(xiàn)。這個過程需要大量的資金和時間,所以,通常在規(guī)范發(fā)布后過一段時間,支持該規(guī)范的驅(qū)動程序才會發(fā)布。最新的版本OpenGL 2.0在2004年9月發(fā)布,它包含了強(qiáng)大的OpenGL著色語言(Shading Language),將在第8章對此進(jìn)行詳細(xì)介紹。它的前一版本是OpenGL 1.5,該版本發(fā)布于2003年?! ∮嬎銠C(jī)圖形學(xué)是一個發(fā)展迅速的領(lǐng)域,這使得開發(fā)人員往往很急切地等待OpenGL官方版本的發(fā)布。所以,必須存在一種機(jī)制,使得小規(guī)模增加的最新OpenGL功能可以馬上在最新的圖形硬件上開發(fā)和測試。為此,ARB提供了一個明確定義的擴(kuò)展機(jī)制。在OpenGL擴(kuò)展注冊表(http://oss.sgi.com/projects/projects/ogl-sample/registry)中可以看到擴(kuò)展的列表,其中定義了命名習(xí)慣,新擴(kuò)展的指導(dǎo)方針和其他相關(guān)的擴(kuò)展討論。訪問擴(kuò)展是一個平臺相關(guān)的任務(wù),而可用的擴(kuò)展取決于計算機(jī)上安裝的圖形硬件。一些庫如GLEW和GLEE可以用來簡化在應(yīng)用程序中使用擴(kuò)展。 擴(kuò)展機(jī)制使得OpenGL以一個合理的成本運(yùn)行。小規(guī)模的改動就可以擁有最新硬件的強(qiáng)大功能。這些擴(kuò)展一旦被批準(zhǔn)并在OpenGL擴(kuò)展注冊表中注冊登記之后,即可以迅速發(fā)揮作用。當(dāng)某個擴(kuò)展已經(jīng)成熟到可以加入OpenGL的核心功能中時,ARB就會討論決定是否將其加入,然后發(fā)布新版本的OpenGL。這些內(nèi)容將在第8章中進(jìn)行討論?! ++編程語言的使用 C++是大多數(shù)工程和計算機(jī)科學(xué)專業(yè)的首選編程語言。相比于C, C++有幾個明顯的優(yōu)點(diǎn),如引用傳遞函數(shù)參數(shù),這使得顯式指針不再需要,代碼閱讀更加易懂。通過使用流,文件的輸入輸出(I/O)也被極大地簡化。一般來說,C++中的所有I/O的語法都比C中更為清晰。為了使得本書中的描述更為簡單,我們沒有特別強(qiáng)調(diào)C++中運(yùn)算符的使用?! 〈送猓珻++中的類很容易開發(fā)應(yīng)用,如二維或三維中的點(diǎn)、線、窗口或顏色,這使代碼更加簡單而且更加魯棒。使用類之后,具體的操作如幾何對象細(xì)節(jié)隱藏、編寫繪制函數(shù)包裝繪制、測試某個對象是否相交等都更加清晰易讀?! ∽⒅厝S計算機(jī)圖形學(xué) 由于PC上的游戲越來越流行,電影中令人眼花繚亂的動畫越來越多,學(xué)生都對開發(fā)三維交互式的圖形應(yīng)用程序特別有興趣。為了能讓讀者更快地進(jìn)入三維圖形學(xué)的主題,本書重新組織了第一版和第二版中的若干章節(jié)。在很多地方,二維和三維的概念結(jié)合在一起論述,這可以幫助理解兩者之間的相似和區(qū)別?! ∈褂脠鼍霸O(shè)計語言來描述三維場景 如果用原始的OpenGL命令來描述一個包含很多三維物體的場景,將會非常不雅觀而且費(fèi)時。例如,如果使用OpenGL的命令逐一定義6個面來描述一個立方體將顯得非常乏味。所以,在第5章中會介紹一個簡單的場景描述語言SDL(在附錄中有更加詳盡定義)。使用這個描述語言,學(xué)生可以使用熟悉的詞匯來描述場景,如“立方體”、“球”和“旋轉(zhuǎn)”等,并建立包含這些詞匯的文件。這些文件可以在運(yùn)行時讀入到程序中。本書的附錄(或本書的網(wǎng)站)中給出了一個能夠閱讀SDL文件并建立文件中所描述物體的解釋程序。這樣,用OpenGL來繪制場景文件中的物體列表就變得非常簡單?! ”緯慕Y(jié)構(gòu)和課程安排 本書包含多于一個學(xué)期的教學(xué)內(nèi)容,甚至多于兩個學(xué)期的內(nèi)容(對前兩版也是這種情況)。本書經(jīng)過細(xì)致的編排,使得授課老師可以根據(jù)課程的長度和課程的背景選擇不同的章節(jié)組合來授課。下面在介紹完各章的主要內(nèi)容之后,將介紹幾個建議的章節(jié)組合教學(xué)方案。
內(nèi)容概要
計算機(jī)圖形學(xué)是利用計算機(jī)研究圖形的表示、生成、處理和顯示的一門重要的計算機(jī)學(xué)科分支,它是計算機(jī)科學(xué)中最活躍的分支之一。近年來,隨著計算機(jī)及互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,計算機(jī)圖形學(xué)正越來越深入我們的生活,它在工業(yè)建模、視頻處理、游戲制作、影視特技、生物信息和醫(yī)藥醫(yī)療等各行各業(yè)都有著及其重要的作用??梢哉f,計算機(jī)圖形學(xué)的應(yīng)用無所不在,且日益廣泛;已經(jīng)成為計算機(jī)科學(xué)技術(shù)與其它應(yīng)用學(xué)科之間溝通的橋梁,成為許多計算機(jī)從業(yè)人員的必備素質(zhì)之一。 本書是一本國外很有影響的教材,為許多國外著名大學(xué)所采用。本書通過最能代表技術(shù)發(fā)展?fàn)顩r的示例綜合介紹了計算機(jī)圖形學(xué)方面的原則和技巧,本書對每個概念都進(jìn)行了詳細(xì)介紹,闡述了其背后的數(shù)學(xué)原理,并給出了用OpenGL實現(xiàn)的代碼以及實現(xiàn)結(jié)果展示。新版本還為讀者提供了計算機(jī)圖形學(xué)領(lǐng)域的最前沿信息。本書是計算機(jī)圖形學(xué)課程的很好教材,也是計算機(jī)圖形學(xué)專業(yè)人員的很好參考書。
書籍目錄
第1章 計算機(jī)圖形學(xué)概述 1.1 什么是計算機(jī)圖形學(xué) 1.2 計算機(jī)生成的圖片用在哪里 1.2.1 藝術(shù)、娛樂和出版行業(yè) 1.2.2 計算機(jī)圖形學(xué)、感知和圖像處理 1.2.3 過程監(jiān)視 1.2.4 仿真顯示 1.2.5 計算機(jī)輔助設(shè)計 1.2.6 科學(xué)分析與體可視化 1.3 計算機(jī)圖形學(xué)中制作圖像的基本元素 1.3.1 折線 1.3.2 文本 1.3.3 填充區(qū)域 1.3.4 光柵圖像 1.3.5 光柵圖像的灰度和色彩表達(dá) 1.4 圖形顯示設(shè)備 1.4.1 線畫顯示 1.4.2 光柵顯示器 1.4.3 視頻卡/3D加速器 1.4.4 其他的光柵顯示設(shè)備 1.4.5 硬拷貝光柵設(shè)備 1.5 圖形輸入的基本單元和設(shè)備 1.5.1 邏輯上的輸入圖形基元類型 1.5.2 物理輸入設(shè)備的類型 本章小結(jié) 本章習(xí)題 進(jìn)一步閱讀第2章 OpenGL繪圖入門 2.1 生成圖像初步 2.1.1 設(shè)備無關(guān)的編程和OpenGL 2.1.2 窗口的編程 2.1.3 如何打開一個窗口畫圖 2.2 OpenGL的基本圖形元素 2.2.1 幾個點(diǎn)叢繪制的例子 2.3 OpenGL中的直線繪制 2.3.1 繪制折線和多邊形 2.3.2 使用moveTo()和lineTo()繪制線段 2.3.3 繪制邊校正的矩形 2.3.4 邊校正矩形的長寬比 2.3.5 填充多邊形 2.3.6 OpenGL中的其他圖形元素 2.4 與鼠標(biāo)和鍵盤的交互 2.4.1 用鼠標(biāo)交互 2.4.2 鍵盤交互 2.5 程序中的菜單設(shè)計與使用 本章小結(jié) 案例分析 進(jìn)一步閱讀第3章 更多的繪圖工具 3.1 概述 3.2 世界窗口和視口 3.2.1 窗口到視口的映射 3.3 裁減線 3.3.1 如何裁減一條線 3.3.2 Cohen-Sutherland裁減算法 3.4 正多邊形、圓和圓弧 3.4.1 正多邊形 3.4.2 正n邊形的變種 3.4.3 繪制圓弧和圓 3.4.4 曲線的逐次細(xì)化 3.5 曲線的參數(shù)形式 3.5.1 曲線的參數(shù)形式 3.5.2 繪制參數(shù)曲線 3.5.3 極坐標(biāo)形狀 本章小結(jié) 案例分析 進(jìn)一步閱讀第4章 圖形學(xué)中的向量工具第5章 物體變換第6章 使用多邊形網(wǎng)格建模第7章 三維觀察第8章 幾何體的真實感渲染第9章 光柵顯示工具第10章 曲線和曲面設(shè)計第11章 顏色理論第12章 光線跟蹤基礎(chǔ)附錄1 圖形工具:怎樣獲取和安裝OpenGL附錄2 計算機(jī)圖形學(xué)的數(shù)學(xué)基礎(chǔ)附錄3 有用的類、例種以及SDL附錄4 分形和曼德布洛特集合附錄5 相對性和海龜繪圖
章節(jié)摘錄
第1章 計算機(jī)圖形學(xué)概述 本章學(xué)習(xí)目標(biāo) 縱覽計算機(jī)圖形學(xué)領(lǐng)域 描述重要的圖形輸入和輸出設(shè)備 預(yù)覽 1.1節(jié) 介紹計算機(jī)圖形學(xué)的相關(guān)領(lǐng)域。1.2節(jié)給出了一些當(dāng)今計算機(jī)圖形學(xué)應(yīng)用的例子。1.3節(jié)介紹用計算機(jī)生成圖像的基本方法。在1.3.4節(jié)中特別介紹了光柵圖像的概念,它的應(yīng)用貫穿本書始終。1.4節(jié)描述了一些現(xiàn)在常用的圖形顯示設(shè)備,1.5節(jié)簡要介紹用于交互式圖形應(yīng)用的各種輸入設(shè)備?! ”緯趪馐呛苡杏绊懥Φ慕滩模辉S多國外著名的大學(xué)所采用。譯者在盡量保持原書精髓的基礎(chǔ)上,對原書做了一些表述上的調(diào)整,以符合中文習(xí)慣,原書中的一些筆誤,也給予了糾正。本書譯者中,胡事民、劉永進(jìn)、張松海來自清華大學(xué)計算機(jī)科學(xué)與技術(shù)系,劉利剛來自浙江大學(xué)數(shù)學(xué)系,均在第一線從事計算機(jī)圖形學(xué)的教學(xué)和科研工作。在本書的翻譯中,胡事民教授負(fù)責(zé)第1、2、8章,劉利剛副教授負(fù)責(zé)10、11、12章,劉永進(jìn)副教授負(fù)責(zé)5、6、7章,張松海博士負(fù)責(zé)3、4、9章。經(jīng)過一年多的努力,本書終于完成翻譯,并付印。在翻譯過程中,得到了許多同事和學(xué)生的幫助,研究生徐昆、高岳、李勇、張硯、雷勵星、陳韜、張一飛、藏域、程明明、來煜坤、勒力、楊永亮、張國鑫、王王禹屏、邊哲、佟強(qiáng)、白石、沈超慧、盧少平、陳中貴、陳仁杰、陳軍、胡建偉、孟敏、張冬梅等參與翻譯了部分初稿,在此一并表示感謝。 由于譯者水平有限,本書翻譯過程中難有疏漏和不妥之處,敬請讀者批評和指正。前 言 對于有志于學(xué)習(xí)計算機(jī)圖形學(xué)基本原理和技術(shù),并且渴望自己能夠編寫優(yōu)質(zhì)圖形學(xué)程序的讀者,本書為他們提供了入門的詳細(xì)介紹。計算機(jī)圖形學(xué)具有強(qiáng)大的生命力并正在持續(xù)發(fā)展。動畫電影已經(jīng)展示給人們圖形學(xué)知識所能做到的令人激動的視覺效果。電腦游戲和因特網(wǎng)中的圖形效果同樣激勵人們?nèi)W(xué)習(xí)如何自己動手做出這樣的效果?! D形軟硬件系統(tǒng)正在以驚人的速度朝著更好、更快和更廉價的方向發(fā)展。每年從研究和業(yè)界中提出的大量新技術(shù)不斷地涌現(xiàn)。然而,圖形學(xué)最基本的原理和方法,卻保持著穩(wěn)定和連貫,并且這些知識中的大部分可以通過一個圖形學(xué)課程學(xué)習(xí)得到。本書將圖形學(xué)的一些基本思想和方法組織起來,通過閱讀使讀者從只會編寫簡單程序的水平,提高到能夠自行設(shè)計并編寫出優(yōu)良圖形學(xué)程序的水平。 適用的讀者范圍 該書被設(shè)定為本科高年級或研究生一年級的一個或兩個學(xué)期的課程教材。該書也可用于自學(xué)。該書的主要對象是專業(yè)為計算機(jī)科學(xué)或計算機(jī)工程的學(xué)生,當(dāng)然也適用于其他專業(yè)如物理和數(shù)學(xué)的學(xué)生?! ?shù)學(xué)基礎(chǔ)的要求 讀者應(yīng)該具備相當(dāng)于大學(xué)一年級的數(shù)學(xué)水平;并具備初等代數(shù)、幾何、三角函數(shù)和初等微積分的基本知識。向量和矩陣的有關(guān)知識將有助于本書的閱讀,但不是必須的。本書在相關(guān)章節(jié)中介紹了向量和矩陣的基本知識,同時,附錄中總結(jié)了向量和矩陣的關(guān)鍵概念?! ∮嬎銠C(jī)圖形學(xué)中使用了大量的數(shù)學(xué)符號來表達(dá)線、面和視點(diǎn)之間的基本幾何關(guān)系。雖然每個數(shù)學(xué)符號都很容易理解,但所需的符號數(shù)量卻令人生畏。書中特別強(qiáng)調(diào)了使用每種符號或技術(shù)的原因,以及如何利用這些數(shù)學(xué)符號合理地描述圖形程序中感興趣的對象?! 幊趟降囊蟆 ∫话闱闆r下,讀者應(yīng)具有至少一個學(xué)期使用C、C++或Java編寫程序的經(jīng)驗。相當(dāng)多有關(guān)圖形的編程涉及到將幾何關(guān)系直接轉(zhuǎn)換為代碼,包括使用變量、函數(shù)、數(shù)組、循環(huán)和條件測試等,而這些東西在不同編程語言中都是類似的。本書使用的編程語言是C++,但是,有C語言背景的讀者可以輕易地讀懂大部分材料?! ∽x者如果熟練掌握C中的結(jié)構(gòu)或C++中的類,將非常有助于本書的閱讀。如用于描述復(fù)雜場景的圖形對象結(jié)構(gòu),這些場景(如一個城堡或一架飛機(jī))可能由許多部分組成,而這些部分本身又由復(fù)雜的更小部分組成。如果能熟練使用鏈表或樹結(jié)構(gòu)也會有一些幫助,但不是必須的。 對于只懂得C但不懂得C++的讀者來說,需要掌握面向?qū)ο蟮木幊汤砟睢1緯卸x了許多有用的類(如網(wǎng)格、場景、相機(jī)和紋理等類),并且說明了這些類為什么方便易用。在某些場合下,為了使程序更加清晰易讀,我們使用了面向?qū)ο缶幊讨械囊恍┘夹g(shù),如繼承和多態(tài),不過,我們并不過分強(qiáng)調(diào)面向?qū)ο蟮姆椒??! ∮嬎銠C(jī)圖形學(xué) (OpenGL版)(第3版)前言教學(xué)理念 第3版與前兩版相比,幾乎被完全重新組織和改寫,但是基本的教學(xué)理念沒有改變: 我們堅信計算機(jī)圖形學(xué)是在實際使用中學(xué)習(xí)到的,一定要動手編寫程序并進(jìn)行測試,才能真正地掌握計算機(jī)圖形學(xué)。本書的一個主要目標(biāo)就是讓讀者懂得如何將一個特定的設(shè)計任務(wù)轉(zhuǎn)換成相應(yīng)的幾何結(jié)構(gòu),并找到一個合適的數(shù)學(xué)表達(dá),最后將這個表達(dá)轉(zhuǎn)換為算法和程序代碼。本書將以循序漸進(jìn)的方式讓讀者首先學(xué)習(xí)到如何編寫簡單的程序來繪制簡單的圖像,然后一步一步深入地掌握如何生成更加復(fù)雜的特殊效果的技巧?! 【毩?xí)和問題 本書包含超過350道來源于實際問題的練習(xí)題。其中大部分都是讓讀者停下來進(jìn)行思考但并不需要編程的那種類型,這可以讓讀者自己測試一下知識掌握的程度。其余小部分則需要編程實現(xiàn)?! 〈送猓谒姓鹿?jié)的末尾,列出了總共超過50個的實例分析。它們都是一些編程的項目,難易程度由簡到繁,適合于作為課后作業(yè)。這些案例分析對相應(yīng)章節(jié)內(nèi)的內(nèi)容進(jìn)行了擴(kuò)展。無論是否全部完成這些實例分析任務(wù),它們都應(yīng)該作為相應(yīng)章節(jié)的一個有機(jī)組成部分。 每一個實例分析任務(wù)都注明了相應(yīng)的難易程度,用以判斷完成該任務(wù)所需的大致時間。學(xué)生編程能力各異,編程過程不可預(yù)測,但可大致總結(jié)如下?! ‰y易程度 ?、? 簡單的練習(xí),應(yīng)該可以一晚完成?! 、? 較難任務(wù),應(yīng)該可以一周內(nèi)完成,讀者需要一定的時間來設(shè)計程序,并且有足夠的時間反復(fù)測試和調(diào)試程序?! 、? 復(fù)雜任務(wù),一般需要3周時間來完成設(shè)計和實現(xiàn)。完成它可以被視為一項重大進(jìn)步?! penGL的使用 剛開始學(xué)習(xí)計算機(jī)圖形學(xué)時,一個很大的障礙就是如何繪制一幅圖像。寫一個程序通常很簡單,但最終要通過某些工具在屏幕上繪制出來?,F(xiàn)在,這些工具已經(jīng)存在并且很容易獲取。1992年, Silicon Graphics 公司推出了OpenGL。現(xiàn)在它已經(jīng)成為最廣泛使用的圖形應(yīng)用編程接口(API)之一。OpenGL通過提供可以在程序中調(diào)用的方法接口來繪制圖像,并且它可以在因特網(wǎng)上免費(fèi)下載。正如附錄1中所述,在大專院校和工業(yè)界中使用的各種計算機(jī)系統(tǒng)上,都可以使用OpenGL。它易于安裝和使用,目前作為標(biāo)準(zhǔn)的圖形API已經(jīng)成熟。它的制定和修改由OpenGL評審委員會(一個負(fù)責(zé)引導(dǎo)OpenGL發(fā)展的工業(yè)協(xié)會)負(fù)責(zé)?! penGL非常適用于計算機(jī)圖形的一個特殊原因是因為它的設(shè)備獨(dú)立性或可移植性。不同院校的機(jī)房使用不同種類的計算機(jī),學(xué)生可以利用OpenGL在任何一臺計算機(jī)上開發(fā)并運(yùn)行程序。此外,該程序也可以在不同操作系統(tǒng)下、不同類型的另一臺計算機(jī)上運(yùn)行,兩臺計算機(jī)上生成的圖像也一定相同?! penGL提供了豐富且易用的二維圖形和圖像操作的API函數(shù),然而OpenGL最強(qiáng)大之處在于處理三維圖形。使用OpenGL,讀者可以在一個學(xué)期之內(nèi)學(xué)習(xí)并掌握制作精美動畫效果的技巧?! penGL的發(fā)展歷史 OpenGL的第一個版本1.0在1992年發(fā)布。從那時起, OpenGL一直都是一個成功的跨平臺的圖形API。第一個版本可以很好地兼容一個叫做IrisGL的專有API,這種API是由Silicon Graphics公司設(shè)計開發(fā)的。兼容的目的是為了建立一個工業(yè)標(biāo)準(zhǔn)。為此,Silicon Graphics公司聯(lián)合其他幾家圖形硬件公司,共同制定了一個開放標(biāo)準(zhǔn),命名為OpenGL。不足為奇,在隨后的10年,人們努力使得OpenGL變得更好和更加強(qiáng)大。在這段時間,圖形硬件也發(fā)展迅猛,產(chǎn)生了越來越強(qiáng)大的圖形加速卡,這使得程序開發(fā)者迫切需要一個能夠達(dá)到OpenGL最佳效果的API。因此,OpenGL提供了一系列的擴(kuò)展函數(shù),允許開發(fā)者在圖形硬件新特征出現(xiàn)后就可以馬上充分利用它們?! ∶慨?dāng)有一種強(qiáng)大的軟件系統(tǒng)面世,標(biāo)準(zhǔn)的問題也隨即產(chǎn)生。對于OpenGL,為使它朝著可控、有序的方向發(fā)展,Silicon Graphics成立了一個監(jiān)督組織,該組織被稱作OpenGL 架構(gòu)評審委員會(Architecture Review Board, ARB). ARB的主要任務(wù)是指導(dǎo)OpenGL規(guī)范的制定和一致性測試。OpenGL規(guī)范詳盡地描述了每個OpenGL方法和標(biāo)識符的使用方法。目前,ARB的成員有3Dlabs、蘋果公司、IBM、英特爾、nVidia、ATI、SGI和Sun Microsystems等?! penGL規(guī)范中定義的方法由各個圖形硬件廠商在圖形驅(qū)動程序中實現(xiàn)。這個過程需要大量的資金和時間,所以,通常在規(guī)范發(fā)布后過一段時間,支持該規(guī)范的驅(qū)動程序才會發(fā)布。最新的版本OpenGL 2.0在2004年9月發(fā)布,它包含了強(qiáng)大的OpenGL著色語言(Shading Language),將在第8章對此進(jìn)行詳細(xì)介紹。它的前一版本是OpenGL 1.5,該版本發(fā)布于2003年?! ∮嬎銠C(jī)圖形學(xué)是一個發(fā)展迅速的領(lǐng)域,這使得開發(fā)人員往往很急切地等待OpenGL官方版本的發(fā)布。所以,必須存在一種機(jī)制,使得小規(guī)模增加的最新OpenGL功能可以馬上在最新的圖形硬件上開發(fā)和測試。為此,ARB提供了一個明確定義的擴(kuò)展機(jī)制。在OpenGL擴(kuò)展注冊表(http://oss.sgi.com/projects/projects/ogl-sample/registry)中可以看到擴(kuò)展的列表,其中定義了命名習(xí)慣,新擴(kuò)展的指導(dǎo)方針和其他相關(guān)的擴(kuò)展討論。訪問擴(kuò)展是一個平臺相關(guān)的任務(wù),而可用的擴(kuò)展取決于計算機(jī)上安裝的圖形硬件。一些庫如GLEW和GLEE可以用來簡化在應(yīng)用程序中使用擴(kuò)展?! U(kuò)展機(jī)制使得OpenGL以一個合理的成本運(yùn)行。小規(guī)模的改動就可以擁有最新硬件的強(qiáng)大功能。這些擴(kuò)展一旦被批準(zhǔn)并在OpenGL擴(kuò)展注冊表中注冊登記之后,即可以迅速發(fā)揮作用。當(dāng)某個擴(kuò)展已經(jīng)成熟到可以加入OpenGL的核心功能中時,ARB就會討論決定是否將其加入,然后發(fā)布新版本的OpenGL。這些內(nèi)容將在第8章中進(jìn)行討論?! ++編程語言的使用 C++是大多數(shù)工程和計算機(jī)科學(xué)專業(yè)的首選編程語言。相比于C, C++有幾個明顯的優(yōu)點(diǎn),如引用傳遞函數(shù)參數(shù),這使得顯式指針不再需要,代碼閱讀更加易懂。通過使用流,文件的輸入輸出(I/O)也被極大地簡化。一般來說,C++中的所有I/O的語法都比C中更為清晰。為了使得本書中的描述更為簡單,我們沒有特別強(qiáng)調(diào)C++中運(yùn)算符的使用?! 〈送?,C++中的類很容易開發(fā)應(yīng)用,如二維或三維中的點(diǎn)、線、窗口或顏色,這使代碼更加簡單而且更加魯棒。使用類之后,具體的操作如幾何對象細(xì)節(jié)隱藏、編寫繪制函數(shù)包裝繪制、測試某個對象是否相交等都更加清晰易讀?! ∽⒅厝S計算機(jī)圖形學(xué) 由于PC上的游戲越來越流行,電影中令人眼花繚亂的動畫越來越多,學(xué)生都對開發(fā)三維交互式的圖形應(yīng)用程序特別有興趣。為了能讓讀者更快地進(jìn)入三維圖形學(xué)的主題,本書重新組織了第一版和第二版中的若干章節(jié)。在很多地方,二維和三維的概念結(jié)合在一起論述,這可以幫助理解兩者之間的相似和區(qū)別?! ∈褂脠鼍霸O(shè)計語言來描述三維場景 如果用原始的OpenGL命令來描述一個包含很多三維物體的場景,將會非常不雅觀而且費(fèi)時。例如,如果使用OpenGL的命令逐一定義6個面來描述一個立方體將顯得非常乏味。所以,在第5章中會介紹一個簡單的場景描述語言SDL(在附錄中有更加詳盡定義)。使用這個描述語言,學(xué)生可以使用熟悉的詞匯來描述場景,如“立方體”、“球”和“旋轉(zhuǎn)”等,并建立包含這些詞匯的文件。這些文件可以在運(yùn)行時讀入到程序中。本書的附錄(或本書的網(wǎng)站)中給出了一個能夠閱讀SDL文件并建立文件中所描述物體的解釋程序。這樣,用OpenGL來繪制場景文件中的物體列表就變得非常簡單。 本書的結(jié)構(gòu)和課程安排 本書包含多于一個學(xué)期的教學(xué)內(nèi)容,甚至多于兩個學(xué)期的內(nèi)容(對前兩版也是這種情況)。本書經(jīng)過細(xì)致的編排,使得授課老師可以根據(jù)課程的長度和課程的背景選擇不同的章節(jié)組合來授課。下面在介紹完各章的主要內(nèi)容之后,將介紹幾個建議的章節(jié)組合教學(xué)方案。
編輯推薦
《計算機(jī)圖形學(xué)(OpenGL版)第3版》配套的網(wǎng)站提供了書中使用到的代碼、彩色插圖、完整程序以及與《計算機(jī)圖形學(xué)(OpenGL版)第3版》密切相關(guān)的參考素材?! ∫訡++語言作為程序設(shè)計語言?! ∩钊虢榻B3D圖形學(xué)及其數(shù)學(xué)知識,使學(xué)生可以創(chuàng)建真實的3D圖形?! ∶空潞竺娑冀o出了實際的案例研究?! ∏逦亟榻B了計算機(jī)圖形學(xué)的原理和技術(shù)。 大量真實而逼真的示例?! 〈罅繉嵺`練習(xí)(每章大概有30多道)。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載