




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第1章 圖形系統和模型第1章 圖形系統和模型計算機和通信技術已經越來越成為人們生活中的主導力量。電影制作、出版發行、銀行和教育等活動已經并將繼續對我們的日常生活帶來革命性的變化。計算機、網絡和復雜的人眼視覺系統三者相互結合并通過計算機圖形學為我們提供了顯示信息的一種全新方法,利用這種方法我們可以觀看虛擬世界、與他人和機器進行交流。計算機圖形學涉及計算機圖形或圖像生成過程的各個方面。該領域在四十多年前剛出現時顯得非常微不足道,那時只能用陰級射線管(CRT)顯示有限的幾條直線。現在我們用計算機生成的圖像與真實照片幾乎沒有區別。現在利用仿真飛機訓練飛行員已不鮮見,這種仿真飛機就是在一個虛擬環境里實現
2、實時圖形顯示。完全由計算機生成的正片長度的動畫電影已經受到好評并且在商業上獲得成功。本章首先簡要介紹計算機圖形學的應用,然后概述圖形系統和圖像處理過程。本書自始至終強調利用計算機繪制圖形與手工繪畫和攝影等方法的圖像形成過程之間存在相似性。我們將看到這種相似性有助于設計應用程序、圖形庫軟件包和計算機圖形體系。在本書中,我們介紹一個具體的圖形軟件系統OpenGL。OpenGL已經成為開發圖形應用程序的一個普遍認可的標準。幸運的是,OpenGL容易掌握,它具有其他流行圖形系統的絕大多數特性。我們采用自頂向下的方法,希望讀者盡可能早地開始編寫有圖形輸出的應用程序。當讀者能編寫一些簡單的程序之后,我們將
3、討論底層的圖形庫設計和硬件的實現過程。本章中我們將盡可能詳盡地介紹圖形學和OpenGL,目的是讓讀者就從這里開始編寫圖形程序。1.1 計算機圖形學的應用來自圖形用戶的需求以及軟件和硬件的升級進步,是計算機圖形學發展的兩大推力。計算機圖形學的應用領域多樣、范圍廣泛。盡管如此,我們仍可以將其大致劃分為4個主要領域:(1)信息顯示。(2)設計。(3)仿真與動畫。(4)用戶界面。盡管計算機圖形學的許多應用橫跨兩個或多個領域,但該學科的發展還是基于上述4個領域各自獨立的工作。1.1.1 信息顯示傳統的圖形技術是作為在人們之間傳遞信息的媒介而出現的。雖然口語與書面語言也是服務于類似的目的,但人類視覺系統在
4、數據處理與模式識別方面的作用是無可替代的。早在四千多年前,巴比倫人就開始在石板上繪制建筑物的樓層規劃圖。二千多年前,古希臘人已經能夠以圖形來表達建筑構想,而相關的數學知識直到文藝復興時期才被發展起來。今天,建筑師、機械設計師和繪圖員則使用基于計算機的繪圖系統來生成同類信息。幾個世紀以來,地圖制作者繪制了大量的反映天體與地理信息的地圖,這些地圖對航海者探索地球的各個角落發揮了異常重要的作用。今天,在諸如地理信息系統等領域中,地圖仍然發揮著重要作用。現在,通過Internet可以實時地繪制與處理地圖。一百多年來,統計人員已經探索出能幫助觀察者決定數據所含信息的圖表繪制技術。現在,計算機圖表繪制軟件
5、包為我們提供了各種圖表繪制技術和色彩工具。利用這些技術和工具,我們可以處理多個大型數據集。盡管如此,要理解數據集所含的信息,還得依靠人眼識別可視化模式的能力。醫學也向計算機圖形學提出了一些有趣且重要的數據分析問題。諸如計算機斷層成像技術(CT)、核磁共振(MRI)、超聲波以及正電子發射型計算機斷層成像(PET)等圖像處理新技術,生成的三維數據只有經過圖形學算法處理后才能得到有用的信息。彩圖20是一幅人的頭像,在該圖像中皮膚是透明的而肌肉是不透明的。盡管醫學成像系統能收集到大量數據,但只有經過計算機圖形學處理后才能得到表明其構造的圖像。超級計算機的出現讓許多領域中的研究者解決了以往看起來似乎不能
6、解決的問題。可視化技術為研究人員理解各自領域里產生的大量數據提供了圖形工具。諸如流體力學、分子生物學和數學等領域產生的大量數據經圖形學處理后得到的幾何實體可以讓研究人員深入了解其復雜過程。彩圖19顯示出地幔的流體動力學特性,該系統利用數學模型獲得數據并利用各種可視化技術進行圖像顯示,有關這些內容將在第8、9和12章進行討論。1.1.2 設計諸如工程和建筑等領域的專業人員更關心設計問題。工程師和建筑師從一系列設計要求出發,尋求一種符合設計要求的既省錢又美觀的設計方案。設計是一個迭代過程。在真實世界里很少有這樣的問題,根據其設計說明只存在一個獨一無二的最優解。一般情況下,設計問題要么是約束條件過多
7、,不可能存在最優解方案;要么是約束條件不足,存在多個可能方案。因而設計師以迭代的方式工作,首先提出最初的解決方案,然后進行測試,再根據測試結果尋找更好的設計方案。早在40年前,伊凡·蘇澤蘭就認識到:人與CRT屏幕上顯示的圖像進行互動,這一模式具有強大作用。今天在建筑、機械和大規模集成電路設計(VLSI)等計算機輔助設計(CAD)領域里,應用交互式圖形工具隨處可見。圖形學在這些不同的領域里有各自不同的應用方式,例如在VLSI設計中,圖形學為設計者和設計軟件之間提供了像菜單和圖標等的交互圖形界面。此外,有些工具能對初步的設計方案進行分析并以圖形方式顯示分析結果。彩圖9、10是一個建筑設計
8、圖的兩個不同視圖,是用同一個CAD設計軟件得到的,該例說明了在設計過程中的不同階段使用相應的工具產生同一個對象的不同圖像的重 要性。1.1.3 仿真與動畫計算機圖形系統不斷進步,能夠實時地生成復雜的圖像,工程師與研究人員開始把它應用在仿真器方面。訓練飛行員是其中最重要的應用之一,圖形化的飛機仿真器已被證實能夠提高安全性和降低培訓支出。通過使用一種特殊的VLSI芯片,可以開發出與飛行仿真器在復雜精細程度上相媲美的拱廊游戲。家用計算機上的游戲與教育類軟件的效果也同樣讓人印象深刻。彩圖16展示了一個物理機器人以及對應的圖形仿真系統。該仿真器可以用于設計機器人、規劃機器人的移動路徑、在復雜環境中仿真機
9、器人的行為等。飛行仿真器的研制成功促使人們把計算機圖形學應用到電視、電影和廣告行業。現在可以用計算機制作一個完整的動畫電影,而成本比傳統手工制作要低。計算機圖形學與手工動畫技術相結合創造出既有技術性又有藝術性的動畫效果,這種效果單憑其中任何一種技術都是不可能實現的。計算機生成的動畫有其明顯的外觀特性,但我們也能夠利用計算機創造出真實感圖像。實際上我們經常在電視、電影或雜志上看到一些計算機生成或經過計算機處理的圖像,它們可以達到以假亂真的程度。在本書第6、7章中將討論在制作計算機動畫中采用的各種光照效果技術。彩圖1113是源于一個計算機生成的視頻中的3個不同場景,藝術家和工程師在制作這些場景時所
10、用的軟件都是目前市場上可得到的。彩圖12中的工廠、彩 圖13中的機器人以及火花特技效果都顯示出計算機創造真實感場景的能力。彩圖31是用計算機圖形技術得到的特技效果,該效果看起來比較真實,用任何其他方法都不能得到這樣的效果。彩圖23和24的圖像也是采用真實感圖形技術繪制得到的。虛擬現實(Virtual Reality)為計算機圖形學的應用開辟了新的領域。觀察者戴著一個特制的顯示頭盔,該頭盔可以讓他的左右眼觀看不同的圖像,因而可以得到立體視圖的效果。此外計算機可以跟蹤他的身體位置和朝向,甚至頭、手指等的位置。除上述設備外,他還可能有其他一些交互設備,如裝有受力傳感器的數字手套和聲控設備。有了這一切
11、,在計算機圖像生成的能力所允許范圍內,他行動起來就好像是計算機動畫場景中的一部分。一個外科實習醫生可以采用這種方式接受手術操作訓練,或者一個宇航員可以接受在失重環境下工作的訓練。彩圖22顯示了VR場景中的一幀圖像,該VR場景是一個虛擬病人供醫護人員遠程培訓用的。1.1.4 用戶界面類似窗口、圖標、菜單和鼠標等可視化對象是我們在與計算機進行交互時最重要的部分。從用戶角度來看,不同的窗口操作系統,如X Window系統、微軟窗口操作系統以及麥金托什機操作系統只是在細節上有所差別。最近便有很多Internet的用戶通過Netscape和Internet Explorer等圖形界面的網絡瀏覽器訪問因特
12、網。由于太熟悉這種瀏覽器界面,以致我們根本沒有想到自己正在與計算機圖形學打交道。1.2 計算機圖形系統一個計算機圖形系統就是一個計算機系統,因為它具有一個通用計算機系統的所有部件。下面從 圖1.1所示的框圖開始討論,該圖有5個主要組成部分:(1)處理器。(2)存儲器。(3)幀緩存器。(4)輸出設備。(5)輸入設備。圖1.1 計算機圖形系統該計算機系統模型高度通用,包括了工作站、個人計算機、附屬于中央控制分時系統計算機的圖形終端以及高級的圖像處理系統。盡管一個通用計算機具備除幀緩存器以外其他所有部件,但是計算機圖形系統與通用計算機的不同之處在于,圖1.1中的各個部件都必須滿足圖形處理的特殊要求,
13、該圖反映了圖形系統的主要特征。1.2.1 像素與幀緩存目前,幾乎所有的圖形系統都基于光柵。一幅圖像是由許多基本單元陣列組成,在圖形系統中,圖像的基本單元稱為像素(pixel),而像素的陣列稱為光柵(raster)。從圖1.2可以看出,每個像素對應于圖像中的某個位置或某個小區域。一幅圖像的像素全部存放在一個稱為幀緩存器的內存里。在高端系統,幀緩存器采用特殊類型的存儲器芯片實現,一般是視頻隨機讀寫存儲器(簡稱為VRAM)或者動態隨機讀寫存儲器(簡稱為DRAM),這些存儲芯片會快速刷新幀緩存里的內容。幀緩存的深度,即每個像素的位數決定了某一個顯示系統能顯示的顏色數。例如,1位深度幀緩存只能顯示兩種顏
14、色,而8位深度幀緩存可以顯示28(=256)種顏色。在全色彩(full-color)系統里,深度為24位的圖形系統可以顯示足夠多的顏色數,能表示大多數真實感圖像,所以稱之為真彩色(true-color)系統,或稱RGB顏色系統,因為每個像素的3個顏色位組分別賦予紅、綠、藍三基色,大多數顯示系統使用三基色。在一些比較簡單的圖形系統里,幀緩存就是標準內存的一部分。幀緩存可以看作是圖形系統的核心部分。分辨率幀緩存的像素數,決定了圖像顯示的細節程度。 (a)一幅雪人貓的圖像 (b)眼睛周圍像素的細節情況圖1.2 像素在一些非常簡單的系統里,幀緩存只存儲屏幕上像素的顏色信息,但是在大多數系統里,幀緩存存
15、儲更多的信息,如繪制三維圖形所必需的空間深度信息。在這些系統里,幀緩存可以看作多重緩存器,其中一個或多個緩存器用來存儲像素的顏色信息。目前在不會引起混淆的前提下,我們不加區分地使用幀緩存或顏色緩存這兩個術語。在一些簡單的圖形系統里,可能只有一個處理器,它既要進行一般的運算處理又要進行圖形處理。處理器的圖形處理功能主要是根據應用程序生成的圖元(如線、圓和多邊形等)的操作要求,把顏色值賦給幀緩存中的像素,這些像素能最優地表示這些實體。像這種把幾何實體轉換為幀緩存中像素值的過程被稱為光柵化(rasterization)或掃描轉換(scan conversion)。一些高級的圖形系統有多個處理器,每個
16、處理器會根據用戶的定制要求實現某個特定的圖形功能。1.2.2 輸出設備顯示器的主流產品是陰極射線管(簡稱為CRT),它是圖形系統默認的顯示設備。圖1.3所示為CRT的簡單示意圖。當電子束發射到涂有磷光粉的屏幕時,屏幕就會發出亮光。電子束的方向由兩個偏轉電極控制。計算機輸出的信號經數/模轉換器變換成電壓,分別加到x方向和y方向的兩個偏轉電極上。當有足夠強度的電子束射到CRT涂有磷光粉的屏幕時,就會發出亮光。圖1.3 陰極射線管(CRT)當控制電子束偏轉的電壓以恒定速率變化,電子束在屏幕上會掃描出一條直線軌跡。這種顯示器稱為隨機掃描顯示器或書法型CRT(calligraphic CRT)。因為電子
17、束可以從屏幕上任意一點移動到另一點。在電子束從一個位置移動到另一個位置的過程中,如果關掉電子束的強度,則不會對已顯示屏幕上的圖像產生任何影響,在現代光柵顯示技術出現之前,這種結構的顯示器是早期圖形系統的基礎。一個典型的CRT顯示器,其屏幕上的磷光粉被電子束射中后發出的亮光只能維持非常短的時間通常在毫秒數量級。要得到穩定的圖像,大多數顯示器必須沿相同的路徑每秒至少重復顯示50次,這個過程稱為刷新。對于光柵顯示器,圖形系統從幀緩存中逐個取出像素并在屏幕上相應的位置進行顯示。整個幀緩存器中的內容必須以很快的速率進行重復顯示,否則會產生閃鑠,這個重復顯示速度就是刷新頻率。有兩種不同的掃描方式。一種是逐
18、行掃描,這種方式是逐行或逐掃描線以刷新頻率顯示屏幕的像素,其刷新頻率大約在每秒5085次,或5085Hz。一種是隔行掃描,它是指奇數行和偶數行輪流掃描顯示。隔行掃描經常用在商用電視機上。隔行掃描顯示器工作頻率是60Hz,整個屏幕每秒重畫30次。很多用戶誤認為隔行掃描的刷新頻率是60Hz,而實際上只有30Hz。靠近屏幕,仔細觀察,會發現二者的差別。逐行掃描顯示器比起隔行掃描顯示器,其顯示的圖像比較分散,盡管前者的每個像素的重畫頻率是后者的兩倍。彩色CRT其屏幕上涂有3種不同顏色的磷光粉(紅、綠、藍3種顏色),排成一個小組。一種常用的方式是把3個熒光點排成一個三角形,稱為顏色三角形。每一個顏色三角
19、形有3個熒光點,每個熒光點對應一個基色。大多數彩色CRT有3支電子槍,對應于3類熒光粉。在蔭罩式CRT顯示器里(如圖1.4所示),為了保證每個電子槍能擊中對應顏色的熒光點,在電子槍與熒光屏之間放置一個帶孔的金屬網格,稱為蔭罩。圖1.4 蔭罩式CRT盡管CRT顯示器仍是最常用的顯示設備,但并不是惟一一類顯示設備。其他類型的顯示技術也采用光柵形式。用在手提電腦里的液晶顯示器(LCD)就是光柵顯示器,根據不同的技術要求有的需要刷新,有的不需要刷新。還有等離子顯示器和數字化投影儀,它們也是光柵類型的顯示器。許多硬拷貝設備如打印機、繪制儀也是光柵類型設備,但它們不需要刷新。1.2.3 輸入設備大多數圖形
20、系統提供了鍵盤和至少一個其他類型的輸入設備。最常用的輸入設備是鼠標、游戲桿和數據輸入板。其中任意一個都為系統提供了位置信息,都配備有一個或多個按鈕,向處理器發送信號。由于這些輸入設備允許用戶指定屏幕上的某點位置,所以它們常被稱為指向設備(pointing device)。我們將在第3章對它進行討論。1.3 圖像:物理方法和人工合成方法教授圖形學常用的教學方法是先從如何在幀緩存里生成簡單二維幾何實體(如點、線段和多邊形等)的光柵圖像等問題開始,接著討論如何根據二維幾何實體集定義計算機里的數學對象。這種方法很適合于簡單對象的簡單圖像的成像過程。但是在現代圖形系統里,我們希望充分利用硬件和軟件的性能
21、獲得計算機生成的三維對象真實感圖像。這個任務要涉及圖像形成過程的許多方面,如光照、明暗處理和材質等。由于現在大多數的圖形系統都支持這些功能,所以我們寧愿一開始就為生成這種真實感的圖像建立好基礎,而不是將來在一個有局限的模型上進行其功能擴充。由于成像的物體在物理上并不存在,所以從某種意義上說,計算機生成的圖像是人工合成或人造的圖像。在本章,我們認為計算機生成圖像采用的成像方法與傳統的成像方法有相似之處。因此在討論圖像生成的編程機制之前,先討論照相機和人眼視覺等光學系統成像的原理。我們建立了一個圖像成像過程的模型,該模型可以幫助讀者理解并開發計算機圖像成像系統。在本章,我們最小限度地使用數學知識。
22、我們只想建立一個圖像生成過程的模型以及為實現該模型所采用的計算機體系結構。后面幾章將詳細討論其實現過程,在那里我們推導出相關的方程。1.3.1 對象與觀察者我們生活在一個充滿三維物體的世界里,在討論某個物體上的某點位置時,總是相對于某個簡單的參照系統而言。我們可以測量出空間兩個點之間的距離,據此確定兩個對象的位置關系。包括幾何和三角學在內的許多數學分支的發展都來源于這樣一個愿望,即把點和距離測量的簡單思想在概念上進行系統化。我們經常尋求把對這種空間關系的認識用諸如地圖、畫圖和照片等圖形或圖像表示。同樣地,照相機、顯微鏡和望遠鏡等物理設備的發明都是與可視化觀察對象之間空間關系的強烈愿望密不可分的
23、。因此圖像成像的物理方法與數學方法之間存在本質的聯系,這正是計算機圖像成像過程要探討的問題。任何圖像的形成過程,不管是采用物理方法還是數學方法,都有兩個必不可少的實體,即觀察者和被觀察的對象。對象獨立于任何圖像形成過程和觀察者所在的空間。在以人工合成對象為處理對象的計算機圖形學里,我們通過確定諸如點、線和多邊形等三維幾何圖元在空間的位置構造幾何對象。在許多圖形系統中,一組空間點位置(即為頂點)就足以定義或近似表示大多數對象。一條直線可以用兩個頂點定義;一個多邊形可以用一個頂點序列定義;一個球可以由兩個頂點來定義,一個頂點定義其球心,另一個頂點為球面上的任意一點。CAD系統的一個重要功能就是為用
24、戶提供一個界面,用戶利用它可以方便地建立這個世界的人造模型。在第2章,我們要討論OpenGL建立簡單對象的方法。在第9章,我們要學習可以反映對象之間相互關系的對象定義方法。圖像處理系統必須提供一種從對象到圖像的變換方法。為了得到一個圖像,我們必須有某個人或某個物體在觀察對象。這個觀察者可以是人,或者是照相機,或者是數字化儀器,正是這個觀察者生成對象的圖像。如果觀察者是人,則形成在人眼的視網膜上;如果是照相機,則形成在底片上。我們經常把對象與對象所成的圖像搞混。我們通常只從自己的透視角度觀察對象,而忽略了這樣的事實,即在其他位置上還存在其他觀察者,他們從不同位置觀察同一個對象。圖1.5(a)是一
25、幅由觀察者A得到的圖像,就在這個場景里,還有另外兩個觀察者B和C,觀察者B和C在觀察者A看來也是場景中的兩個對象。圖1.5(b)和(c)分別是由觀察者B和C得到的圖像。 (a)觀察者A的視圖 (b)觀察者B的視圖 (c)觀察者C的視圖圖1.5 3個不同觀察者看到的圖像圖1.6 照相機系統圖1.6顯示了一個照相機系統,它正在觀察一個建筑物。我們發現對象和觀察者處在同一個三維空間里。但是按這種方式定義的圖像我們在底片上看到的圖像只是二維的。為了得到二維圖像,我們必須說明對象的空間位置與觀察者的空間位置,這是圖像形成過程的本質,將在后面章節詳細討論。1.3.2 光照與圖像在前面有關圖像
26、成像過程的討論中,我們忽略了許多問題。到目前為止,還沒有談到光照。如果沒有光源,所有的對象都是黑的,我們在圖像上看不到任何東西。我們還沒討論圖像里的顏色是如何形成的,物體不同表面會對對象有哪些不同的影響。下面采取比較符合物理原理的方法討論這個問題。我們從圖1.7的布置開始討論成像過程,該圖是一個簡單的物理成像系統。在這里,我們再次注意到兩個對象:被觀察的物理對象和觀察者(照相機)。現在場景里多了一個光源,從光源發出的光線照射到物體表面上,從表面反射的一部分光線穿過透鏡進入到照相機里面。光與對象表面的相互作用決定了有多少光進入到照相 機里。圖1.7 一個帶光源的照相機系統光是電磁波輻射的一種形式
27、。電磁能量以波的形式傳播,波可以用波長或頻率特性描述 頻率f與波長的關系是,其中是光速。電磁波譜(如圖1.8所示)包括了無線電波、紅外光(熱效應)和刺激我們視覺神經的可見光譜。可見光譜就稱為光,其波長處于350780nm之間。對于一個給定的光源,其顏色由各種不同波長發射的能量決定。在可見光譜的中間,大約在520nm附近是綠光;在450nm附近是藍光;在650nm附近是紅光。與彩虹一樣,處于紅與綠之間的是黃色光,波長比藍光短的是紫外線。圖1.8 電磁波譜光源可以發出一組離散波長的光,或一組連續波長的光。例如激光發出單一波長的光,而白熾燈發出的光,其波長處于某個波長范圍內。幸運的是,在計算機圖形學
28、中,除了承認這樣的事實外不同頻率的光表現出不同顏色,我們很少需要討論光的波動特性。我們采用另一種比較經典的方法討論問題,正確使用這種方法的前提是光的強度足夠大和光的波動性不再是一個重要因素。幾何光學把光源看成是能量的發射器,該發射器以一定的速率發射能量即為光強。光是直線傳播,光線從光源射出,直到遇到對象為止。一個理想的點光源是從一點位置向各個方向均勻發射單一頻率或多個頻率的能量。更加復雜的光源,如電燈泡,可以看成是從一個一定大小的區域發射能量,而且各個方向發射的能量并不均勻,某個方向的光比較強,而另一個方向的光比較弱。針對某個特定的光源,可以用兩個特性參數來描述它,即每一個頻率發射的光強和光的
29、方向性。目前我們只考慮點光源情況,對于更加復雜的光源,可以看成是由一系列的點光源組成。在本書的第6章將討論光源模型。另外我們暫且只考慮純單色光源,即只發射單一頻率的光源。因為我們可以把多個不同頻率的單色光的貢獻進行疊加,所以這個假設并沒有限制我們的論述,反而使以后的討論更加直觀易懂。這個簡單的模型等效于只考慮光的亮度,不考慮光的顏色或色調。這種方法類似于在討論彩色電視之前只討論黑白電視。1.3.3 光線跟蹤如果我們跟蹤從光源發出的光線,可以建立一個成像模型。仔細觀察圖1.9所示的場景,該場景由單個點光源照明。之所以把觀察者包括在內,是由于我們對到達觀察者眼睛里的光線感興趣。觀察者也可以是照相機
30、,如圖1.10所示。光線是一條射線,它從某點出發沿著某個方向到達無窮遠處。由于光是直線傳播的,所以我們認為光線是從點光源射出,向各個方向散射,其中一部分光線對照相機成像有貢獻。例如,如果照相機看得見光源,則從光源發出的光線可以直接通過照相機的鏡頭到達照相機的底片。但大多數的光線既沒有進入照相機,也沒有照射到場景中的任何物體,直接發射到無窮遠處。這些光線對成像沒有任何作用, 但是這些光線可能對其他觀察者有作用。剩下的光線照射到場景中的物體上并照亮它們。這些光線通過不同方式與物體表面相互作用。如果物體的表面是鏡面,根據這個鏡面朝向,經過該表面的反射光可能到達照相機的鏡頭并對成像有貢獻。另外一些表面
31、會把入射的光線散射到各個方向,這種表面稱為漫反射表面。如果表面是透明的,則從光源發出的光線經折射后穿過表面,再與其他表面相互作用后,部分折射光線到達照相機的鏡頭,部分折射光線如果沒有遇到任何物體表面則發射到無窮遠處。圖1.10顯示了各種可能的情形。 圖1.9 帶有一個點光源的場景 圖1.10 光線跟蹤過程注:光線A直接到達鏡頭;光線B沒有遇到任何物體而射到無窮遠;光線C從鏡面反射后到達鏡頭;光線D射到一個漫反射表面并生成無數條新的反射光線,這些新光線最終對圖像有貢獻;光線E遇到半透明表面后生成一條折射光和一條反射光;光線F經表面反射后射到另一個表面并被該表面吸收掉。光線跟蹤是一種基于上述思想的
32、圖像成像技術,它可以作為計算機圖像成像技術的基礎。只要我們愿意進行大量的計算 在第13章中,將光線跟蹤作為計算機生成圖像的一種方法,我們將詳細討論它的形成過程。,就可以利用光線跟蹤方法模擬任意復雜的物理效果。雖然光線跟蹤模型是一種比較接近物理世界的近似方法,但它并不很適合于快速計算。然而我們可以對光線跟蹤模型進行簡化處理,提出一種更加切實可行的計算方法。從物理角度來說,一個物體發光,我們不能確定這些光是物體對入射光的反射光還是物體自身發射的光。例如,一個鏡面把來自光源的光反射到觀察者,對于觀察者來說,這個鏡面就像是一個光源。如果我們看到某一個物體,可能是這個物體被某一個光源照射,也可能是這個物
33、體自身是發光體,也可能二者都是。僅憑觀察對象本身并不能確定是屬于哪種情況。我們假設所有物體都是均勻亮度,當然這種情形實際上比較難得到。但是當在某個場景里放置燈光時,我們認為這樣的假設是合理的。從觀察者角度來看,一個紅色三角形上任何點都具有相同的顏色,它與一個純紅色光發射器沒有區別。根據這樣的假設,我們不需用光源,只需利用簡單的三角函數運算就可以得到圖像。在第6章,我們放寬這個假設的條件,把光源和復雜的材質屬性包括在內,但仍沒有對光線跟蹤的復雜過程進行深入討論。下面將要介紹兩種成像系統:人眼視覺系統和針孔照相機。人眼視覺系統非常復雜,但它遵從所有成像系統的物理原理。我們之所以介紹它,是因為它不僅
34、是一個成像系統的好例子,而且深入了解它的性質將有助于我們充分利用計算機成像系統的性能。針孔照相機是成像系統中一個非常簡單的例子,有助于我們深入理解照相機和其他光學成像設備的工作原理。下面模仿它建立一個圖像成像過程的模型。1.4 人眼的視覺系統人眼的視覺系統非常復雜,它具有照相機或顯微鏡等物理成像系統的所有組成部件。人眼視覺系統的主要組成如圖1.11所示。光通過晶體和角膜進入眼睛,角膜是一層透明的薄膜,起著保護眼睛的作用;虹膜可以調節進入到眼睛的光量;晶體把圖像投影到視網膜上,視網膜位于眼睛的后部,呈平面狀。視網膜上的桿狀細胞與錐狀細胞(取這樣的名字是因為它們的外表形狀)是光敏細胞,它們受350
35、780nm范圍的電磁波激發。桿狀細胞對低強度光敏感,它可以解釋人眼的暗視覺;而錐狀細胞負責白天的視覺活動。桿狀細胞與錐狀細胞的大小與晶體和角膜的光學性質一起決定人眼視覺的分辨率(resolution)或人眼的視敏度(visual cuity)。分辨率就是人眼所能看到物體的大小,更科學的定義是,分辨率是指兩個點之間的最近距離,當小于這個距離時,人眼就不能分辨出這兩個點。人眼內部的各種光傳感器對不同波長光的反應并不一致。人眼有3種類型的錐狀細胞和一種桿狀細胞。光強是光輻射能量的物理表示,而亮度是人眼對一個物體輻射光的感覺強度。人眼視覺系統對單色紅光和對單色綠光的反應并不一樣,即使這兩種單色光的光強
36、相同,人眼感覺到的亮度也不一樣,這是因為錐狀細胞對紅光和綠光的反應不一樣。人眼對不同頻率光的相對亮度曲線如圖1.12所示。這些曲線反映了人眼對不同頻率可見光的相對敏感程度,國際照明委員會(簡稱為CIE)稱它為可見光效率曲線(standard observer curve)。該曲線說明了我們對綠光最敏感,而對紅光和藍光最不敏感。這條曲線與在黑白電影和黑白電視攝像機中使用的單色光傳感器的敏感曲線非常接近。 圖1.11 人眼的視覺系統 圖1.12 CIE光照效率曲線亮度是我們對光強反應的籠統描述。人眼的色覺能力是由于人眼里面3類錐狀細胞的不同敏感程度所致。每類錐狀細胞都有各自的敏感曲線,如圖1.13
37、所示。在這3條曲線里,一條是以藍光為中心,另一條是以綠光為中心,第三條是以黃光為中心 以黃光為中心的曲線常被稱為紅光曲線,目的是為了與電影和電視系統中采用的三色系統相匹配。問題的關鍵是存在3類傳感器,而不是以某個頻率為中心的單獨響應曲線。人眼視覺系統具有3類錐狀細胞的一個重要結果是電影、視頻等大多數圖像生成系統支持三基色系統。利用標準的三基色可以近似表示我們感覺到的任何顏色。在第2章中將進一步討論顏色系統。(a) (b) (c)圖1.13 錐狀細胞敏感曲線人眼視覺系統對光的前端處理過程采用了與大多數光學設備一樣的物理原理,但是人眼視覺系統的后端處理過程比照相機或望遠鏡的處理過程復雜許多。視覺神
38、經通過一種非常復雜的方式與桿狀細胞和錐狀細胞相連接,這種連接方式具有高級信號處理器的許多特性。人眼視覺系統對光的最后處理過程是在大腦皮層里完成,大腦皮層是整個大腦的一部分,它具有高級處理功能,如對象識別。我們不討論高級處理過程,而只是簡單地認為是桿狀細胞和錐狀細胞把圖像傳送到大腦里。1.5 針孔照相機圖1.14是針孔照相機示意圖。該圖用一個簡單的幾何模型為我們理解成像原理提供了一個例子。針孔照相機(a pinhole camera)就是這樣一個方形盒:盒的一個側面中心有一個小孔,膠片就放置在盒子里與小孔對應的內表面上。假設把盒沿著z軸放置,把小孔放在坐標原點。假設小孔很小,所以從點光源發出的光
39、只有一條光線能進入小孔。膠片離小孔的距離為d。圖1.15是它的側視圖,根據該圖可計算出點(x, y, z)成像后在平面z = - d上的位置。根據圖1.15中兩個三角形的相似關系,可以求得成像點在y軸上的坐標yp:同樣方法,利用頂視圖,有圖1.14 針孔照相機圖1.15 針孔照相機的側視圖稱點(xp, yp ,- d)為點(x, y, z)的投影點。在理想模型中,膠片上該投影點顏色就是點(x, y, z)的顏色。照相機的視域或視角是允許成像在底片平面上的最大物體所張的角度。可以利用圖1.16 如果在三維空間而不是二維平面分析這個問題,則底面的對角長度為h,參見習題1.1。計算出視角,設h為照相
40、機的高度,設為視角,則圖1.16 視角理想針孔照相機的景深是無窮遠,在視域范圍內任何點都在聚焦范圍之內。針孔照相機存在兩個不足之處:一個是小孔太小,只允許點光源的一條光線進入,這意味幾乎沒有光進入到照相機;另一個是照相機的視角不能調節。下面轉到比較復雜的照相機和其他光學系統,它們使用的透鏡都很小。用透鏡去替換針孔照相機里的小孔,上述兩個問題就迎刃而解了。第一,鏡頭集聚了比穿過小孔更多的光線。第二,選擇合適焦距的透鏡相當于選擇照相機d的值,可以得到任何角度的視域(最大可以到180°),然而透鏡的景深不再是無窮遠,并不是離鏡頭任意遠的位置都在聚焦范圍內。在本章,我們的目的是討論針孔照相機
41、,它的焦距d就是照相機的正前面到膠片的距離。與針孔照相機一樣,計算機圖形學把視域內的所有物體成像在圖像上。1.6 虛擬照相機模型前面討論的光學成像系統為我們建立現代三維計算機圖形系統模型提供了理論基礎。計算機圖形系統成像過程與光學系統成像過程相似,我們把這一成像模式稱為虛擬照相機模型。考慮圖1.17所示的成像系統,我們再次看到被觀察的物體和觀察者。在本例里,觀察者是風箱式照相機 所謂風箱式照相機是指透鏡位于照相機的前平面,膠片位于背平面,二者用可伸縮的側平面相連。因而可以自由地移動照相機的背平面,而不影響前平面。這為照相機成像過程提供了靈活性。我們將在第5章利用這種靈活性。,圖像形成在背部平面
42、的膠片上。為了模擬該成像系統的成像過程,需要認識以下幾個基本原則。第一,被觀察對象獨立于觀察者。因此可以預料到,在圖形庫中有各自不同的函數用于定義對象和觀察者。圖1.17 成像系統第二,利用簡單的三角函數公式就可以計算得到成像圖像。我們可以非常直觀、簡潔地推導出這些計算公式。考察圖1.18,它是一個照相機和一個對象的側視圖。左圖與針孔照相機的側視圖相似。我們把成像的底片移動到透鏡的前面就得到右邊的圖,在三維中這相當于圖1.19所示的情形。根據兩個三角形的相似關系就可以得到成像圖像。從物體上某一點到透鏡中心畫出一條直線,在該直線上可以找到這一點成像的位置。我們稱透鏡中心為投影中心,稱該直線為投影
43、線。注意到這樣的事實,即所有的投影線都通過投影中心。在虛擬照相機系統里,稱透鏡前面的底片平面為投影平面,成像點就是投影線與投影平面相交的點。在第5章里將詳細討論這個成像過程并推導出相關的計算公式。 (a)成像平面在照相機的背部 (b)成像平面移到照相機的前面圖1.18 成像過程的兩種等價視圖圖1.19 用虛擬照相機成像過程我們必須考慮到成像受底片的大小限制。正如前面所看到的,并不是所有的對象都能成像到針孔照相機里的底片平面上,照相機的視角反映了這種受限制程度。在虛擬照相機里,在透鏡前面的投影平面上放置一個裁剪矩形(或稱裁剪窗口),就可以把這種限制作用移到透鏡的前面(如圖1.20所示)。給定投影
44、中心、投影平面的位置和朝向以及裁剪窗口的大小,就可以確定哪些物體會出現在圖像上。(a)裁剪窗口初始位置 (b)移動裁剪窗口圖1.20 裁剪窗口1.7 程序員接口用戶與圖形系統的交互方式多種多樣。對于一個完備的自含的軟件包,如在CAD用戶群中經常使用的那些軟件,用戶通過鼠標和鍵盤等輸入設備與顯示系統進行交互,得到圖像。在一個典型的圖形應用程序里,如圖1.21所示的“畫筆”程序,用戶可以看到許多代表一定功能的菜單和圖標。用鼠標選擇這些菜單和圖標,可以控制軟件運行并生成圖像,而不必編寫任何程序。圖1.21 “畫筆”程序的界面當然必須有人開發這些應用程序的代碼。盡管有功能非常強大的商業軟件,但是我們之
45、中許多人還是不得不自己編寫一些個人的圖形應用程序(也許他們樂意這么做)。1.7.1 應用程序開發人員的接口應用程序與圖形系統的界面可以用一組函數描述,這組函數存在于某個圖形庫里。函數的詳細使用說明稱為應用程序開發人員接口(application programmers interface,簡稱API)。應用程序開發人員的系統模型如圖1.22所示,開發人員看到的只是這些API,因而他們不必了解圖形庫的硬件和軟件的實現細節。從應用程序開發人員的角度來看,API提供的函數在概念上必須與用戶希望用來定義圖像的模型相一致。圖1.22 應用程序開發人員的軟件模型1.7.2 筆式繪圖儀模型歷史上,大多數早期
46、的圖形系統都是二維的。現在我們從概念上把這類模型稱為筆式繪圖儀模型,取這個名字主要與這些系統所用的輸出設備有關。一個筆式繪圖儀(如圖1.23所示)有一個滑動導板,繪圖筆安裝在這個滑動導板上,這種結構保證繪圖筆可以在繪圖紙上沿二維正交方向移動。根據要繪制的圖像要求,把繪圖筆移動到某個位置,并且可以對繪圖筆進行提筆和落筆操作。這種筆式繪圖儀現在還在使用,它們非常適合于繪制大型設計圖。LOGO、GKS和PostScript等API軟件包都起源于這種模型。盡管它們特性各異,但其生成圖像的過程都相似,即面對一定大小的圖紙,用戶在二維圖紙表面上移動畫筆,以在圖紙上繪制出所需的圖像。圖1.23 筆式繪圖儀我
47、們可以用兩個函數描述這一類的圖形系統:moveto(x, y);lineto(x, y);函數moveto()把繪圖筆移動到繪圖紙上的(x, y)位置,但并不留下任何痕跡;函數lineto()從當前位置到(x, y)畫出一條直線,并把繪圖筆移動到(x, y)。如果再增加初始化程序和終止程序,以及設置繪圖筆顏色和線條粗細等功能,就得到了一個雖然簡單但完整的圖形系統。下面是這種系統的一個簡單的程序片段:moveto(0,0);lineto(1,0);lineto(1,1);lineto(0,1);lineto(0,0);這段程序可以生成圖1.24(a)所示的圖形。如果在上面程序段的后面增加以下程序
48、代碼:moveto(0,1);lineto(0.5,1.866);lineto(1.5,1.866);lineto(1.5,0.866);lineto(1,0);moveto(1,1);lineto(1.5,1.866);就得到如圖1.24(b)所示的一個斜投影立方體圖像。 (a)一個正方形 (b)一個立方體的投影圖1.24 筆式繪圖儀的輸出根據這種模型建立的圖形系統可以很好地解決實際應用中的一些問題,如印刷行業里的頁面設置等。頁面描述性語言PostScript就是這些思想的進一步推廣,它是控制打印機和排字機的標準程序語言。然而我們對三維世界更感興趣。但是我們不能把這種筆式繪圖儀模型推廣到三維
49、圖形系統。例如,當我們想利用這種筆式繪圖儀模型把一個三維物體繪制在二維畫板上時,不管是采用手工方法還是用計算機繪圖,都不得不考慮這樣的問題,即如何確定二維頁面上的點與三維物體的點之間的對應關系。正如在1.5節中所看到的,這些二維平面上的點實質上是三維空間點的投影。確定這些投影點的數學過程正是三角幾何的一個實際應用。我們將在第5章推導出投影的數學公式。掌握投影概念是理解三維作圖過程的最關鍵因素,然而用戶更愿意使用API工具包,因為它允許用戶在問題域里考慮繪圖問題,直接利用計算機自動完成投影過程的計算細節,而不必在程序里進行繁瑣的三角函數計算過程。這種方法大大方便了用戶在繪圖板上或在透視環境下繪制
50、出不同的投影圖像。有些用戶很難掌握在繪圖板上繪制各種投影圖,也很難掌握用透視畫法繪制三維對象,而這種方法大大方便了這些用戶。更重要的是,API投影計算過程的硬件和軟件相結合的實現方法比較可靠,而且比用戶自己編寫的任何投影計算程序都更有效。1.7.3 三維API函數虛擬照相機模型是OpenGL、PHIGS、Direct3D、VRML和JAVA-3D等常用API軟件包的基礎。針對虛擬照相機模型,API工具包應該含有用于定義以下對象的函數:l 對象。l 觀察者。l 光源。l 材質。我們通常把對象定義為頂點的集合。對于線段、矩形和多邊形等簡單的幾何對象,頂點與對象之間的關系非常簡單。但是對于一些較為復
51、雜的幾何對象,用頂點集定義對象,存在多種方法。例如,圓可以用圓周上的3個頂點定義,也可以用圓心和圓周上的一點定義。各種API工具包為用戶定義了大同小異的基本幾何對象集,這些基本幾何對象是那些能直接用硬件實現并快速顯示的幾何對象。這個基本幾何對象集通常包括點、線段、多邊形,有時還包括字符。OpenGL利用頂點列表定義基本幾何圖元。下面這段代碼通過5次函數調用定義一個三角形基本幾何圖元:glBegin(GL_POLYGON); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glVertex3f(0.0, 0.0, 1.0);glEnd(
52、);注意在上面的程序段里,再增加一些頂點,就可以定義任意的多邊形。如果把類型參數GL_POLYGON改為GL_LINE_TYPE,可以用頂點得到頂點之間的線段,如果改為GL_POINTS,就得到3個點。一些API工具包為用戶提供了可以直接在幀緩存里對像素進行讀寫的函數,一些API工具包提供了曲線和曲面基本幾何圖元。一般情況下,在應用程序里可以用一系列更簡單的基本幾何圖元逼近這些幾何圖元。OpenGL提供了幀緩存的讀寫功能和曲線、曲面等幾何對象。我們可以用多種不同的方式定義觀察者和照相機。各API工具包在照相機選取的靈活性及定義方法的多樣性方面也各不相同。 仔細觀察圖1.25所示的照相機,我們要
53、確定4類必要的參數:(1)位置。照相機的位置通常用照相機透鏡的中心位置描述(即投影中心)。(2)方向。當放置好照相機后,就可以定義一個照相機坐標系,該坐標系的原點在投影中心。照相機可以繞照相機坐標系的3個軸獨立地旋轉。(3)焦距。透鏡的焦距確定了底片上成像的大小,或等效地確定了照相機能看到的世界的大小。(4)底片平面。照相機的背面底片有長和寬的限制。在風箱式照相機里,以及在一些API工具包里,照相機背部底片的朝向可以獨立調整,獨立于透鏡的朝向。有很多不同的方法滿足上述參數要求。一種方法是利用坐標系變換公式確定照相機的位置和方位,這些變換公式可以把對象從空間坐標系變換到照相機坐標系。空間坐標系就
54、是定義頂點位置的坐標系。這種方法對編程實現非常有用,而且利用它還可以得到一個可調照相機能實現的所有視圖。從第5章開始我們將普遍使用這種方法。然而如果需要調節多個參數,反而不容易得到所需要的圖像。問題的部分原因在于虛擬照相機模型。經典的透視技術,如在建筑行業中經常采用的那種技術,過分強調觀察者和被觀察對象之間的關系,而忽略了二者之間的獨立性,而虛擬照相機模型非常強調這種獨立關系。對于圖1.26所示的立方體,用傳統方法得到立方體的兩點透視圖之所以正確,是因為觀察者與立方體的各表面之間存在特殊的關系(參閱練習1.6)。盡管OpenGL允許任意設置變換參數的值,但它也為我們提供了其他幾個非常有用的函數
55、。我們來分析下面兩個函數:gluLookAt(cop_x, cop_y, cop_z, at_x, at_y, at_z,);glPerspective(field_of_view, );第一個函數定義了照相機的投影中心位置和目標點位置,第二個函數定義透鏡的視角。但是建立于虛擬照相機模型上的API工具包如OpenGL、PHIGS、VRML都沒有函數用于定義照相機與對象之間的關系。 圖1.25 照相機參數 圖1.26 立方體兩點透視圖光源可以用光源的位置、光的強度、顏色和方向等屬性來定義,所以API工具包都提供有一系列函數用于定義光源的上述屬性。在定義對象時可以調用一系列函數定義對象的材質屬性。
56、光源和材質的屬性都依賴于光-材質相互作用模型,OpenGL API工具包支持光-材質相互作用模型。我們將在第6章里對它們進行討論。1.7.4 彩圖介紹從第2章開始,我們將詳細討論本書用到的OpenGL API函數。OpenGL允許用戶開發圖形應用程序。程序中定義的圖像可以由圖像成像過程的硬件和軟件實現自動生成。下面瀏覽一下用OpenGL API生成的一系列圖像。這一系列圖像反映了同一組對象從簡單繪制到復雜繪制的變化過程,不僅大致反映出本書中各主題的討論順序,也反映了過去三十多年里圖形學的演變過程。彩圖1是本書的封面和封底圖中一個行星的圖像。彩圖2是一個對象按線框模式繪制得到的結果。盡管一個對象
57、會有多個組成部件,盡管程序員會采用復雜的數據結構來描述這些部件及相互關系,但是對象的渲染結果只顯示這個對象的輪廓。這樣的圖像稱為對象的線框圖像,這是因為我們只看到對象表面上的邊線。如果用剛性的金屬絲做成一個框架,在邊與邊之間沒有任何材料,就得到這種線框圖像。在光柵式顯示器出現之前,計算機只能生成線框圖。彩圖3是對同一個對象采用平面多邊形方式繪制的結果。有些面不可見,因為在這些面與觀察者之間存在內部填充的表面,可以采用隱藏面消除(HSR)算法除掉這些隱藏面。大多數光柵顯示系統會在繪制線框圖像的同時用單一顏色填充多邊形內部區域,盡管是三維對象,但是每個表面只顯示單一顏色。早期的光柵顯示系統可以生成這種圖像。在第2、3章里,我們將討論如何得到由點、線段和多邊形等簡單對象組合而成的圖像。在第4、5章里,讀者將學習如何在三維空間中進行坐標系變換,以及如何獲得一個對象模型的隱藏面去除后的三維透 視圖。彩圖4顯示了光源和對象表面的平滑著色效果,它顯示了一個三維空間對象的光滑表面。我們在第6章介紹OpenGL中的明暗處理模型,這些明暗處理模型在一些高端圖形工作站用硬件方法實現,因而這些
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45498.2-2025中華人民共和國社會保障卡一卡通規范第2部分:應用規范
- GB/T 45454-2025壓縮模和注射模澆注系統零件
- 課題申報書超字怎么辦
- 證券分析師的職責與技能試題及答案
- 高通過率:微生物檢驗技師試題及答案
- 項目管理中的法律合規要求試題及答案
- 微生物檢驗技師證書考試中備考的試題
- 微生物檢驗新研究成果的試題與答案
- 小班兒童安全守則教育計劃
- 創造思想的碰撞計劃
- 養殖業勞動合同樣本
- 保險公司增額終身壽主講課件
- 上海市2023-2024學年五年級下冊第1-3單元期中模擬測試數學試卷(滬教版)
- 廠房屋頂分布式光伏電站工程日常質量巡查記錄表
- 中考語文真題雙向細目表
- 老年護理中的跌倒風險評估與干預計劃
- 《小兒支氣管炎肺炎》課件
- 基于時序數據的深度學習異常檢測技術
- 第六章 內輪廓加工
- 工程力學答案
- 2023年新高考生物江蘇卷試題真題答案解析版(精校打印)
評論
0/150
提交評論