計(jì)算機(jī)圖形學(xué) 真實(shí)感圖形生成技術(shù)_第1頁(yè)
計(jì)算機(jī)圖形學(xué) 真實(shí)感圖形生成技術(shù)_第2頁(yè)
計(jì)算機(jī)圖形學(xué) 真實(shí)感圖形生成技術(shù)_第3頁(yè)
計(jì)算機(jī)圖形學(xué) 真實(shí)感圖形生成技術(shù)_第4頁(yè)
計(jì)算機(jī)圖形學(xué) 真實(shí)感圖形生成技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2022/7/251 第八章 真實(shí)感圖形生成技術(shù) 用計(jì)算機(jī)生成三維形體的真實(shí)感圖形,是計(jì)算機(jī)圖形學(xué)研究的重要內(nèi)容之一。真實(shí)感圖形生成技術(shù)在仿真模擬、幾何造型、計(jì)算機(jī)動(dòng)畫(huà)制作、影視廣告、科學(xué)計(jì)算可視化、自然景物模擬、醫(yī)學(xué)、氣象學(xué)、地質(zhì)學(xué)等領(lǐng)域都有廣泛應(yīng)用。近幾年來(lái)隨著多色彩高分辨率光柵圖形設(shè)備的普及,真實(shí)感圖形生成技術(shù)開(kāi)展迅速。 真實(shí)感圖形生成技術(shù)涉及到的主要問(wèn)題包括隱藏線面的消除、明暗處理、陰影處理、紋理處理等,缺乏這些處理,圖形會(huì)缺乏真實(shí)感或真實(shí)感缺乏。2022/7/252 8.1 隱藏線面的消除 在用計(jì)算機(jī)生成三維圖形時(shí),形體的所有局部都將被表示,不管是可見(jiàn)的還是不可見(jiàn)的,這樣的圖形顯示出

2、來(lái)形狀是不清楚的,甚至是不確定的。圖1a所示是一個(gè)通過(guò)棱邊表示的立方體的圖形,如果不消隱不易區(qū)分。通過(guò)適當(dāng)刪除不可見(jiàn)的隱藏局部,可以得到表示明確的圖形。圖1b是觀察點(diǎn)在立方體的前上方的消隱圖,圖1c是觀察點(diǎn)位于立方體的前下方消隱圖,消隱圖表示了明確的立體感形體。圖12022/7/253 觀察點(diǎn)確定后,找出并消除圖形中不可見(jiàn)的局部,稱(chēng)為消隱。經(jīng)過(guò)消隱得到的圖形稱(chēng)為消隱圖。 消除隱藏線和隱藏面是計(jì)算機(jī)圖形學(xué)中一個(gè)較為困難的問(wèn)題,消隱算法是決定相對(duì)于空間給定位置的觀察者,哪些棱邊、外表或物體是可見(jiàn)的,哪些是不可見(jiàn)的。消隱不僅與消隱對(duì)象有關(guān),還與觀察點(diǎn)、觀察方向、投影面等的設(shè)置方位有關(guān)。改變這些設(shè)置,

3、物體上某些可見(jiàn)的局部將會(huì)變成不可見(jiàn),某些不可見(jiàn)的局部又會(huì)變成可見(jiàn)。 雖然各種消隱算法的根本思想有所不同,但它們大多采用了排序和相關(guān)性以提高效率。排序的主要目的是區(qū)分體、面、邊、點(diǎn)與觀察點(diǎn)間幾何距離的遠(yuǎn)近。因?yàn)橐粋€(gè)物體離觀察點(diǎn)愈遠(yuǎn),它愈有可能被另一距觀察點(diǎn)較近的物體局部地或全部遮擋。消隱算法的效率在很大程度上取決于排序的效率。通常利用畫(huà)面在局部區(qū)域內(nèi)的相關(guān)性來(lái)提高排序過(guò)程的效率。2022/7/254 消隱算法一般可以分為兩類(lèi)。如果算法是在物體所定義的空間實(shí)現(xiàn),那么這種算法稱(chēng)為對(duì)象空間算法;如果算法是在物體投影后的屏幕坐標(biāo)空間實(shí)現(xiàn),那么這種算法就稱(chēng)為圖象空間算法。一般說(shuō)來(lái),對(duì)象空間算法有比較高的精

4、度,而圖象空間算法在精度上受屏幕分辨率的限制,但可以方便地利用圖象空間中各種相關(guān)性獲得較高的計(jì)算效率。8.1.1 凸多面體的消隱算法 在消隱問(wèn)題中,凸多面體是最簡(jiǎn)單情形。凸多面體是由多個(gè)凸多邊形平面包圍而成的立體,連接形體上不屬于同一外表的任意兩點(diǎn)的線段完全位于形體的內(nèi)部。對(duì)于單個(gè)凸多面體,背向觀察點(diǎn)的面是不可見(jiàn)面,如圖2所示。因此,只要判斷出這些“朝后面,即可到達(dá)隱藏面消除的目的。2022/7/255圖2 構(gòu)成多面體的每個(gè)平面都有其法線。通常規(guī)定法線的方向是由多面體的內(nèi)部指向多面體的外部,稱(chēng)為“外法線。2022/7/256假定在右手坐標(biāo)系中,觀察點(diǎn)位于原點(diǎn),投影面平行于XY坐標(biāo)平面,以Z軸作

5、為深度坐標(biāo)軸,視線平行于Z軸,如圖3所示,那么平面外法線同Z軸方向的夾角,就是外法線同視線的夾角。很顯然,對(duì)于單個(gè)凸多面體,當(dāng)外法線同視線的夾角小于90時(shí),其平面背向觀察點(diǎn)為不可見(jiàn)面。圖32022/7/257設(shè)平面外法線同Z軸方向的夾角為,那么cos為單位平面外法線矢量在Z軸上的分量。角同可見(jiàn)性的關(guān)系為: 1當(dāng) 090 時(shí),cos0,此面背向觀察者為不可見(jiàn)面。 2當(dāng) 90 時(shí),cos0,此面平行于Z軸,可以認(rèn)為是不可見(jiàn)面。 3當(dāng) 90180 時(shí),cos0,此面朝向觀察者的,為可見(jiàn)面。 設(shè)平面方程為 Ax+By+Cz+D=0法向矢量為 NAiBjCk那么cosC/|N|。作為判斷依據(jù),只需要知道

6、cos的正負(fù)號(hào)就夠了。因?yàn)閨N|恒大于 0,所以cos的符號(hào)由C決定,因此,當(dāng)C0 時(shí),為可見(jiàn)面。當(dāng)C0時(shí),為不可見(jiàn)面。2022/7/258 由于三點(diǎn)可以構(gòu)成一個(gè)平面,和三點(diǎn)可以構(gòu)成兩個(gè)矢量,由兩矢量的叉積可以求出平面的法線。對(duì)于凸多面體,任取構(gòu)成平面多邊形的三個(gè)相鄰點(diǎn)P0(x0,y0,z0),P1(x1,y1,z1),P2(x2,y2,z2),按右手規(guī)那么確定點(diǎn)的順序,此時(shí)有: 為了決定一個(gè)凸多面體的不可見(jiàn)面,對(duì)于每一個(gè)面按上述公式進(jìn)行計(jì)算,當(dāng)C0時(shí)為不可見(jiàn)面。 對(duì)于單個(gè)凸多面體,該方法可判別出所有隱藏面,因?yàn)槊總€(gè)面或是完全可見(jiàn),或是完全不可見(jiàn)。對(duì)于其它形體,如凹多面體或由多個(gè)物體組成的復(fù)雜

7、形體,那么還需進(jìn)行更多的測(cè)試來(lái)檢查是否存在被其它面或其它物體完全或局部遮擋的外表。通常,凸多面體消隱處理可消除一半左右的隱藏面。2022/7/259凸多面體消隱演示例如:2022/7/25108.1.2 畫(huà)家算法 畫(huà)家創(chuàng)作一幅畫(huà)的過(guò)程是先畫(huà)背景,然后畫(huà)中間景物,最后才畫(huà)近景。這樣,每一層總是在前一層的景物上覆蓋,從而解決了隱藏面或可見(jiàn)性問(wèn)題。采用同樣的技術(shù),首先將形體的所有面根據(jù)它們與觀察點(diǎn)的距離排序,然后按距離遞減順序逐個(gè)將各面顯示出來(lái),由于當(dāng)重迭時(shí),后顯示的畫(huà)面會(huì)覆蓋先顯示的畫(huà)面,這樣就可以實(shí)現(xiàn)消除隱藏面的目的。這種隱藏面消除算法通常稱(chēng)為畫(huà)家算法。 畫(huà)家算法也稱(chēng)表優(yōu)先級(jí)算法或深度優(yōu)先排序算

8、法。這種算法排序操作同時(shí)在對(duì)象空間和圖象空間完成,而在圖象空間產(chǎn)生消隱圖。實(shí)現(xiàn)時(shí)首先以深度優(yōu)先級(jí)進(jìn)行排序,距觀察點(diǎn)遠(yuǎn)的面優(yōu)先級(jí)低,近的面優(yōu)先級(jí)高,以此建立一張深度優(yōu)先級(jí)表。然后按優(yōu)先級(jí)表順序?qū)⒏髅嫠腿霂彌_器進(jìn)行顯示。2022/7/2511 深度優(yōu)先級(jí)表的建立是動(dòng)態(tài)進(jìn)行的。假定觀察方向同Z軸同向,那么最初可按各面的最小z值排序。但這一初步排序可能出現(xiàn)過(guò)失,如圖4所示的情況。圖中盡管面S1的最小z值小于面S2的最小z值,但正確的順序是面S2位于面S1前。因此在實(shí)際將z值最大的面S寫(xiě)入幀緩沖器之前,需與其它面比較以確定是否在Z方向存在重疊。假設(shè)無(wú)重疊,那么對(duì)S進(jìn)行寫(xiě)入,假設(shè)存在重疊,那么需作一些比

9、較以決定是否有必要重新排序。如果存在兩面相交和循環(huán)遮擋,如圖5中所示的情況,這時(shí)簡(jiǎn)單的排序是無(wú)法解決問(wèn)題的,必須求交分割后再進(jìn)行排序。圖4圖52022/7/2512 下面給出這種算法過(guò)程的簡(jiǎn)單描述 (1計(jì)算各面最小z值z(mì)min,并以此值的優(yōu)先級(jí)進(jìn)行排序,建立初步的深度優(yōu)先表; (2表空結(jié)束。否那么取表中深度最大的面Sn,檢查表中其它各面Sk(k=0,1,.,n-1)與Sn是否在Z方向存在重疊的關(guān)系。存在,記重疊面為Sj轉(zhuǎn)(3)。否那么,將Sn寫(xiě)入幀緩沖器,n=n-1轉(zhuǎn)(2); (3)檢查Sn是否遮擋Sj,不遮擋那么將Sn寫(xiě)入幀緩存器,n=n-1轉(zhuǎn)(2)。否那么,交換Sn和Sj在表中位置,轉(zhuǎn)(2

10、)。如果Sn和Sj已經(jīng)交換過(guò)位置,那么兩面交叉遮擋,轉(zhuǎn)(4); (4)用Sn和Sj的交線分割Sn為兩局部,轉(zhuǎn)(1)。 畫(huà)家算法的優(yōu)點(diǎn)是簡(jiǎn)單,容易實(shí)現(xiàn),缺點(diǎn)是算法中的深度排序計(jì)算量大。2022/7/25138.1.3 深度緩沖器算法 深度緩沖器算法是一種圖象空間消隱算法。由于一般采用Z軸方向?yàn)橛^察方向,沿Z軸計(jì)算深度,所以此方法也稱(chēng)為z緩沖器算法。它需要兩個(gè)緩沖器,一個(gè)是深度緩沖器,用于保存外表上各象素點(diǎn)(x,y)所對(duì)應(yīng)的深度值z(mì),一個(gè)是刷新緩沖器,用于保存各點(diǎn)的屬性值。兩個(gè)緩沖器的大小與屏幕上象素點(diǎn)的個(gè)數(shù)相同,也與顯示器幀緩沖器的單元個(gè)數(shù)相同。 深度緩沖器算法的原理是,對(duì)一坐標(biāo)(x,y),查找

11、最小的z(x,y)值。對(duì)每一象素計(jì)算z(x,y)值并與已經(jīng)存在z緩沖器中該象素的原深度值z(mì)比較。如果z(x,y)小于原z值那么替換原值,同時(shí)用當(dāng)前點(diǎn)的屬性更新原屬性。算法的最大優(yōu)點(diǎn)在于簡(jiǎn)單,它可輕而易舉地處理任意復(fù)雜的畫(huà)面。因?yàn)閳D象空間的大小是固定的,計(jì)算量最多隨畫(huà)面復(fù)雜度線性增長(zhǎng)。2022/7/2514 深度緩沖器算法可描述如下: (1) 刷新緩沖器置成背景光強(qiáng)或顏色; (2) 深度緩沖器置成最大z值; (3) 以任意順序掃描各多邊形: 對(duì)于多邊形中的每一象素(x,y,z),將z(x,y)與深度緩沖器中存儲(chǔ)值Zbuffer(x,y) 進(jìn)行比較,假設(shè)z(x,y)Zbuffer(x,y),那么將

12、此點(diǎn)屬性寫(xiě)入刷新緩沖器,且用z(x,y)重置Zbuffer(x,y); (4) 所有多邊形都處理完后,顯示消隱圖。 深度緩沖器算法便于硬件實(shí)現(xiàn)。實(shí)際上,在當(dāng)今生產(chǎn)的大多數(shù)高檔圖形工作站,除了幀緩存外,還帶有用于消隱的深度緩存,從而克服了深度緩存算法占用大量存儲(chǔ)單元的缺點(diǎn)。2022/7/25158.1.4 區(qū)域細(xì)分算法 區(qū)域細(xì)分算法也稱(chēng)為Warnock算法。這種算法在圖像空間中實(shí)現(xiàn)。該算法充分利用圖形的區(qū)域連貫性,在連續(xù)的區(qū)域上確定可見(jiàn)線面及其屬性。它既可以用于消除隱藏線,也可以用于消除隱面,適用于解決多邊形所表示的畫(huà)面消隱問(wèn)題。 區(qū)域細(xì)分算法的根本思想是,把形體投影到全屏幕窗口上,然后遞歸地分

13、割窗口,直到窗口內(nèi)僅包含單個(gè)可見(jiàn)面或不包含任何面。算法先檢測(cè)初始窗口是否包含圖形,如果不包含,那么按背景色顯示,假設(shè)窗口內(nèi)只有單個(gè)面,那么把該面顯示出來(lái)。否那么,當(dāng)窗口內(nèi)含有兩個(gè)以上的面時(shí),那么把窗口等分成四個(gè)小窗口,對(duì)每個(gè)小窗口再作上述同樣的處理。這樣反復(fù)地進(jìn)行下去,如果窗口細(xì)分到象素大小,而窗口內(nèi)仍有兩個(gè)以上的面,這時(shí)不必再繼續(xù)分割,只要取窗口內(nèi)最近的可見(jiàn)面的顏色或所有可見(jiàn)面的平均色作為該象素的值。2022/7/2516 細(xì)分過(guò)程如圖6所示,算法每次將區(qū)域分割為四等分,類(lèi)似于組織一棵四叉樹(shù)。這樣,即使是一個(gè)1024l024分辨率的窗口被細(xì)分10次以后,也僅能使每個(gè)單元覆蓋一個(gè)象素。圖620

14、22/7/2517 窗口與多邊形面的相互關(guān)系可分為四種:內(nèi)含、相交、包圍和別離。內(nèi)含指的是多邊形全部落在窗口內(nèi);相交指的是多邊形一局部在窗口內(nèi),另一局部在窗口外;包圍是指窗口包含在多邊形內(nèi);別離指的是多邊形完全在窗口外。四種關(guān)系如圖7所示。圖72022/7/2518 我們可根據(jù)這四種關(guān)系來(lái)確定一個(gè)窗口是否需要繼續(xù)細(xì)分。假設(shè)以下條件之一為真,那么無(wú)須再對(duì)窗口進(jìn)行細(xì)分: 所有多邊形均為窗口的別離多邊形,此時(shí)窗口內(nèi)為空; 在窗口內(nèi)只有一個(gè)內(nèi)含多邊形; 窗口只與一個(gè)多邊形相交; 窗口只被一個(gè)多邊形所包圍或包圍多邊形遮擋了其它所有多邊形。 通過(guò)檢查所有多邊形的包圍盒與窗口邊界的關(guān)系可以實(shí)現(xiàn)條件的檢測(cè)。利

15、用XY平面上的包圍盒可以判別內(nèi)含多邊形。窗口和多邊形相交關(guān)系可以借助于裁剪算法來(lái)解決。利用平面方程計(jì)算可以測(cè)定所有包圍多邊形、重疊多邊形和內(nèi)含多邊形在窗口邊界四頂點(diǎn)處的深度值,假設(shè)某多邊形的深度值小于其它所有多邊形,那么條件結(jié)果為真。 2022/7/2519區(qū)域細(xì)分算法可以借助于堆棧結(jié)構(gòu)實(shí)現(xiàn),算法描述如下:(1)將初始窗口入棧;(2) ??战Y(jié)束。否那么,取出棧頂窗口轉(zhuǎn)步驟(3);(3) 檢測(cè)確定當(dāng)前窗口與多邊形關(guān)系,假設(shè) A條件為真,以背景顏色顯示當(dāng)前窗口,轉(zhuǎn)步驟(2); B條件為真,多邊形內(nèi)區(qū)域,以該多邊形顏色顯示,其它區(qū)域以背景顏色顯示,轉(zhuǎn)步驟(2); C條件為真,相交多邊形位于窗口內(nèi)的區(qū)

16、域以該多邊形顏色顯示,其它區(qū)域以背景顏色顯示,轉(zhuǎn)步驟(2); D條件為真,以包圍多邊形顏色顯示當(dāng)前窗口,轉(zhuǎn)步驟(2); E條件均不滿足,轉(zhuǎn)步驟(4)。(4) 對(duì)當(dāng)前窗口進(jìn)行再細(xì)分,細(xì)分后的子窗口存入堆棧,轉(zhuǎn)(2)。2022/7/2520 8.2 簡(jiǎn)單光照模型 當(dāng)光照射到一個(gè)不透明的物體外表時(shí),局部被反射,局部被吸收并轉(zhuǎn)化為熱。對(duì)一個(gè)透明的外表,局部入射光被反射,而另一局部被透射。其中,反射或透射局部的光使物體可見(jiàn)。如果入射光全部被吸收,物體將不可見(jiàn),該物體稱(chēng)為黑體。一物體外表呈現(xiàn)的顏色是由物體外表向視線方向輻射的光能中各種波長(zhǎng)的分布所決定的。光能中被吸收、反射或透射的數(shù)量決定于光的波長(zhǎng)和物體的

17、外表特性。由于光照射到物體外表產(chǎn)生的現(xiàn)象是很復(fù)雜的,它與光源的性質(zhì)、形狀、數(shù)量、位置有關(guān),還與物體的幾何形狀、光學(xué)性質(zhì)、外表紋理等許多因素有關(guān),甚至與人眼對(duì)光的生理與心理視覺(jué)因素有關(guān),我們不可能把這一切都準(zhǔn)確計(jì)算出來(lái)。我們將討論計(jì)算光強(qiáng)度的一些較為簡(jiǎn)單的方法,這些經(jīng)驗(yàn)?zāi)P蜑橛?jì)算物體外表某點(diǎn)處的光強(qiáng)度提供了簡(jiǎn)單有效的途徑,并能在許多應(yīng)用場(chǎng)合獲得較好的效果。2022/7/25218.2.1 環(huán)境光 在實(shí)際場(chǎng)景中,一個(gè)物體即使不直接暴露于光源之下,還會(huì)接收到從周?chē)矬w散射出來(lái)的光,這種光是由于周?chē)魑矬w被照明后屢次反射所產(chǎn)生的。例如從墻壁、地板及天花板等反射回來(lái)的光。這種光是一種分布光源,稱(chēng)為環(huán)境光

18、。環(huán)境光的特點(diǎn)是照射在物體上的光來(lái)自周?chē)鱾€(gè)方向,又均勻地向各個(gè)方向反射。由于處理分布光源所需計(jì)算量甚大,通常將這種光所產(chǎn)生的效應(yīng)簡(jiǎn)化為在各個(gè)方向都有均勻的光強(qiáng)度。這樣,每個(gè)物體外表都得到同樣大小的光照,且反射光相對(duì)于該物體外表亦為常數(shù),即反射光與觀察方向和物體外表的朝向無(wú)關(guān)。但不同物體的反射光強(qiáng)度取決于物體的外表特性,如果用Ia表示環(huán)境光的大小,那么外表上一點(diǎn)對(duì)環(huán)境光的反射強(qiáng)度Ie可表示為 IekaIa 0ka1式中ka為由物體外表材料屬性決定的環(huán)境光反射系數(shù)。2022/7/25228.2.2 漫反射光 我們可以用光源來(lái)表示所有發(fā)出輻射能量的物體,如燈泡或太陽(yáng)。點(diǎn)光源是光源的最簡(jiǎn)單模型。這種

19、光源模型是對(duì)場(chǎng)景中比物體小得多的光源的適宜的逼近。離場(chǎng)景足夠遠(yuǎn)的光源,如太陽(yáng),也可用點(diǎn)光源模型來(lái)較好的模擬。我們?cè)谙旅娣瓷涔獾挠懻撝屑俣ㄊ褂命c(diǎn)光源模型。 從物體外表反射出來(lái)的光決定于光源中光的成分、光線的方向、光源的幾何性質(zhì)以及物體外表的朝向和外表的材料屬性等。物體外表的反射光又可分為漫反射光和鏡面反射光。漫反射光可以認(rèn)為是光穿過(guò)物體外表并被吸收,然后重新發(fā)射出來(lái)的光,漫反射光均勻地散布在各個(gè)方向,因此同觀察者的位置無(wú)關(guān)。2022/7/2523 朗伯(lambert)余弦定律總結(jié)了點(diǎn)光源所發(fā)出的光照射在一個(gè)完全漫反射體上時(shí)光的反射法那么。根據(jù)朗伯定律,一個(gè)完全漫射體上反射出來(lái)的光強(qiáng)度同入射光與

20、物體外表法線之間夾角的余弦成正比。即 IdkdIlcos 01式中Id為漫反射光強(qiáng)度;Il為從一點(diǎn)光源所發(fā)出的入射光的光強(qiáng)度;kd為決定于物體外表材料屬性的漫反射系數(shù),0kd1;為入射光與外表法向量之間的夾角,如以下圖所示。2022/7/2524 反射光的光強(qiáng)度是光波長(zhǎng)的函數(shù),然而在簡(jiǎn)單的光照模型中,通常假定光波長(zhǎng)為常數(shù)。假設(shè)N為物體外表的單位法向量,L為從外表上一點(diǎn)指向點(diǎn)光源的單位矢量,那么cos= NL,那么(8-3)可以寫(xiě)成: IdkdIl(NL)2022/7/25258.2.3 鏡面反射光 除了漫反射,光源照射物體外表還會(huì)產(chǎn)生高光或強(qiáng)光,這種現(xiàn)象稱(chēng)為鏡面反射。這種高光效果在光滑的物體外

21、表上很明顯,如磨光的金屬外表,而對(duì)于陰暗物體外表那么效果較差。 鏡面反射光是具有一定方向的反射光。鏡面反射角等于入射角,它們位于外表的單位法向量N的兩側(cè),如圖9所示。用R表示鏡面反射方向的單位矢量,L表示指向點(diǎn)光源的單位矢量,V為指向視點(diǎn)的單位矢量,是V 與R之間的夾角。對(duì)于一個(gè)理想的鏡面反射,入射光僅在鏡面反射方向有反射現(xiàn)象,即僅當(dāng)V與R重合時(shí)才能觀察到反射光,而在其它方向都看不到反射光。對(duì)于這種光滑的反射面,鏡面的反射光強(qiáng)比漫反射的光強(qiáng)和環(huán)境光的光強(qiáng)高出很多倍。2022/7/2526圖92022/7/2527對(duì)于一般光滑外表,由于外表具有一定粗糙度,其外表實(shí)際上是由許多朝向不同的微小外表組

22、成,鏡面反射方向分布在R周?chē)邢薹秶鷥?nèi)。較光滑外表的鏡面反射范圍較小,而粗糙的物體外表那么有較大的鏡面反射范圍。Phong提出一個(gè)計(jì)算鏡面反射的經(jīng)驗(yàn)公式,稱(chēng)為Phong模型。公式用余弦函數(shù)的冪次來(lái)模擬鏡面反射光的空間分布,可表示為: IsksIlcosn 式中Is為鏡面反射光強(qiáng)度;Il為入射光的光強(qiáng)度;ks為決定于物體外表材料屬性的鏡面反射系數(shù),它是入射角和入射光波長(zhǎng)的函數(shù),很難精確得到,實(shí)際應(yīng)用中常以美學(xué)觀點(diǎn)或?qū)嶒?yàn)方法取一常數(shù),0ks1;鏡面反射光強(qiáng)度與cosn成正比,090,因而0cosn1。2022/7/2528 n為鏡面反射光的會(huì)聚系數(shù),其值同被觀察物體外表的光滑度有關(guān),會(huì)聚性好的光滑

23、外表,如金屬外表,n值較大,而粗糙外表如紙張外表的n值那么較小。n值一般取12000,圖10表示了n對(duì)鏡面反射角度范圍的影響。圖102022/7/2529 當(dāng)視點(diǎn)取在鏡面反射方向附近時(shí),觀察者接受到鏡面反射光較強(qiáng),而偏離這一方向觀察時(shí),接受到鏡面反射光就會(huì)減弱,故高光隨著觀察者的位置變化而變化。另外,由于鏡面反射光是經(jīng)物體外外表直接反射而產(chǎn)生的,與漫反射光不同,高光具有與入射光同樣性質(zhì),而與物體外表顏色無(wú)關(guān)。 假設(shè)R與V已規(guī)格化為單位向量,那么式(8-5)可改寫(xiě)為: IsksIl(RV)n 綜上所述,從視點(diǎn)觀察到物體外表上任一點(diǎn)處的顏色和亮度I應(yīng)為反射光強(qiáng)度Ie、漫反射光強(qiáng)度Id及鏡面反射光強(qiáng)

24、度Is的總和,即 IIeIdIs將各入上式,那么得 IkaIakdIl(NL)ksIl(RV)n 2022/7/2530 另外,反射光強(qiáng)度還和物體與點(diǎn)光源的距離d的平方成反比,即物體離光源愈遠(yuǎn),顯的愈暗。因此,假設(shè)要得到真實(shí)感的光照效果,在光照明模型中必須考慮這一因素。然而,假設(shè)采用因子1/d2來(lái)進(jìn)行光強(qiáng)度衰減,簡(jiǎn)單的點(diǎn)光源照明并不總能產(chǎn)生真實(shí)感的圖形。當(dāng)d很小時(shí),1/d2會(huì)產(chǎn)生過(guò)大的強(qiáng)度變化,而d很大時(shí)反射光強(qiáng)度項(xiàng)將無(wú)意義。另外,人對(duì)物體的視覺(jué)也同視點(diǎn)與物體的距離有關(guān),因此綜合考慮,可以用以下修正公式,它是根據(jù)經(jīng)驗(yàn),取同距離的關(guān)系為線性衰減。 IkaIaIl(kd(NL)ks(RV)n)/(

25、d+K)常數(shù)項(xiàng)K為一調(diào)整常數(shù),它的存在可以防止當(dāng)d很小時(shí)1/d值太大。2022/7/2531 上式就是計(jì)算機(jī)圖形學(xué)中通常使用的簡(jiǎn)單光照模型,也稱(chēng)為明暗函數(shù),用它可以計(jì)算出物體外表上每一象素處的光強(qiáng)或明暗色調(diào)。上式的計(jì)算量是很大的,尤其是鏡面反射方向矢量R的計(jì)算。使用矢量L與V間的半角矢量H來(lái)計(jì)算鏡面反射范圍可得到簡(jiǎn)化的Phong模型。只須以NH替代Phong模型中的點(diǎn)積VR。這等于用cos計(jì)算來(lái)替代cos,如圖11所示。半角矢量可從下式計(jì)算得到: H(LV)/2替換后(8-8)可以寫(xiě)為: IkaIaIl(kd(NL)ks(NH)n)/(d+K)假設(shè)觀察點(diǎn)與光源離物體外表足夠遠(yuǎn),那么V與L可以看

26、作為常量,那么H亦為常量。就是說(shuō)只要計(jì)算一次H的值就可以,但R是隨N變化而改變的,這就是用NH近似VR的好處。2022/7/2532圖112022/7/25338.2.4 多點(diǎn)光源和顏色 假設(shè)存在多個(gè)點(diǎn)光源,那么物體外表上的反射光強(qiáng)度是各個(gè)點(diǎn)光源照射效果的線性相加,這時(shí)光照模型為: IkaIa (kd(NLi)ks(NHi)n) 其中,m為點(diǎn)光源的數(shù)目。大多數(shù)真實(shí)感圖形均為彩色圖形,要生成一幅彩色圖形,需要用RGB三基色分量來(lái)標(biāo)識(shí)光源強(qiáng)度和物體外表顏色,并根據(jù)光照模型來(lái)計(jì)算反射光中的RGB分量。但由于鏡面反射光的顏色通常取決于入射光的顏色,因此計(jì)算RGB分量時(shí)ks取相同的常數(shù)值。將式(8-10

27、)改寫(xiě)成RGB三個(gè)分量的形式為: IRkaRIaRIlR(kdR(NL)ks(NH)n)/(d+K) IGkaGIaGIlG(kdG(NL)ks(NH)n/(d+K) IBkaBIaBIlB(kdB(NL)ks(NH)n/(d+K)2022/7/2534計(jì)算出RGB三個(gè)基色分量的強(qiáng)度,用來(lái)控制RGB彩色顯示器中相應(yīng)的電子槍?zhuān)涂梢垣@得彩色圖形。8.3 透明處理 前面介紹的光照模型假定所考慮的物體外表是不透明的。但有些物體是透明的,如水、玻璃等。一個(gè)透明物體的外表會(huì)同時(shí)產(chǎn)生反射光和折射光。當(dāng)光線從一種傳播介質(zhì)進(jìn)入另一種傳播介質(zhì)時(shí),例如從空氣進(jìn)入水中時(shí),光線會(huì)由于折射而產(chǎn)生彎曲。光線彎曲的程度由S

28、nell定律決定,該定律指出折射光線與入射光線位于同一平面內(nèi),而且入射角與折射角之間存在以下關(guān)系: 1sin=2sin式中,1和2分別為光線在第一種介質(zhì)和第二種介質(zhì)中的折射率,為光線入射角,為折射角,圖12為示意圖。實(shí)際中,沒(méi)有那種材料能夠透過(guò)全部入射光,總有一局部被反射出去。2022/7/2535圖12 入射與折射的關(guān)系2022/7/2536 光有規(guī)那么透射和漫透射。透明材料如玻璃等會(huì)產(chǎn)生規(guī)那么透射,透過(guò)透明材料觀察物體仍然是清晰的。如果透射光線是發(fā)散的,那么就會(huì)形成漫透射,發(fā)生漫透射的材料呈現(xiàn)朦朧的半透明狀態(tài)。漫透射計(jì)算復(fù)雜,大多數(shù)光照模型僅考慮規(guī)那么透射。 當(dāng)要表示一個(gè)透明外表時(shí),光強(qiáng)度

29、計(jì)算公式必須進(jìn)行修改,一方面要考慮由于透射的原因,外表反射光強(qiáng)度的減弱,另一方面還要考慮外表背后物體的反射光穿過(guò)透明外表,對(duì)外表總光強(qiáng)度的增加,如圖13所示。 為了加速光強(qiáng)度的計(jì)算,簡(jiǎn)單的透明算法不考慮折射導(dǎo)致的路徑變化,這樣折射角總是與入射角相同,也不考慮光線在媒體中所經(jīng)路線長(zhǎng)度對(duì)光強(qiáng)的影響。對(duì)透明的可見(jiàn)面,取它與同它相距最近的另一外表光強(qiáng)的線性組合,那么總的光強(qiáng)度可表示為: I=ktIt+(1-kt)Ic 0kt1其中,Ic為透明可見(jiàn)面的反射光強(qiáng)度,It為透明可見(jiàn)面后第一個(gè)可見(jiàn)外表上的光強(qiáng)度。kt為透明可見(jiàn)面的透明度。kt=0對(duì)應(yīng)不透明面,光線無(wú)透射。kt=1對(duì)應(yīng)不可見(jiàn)面,光線全部透射。I

30、c和It可用前面介紹的光照模型計(jì)算。2022/7/2537 假設(shè)It所對(duì)應(yīng)外表也是透明面,那么上述算法可以遞歸地使用,直到遇到一個(gè)不透明面或背景時(shí)為止。 透明處理還可以用于顯示復(fù)雜物體或空間的內(nèi)部結(jié)構(gòu)。為每一多邊形外表均設(shè)一透明度,透明度的初始值均取為1,繪制出物體的外形消隱圖。通過(guò)有選擇地將某些外表的透明度改為0,即將它們當(dāng)做看不見(jiàn)的面處理,這樣再次繪制畫(huà)面時(shí),就會(huì)顯示出物體的內(nèi)部結(jié)構(gòu)。圖132022/7/25388.4.1 外表法線的計(jì)算 但為了提高計(jì)算速度,一般用多邊形平面逼近曲面。對(duì)于多邊形平面,可根據(jù)其平面方程的系數(shù),決定平面的法向量,平面內(nèi)所有點(diǎn)的法向量是相同的。而多邊形平面在頂點(diǎn)

31、處的法向量可取包圍該頂點(diǎn)的各多邊形平面法向量的平均值。如圖14中,頂點(diǎn)V處的近似法向量為: NV(N1N2.Nn)/n其中,n為包圍頂點(diǎn)的平面?zhèn)€數(shù),圖中例如n=4。如圖142022/7/2539 但多邊形一般是由頂點(diǎn)和棱邊存儲(chǔ)的,在各多邊形平面方程未知的情況下,頂點(diǎn)處的法向量可取交于此頂點(diǎn)的各棱邊叉積的平均值。如圖15中,頂點(diǎn)V處的法向量可由下式計(jì)算: NVVV1VV2VV2VV3VV3VV4VV4VV1上式近似法向量的模依賴(lài)于圍繞頂點(diǎn)的各多邊形棱邊數(shù)和長(zhǎng)度。多邊形愈大,棱邊愈長(zhǎng),模愈大,實(shí)際使用中應(yīng)該單位化。圖152022/7/2540 當(dāng)觀察畫(huà)面上具有相同光強(qiáng)度的區(qū)域時(shí),在其邊界處眼睛所感

32、受到的明亮度常常會(huì)不同于實(shí)際值。眼睛的這一視覺(jué)特性使得光強(qiáng)度為常數(shù)的區(qū)域看上去似乎是光強(qiáng)度發(fā)生了變化,這一現(xiàn)象稱(chēng)之為馬赫(Mach)帶效應(yīng)。在光強(qiáng)度發(fā)生急劇變化的地方會(huì)出現(xiàn)馬赫帶效應(yīng),這時(shí)常顯得更亮或更暗。對(duì)于多邊形平面,每一點(diǎn)的光強(qiáng)度由相應(yīng)多邊形的法向量決定,那么在兩多邊形平面的交界處,光強(qiáng)度會(huì)發(fā)生急劇改變,產(chǎn)生馬赫帶效應(yīng)。馬赫帶效應(yīng)影響圖形的真實(shí)感,利用下面介紹的兩種明暗處理方法都可不同程度的改善這一現(xiàn)象。2022/7/25418.4.2 Gouraud光強(qiáng)度插值方法 這種由Gouraud提出的光強(qiáng)度插值方法通常被稱(chēng)為Gouraud明暗處理。該方法先計(jì)算出各多邊形頂點(diǎn)處的光強(qiáng)度值,然后再采

33、用雙線性插值方法確定多邊形平面上每一點(diǎn)處的光強(qiáng)度值。由于兩相交多邊形平面邊界上的光強(qiáng)度值被同時(shí)用于兩平面內(nèi)點(diǎn)的光強(qiáng)度插值計(jì)算,這樣就消除了在多邊形平面繪制中存在的光強(qiáng)度不連續(xù)現(xiàn)象。 多邊形頂點(diǎn)處的法向量可以計(jì)算得到,然后可以根據(jù)光照模型來(lái)確定頂點(diǎn)處的光強(qiáng)度值,再使用二次線性插值求出其它點(diǎn)的光強(qiáng)度。具體計(jì)算方法如圖16所示,假設(shè)多邊形三個(gè)頂點(diǎn)的光強(qiáng)度值已經(jīng)計(jì)算出,分別記為I1,I2,I3。如要計(jì)算掃描線上點(diǎn)P的光強(qiáng)度值,先用I1,I2,I3第一次線性插值計(jì)算掃描線與三角形交點(diǎn)R和Q點(diǎn)的光強(qiáng)度值:2022/7/2542圖162022/7/2543 式中x,y為各點(diǎn)投影到屏幕后的坐標(biāo)。上面各次線性插

34、值還可以改成增量的形式,例如改為:0t1 采用Gouraud明暗處理解決了兩多邊形平面之間光強(qiáng)度的不連續(xù)過(guò)渡以及多邊形平面域內(nèi)光強(qiáng)度單一的問(wèn)題,而且計(jì)算速度較之簡(jiǎn)單光照模型有明顯的提高。但此方法對(duì)漫射效果好,對(duì)鏡面反射效果差。主要表現(xiàn)在高光域的形狀不規(guī)整,高光域只能在頂點(diǎn)周?chē)纬?,不能在多邊形域?nèi)形成。2022/7/25448.4.3 Phong 法向量插值方法 Phong提出了對(duì)法向量而不是光強(qiáng)度進(jìn)行插值的方法。在多邊形平面上各點(diǎn)處按照線性插值計(jì)算法向量,然后根據(jù)光照模型計(jì)算光強(qiáng)度。該方法通常被稱(chēng)為Phong明暗處理。它能夠更真實(shí)地表現(xiàn)物體外表鏡面反射效果并大大降低馬赫帶效應(yīng)。 這種方法與G

35、ouraud方法一樣,首先計(jì)算多邊形每個(gè)頂點(diǎn)的法向量,然后應(yīng)用與Gouraud光強(qiáng)度插值計(jì)算類(lèi)似方法求得每個(gè)點(diǎn)處的法矢量。如圖17,假設(shè)三個(gè)頂點(diǎn)處的法向量已經(jīng)計(jì)算出,分別記為N1,N2,N3。如果要計(jì)算點(diǎn)P處的法向量NP,先用N1,N2,N3線性插值計(jì)算R和Q這兩點(diǎn)處的法向量NR和NQ,然后再利用NR和NQ線性插值計(jì)算NP。2022/7/2545圖172022/7/2546 Phong明暗處理對(duì)法向量插值的方法,比Gouraud明暗處理中對(duì)光強(qiáng)度插值法所得到的結(jié)果精確得多。法向量插值可以生成高光,真實(shí)感更強(qiáng)。然而,法向量插值計(jì)算量較大,既要計(jì)算各項(xiàng)點(diǎn)的法向量,插值計(jì)算多邊形平面上各點(diǎn)的法向量,

36、還要用光照模型計(jì)算各點(diǎn)的光強(qiáng)度值。2022/7/25478.5 陰影處理 當(dāng)觀察方向與光源方向重合時(shí),觀察者是看不到陰影的。只有當(dāng)兩者方向不一致時(shí),才會(huì)看到陰影。陰影使人感到畫(huà)面上景物的遠(yuǎn)近深淺,從而極大地增強(qiáng)畫(huà)面的真實(shí)感。 陰影一般分為兩類(lèi):自身陰影和投射陰影。物體本身遮擋而使光線照不到某些面稱(chēng)自身陰影。投射陰影有本影和半影之分。我們觀察一個(gè)物體影子時(shí),可以看到位于中間全黑的輪廓清楚局部就是本影。本影周?chē)朊靼氚档膮^(qū)域?yàn)榘胗?。本影是所有光源的光線照不到的區(qū)域,而半影那么為可接收到分布光源局部光線的區(qū)域。如果只有一個(gè)點(diǎn)光源或平行光,將只產(chǎn)生本影。如果在有限距離內(nèi)有分布光源,將同時(shí)形本錢(qián)影和半影

37、。為防止大量計(jì)算,通常只考慮由點(diǎn)光源形成的本影。2022/7/2548圖18 自身陰影和投射陰影2022/7/2549 由于陰影是光線照射不到而觀察者卻可見(jiàn)到的區(qū)域,所以在畫(huà)面中生成陰影的過(guò)程根本上相當(dāng)于二次消隱,一次是對(duì)光源消隱,另一次是對(duì)視點(diǎn)消隱。生成自身陰影的過(guò)程如下: 1首先將視點(diǎn)置于光源位置,用相同于消除隱藏面的方法找出光線照不到的面; 2然后按實(shí)際的視點(diǎn)位置和觀察方向,對(duì)物體進(jìn)行消隱。 投射陰影是由于物體遮擋光線,使場(chǎng)景中位于它后面的物體或區(qū)域受不到光線照射而形成的。投射陰影可從光源投射光線將所有非自隱藏面投影到場(chǎng)景中而得到。投影面與場(chǎng)景中其它平面的交線組成陰影多邊形,這只需先找到

38、物體的輪廓線并將它對(duì)場(chǎng)景作投影,而不必將所有非自隱藏面都投影到場(chǎng)景中。 在得到陰影信息后,就可利用光照模型計(jì)算得到有陰影效果的圖形。假設(shè)選用簡(jiǎn)單光照模型,并只有點(diǎn)光源,那么陰影由于不能得到光源的直接照射,只有環(huán)境光對(duì)其亮度有奉獻(xiàn)。 另外,陰影決定于光源的位置而與觀察者位置無(wú)關(guān)。一旦對(duì)所有光源確定出陰影區(qū)域。只要光源位置不變,那么對(duì)于任意選定的觀察位置,由隱藏面算法所生成的陰影均是正確的。2022/7/2550 8.6 紋理處理 現(xiàn)實(shí)世界中的物體往往有各種外表細(xì)節(jié), 例如木制品外表的木紋,墻面上的裝飾圖案等,在計(jì)算機(jī)圖形學(xué)中,物體的外表細(xì)節(jié)稱(chēng)為紋理。假設(shè)將計(jì)算機(jī)生成的形體外表加上紋理,可以大大增

39、強(qiáng)圖形的真實(shí)感。用計(jì)算機(jī)生成紋理通??紤]兩種方式,一種是通過(guò)在光滑外表上附加花紋或圖案生成外表紋理這一過(guò)程可用紋理映射函數(shù)描述實(shí)現(xiàn)。另一種是通過(guò)在光照模型計(jì)算中擾動(dòng)外表法向量,使外表呈現(xiàn)出凸凹不平的紋理效果,這一過(guò)程可用擾動(dòng)函數(shù)描述實(shí)現(xiàn)。2022/7/25518.6.1 紋理映射 在光滑外表上附加花紋或圖案生成外表紋理的一般方法,是在一平面區(qū)域上,也即紋理空間中,預(yù)先定義紋理圖案,然后建立物體外表的點(diǎn)與紋理空間的點(diǎn)之間的對(duì)應(yīng)關(guān)系。當(dāng)物體外表的可見(jiàn)點(diǎn)確定之后,以紋理空間對(duì)應(yīng)點(diǎn)的值修改物體外表的值,就可以把紋理圖案附加到物體外表上。假定紋理圖案定義在紋理空間正交坐標(biāo)系(s,t)中,而物體外表定義在

40、另一個(gè)正交坐標(biāo)系(u,v)中,那么在物體外表上描繪紋理圖案需要在兩個(gè)空間中定義一個(gè)映射函數(shù),即:2022/7/2552 為了簡(jiǎn)化計(jì)算,一般假定映射函數(shù)為一個(gè)線性函數(shù),即:式中各系數(shù)可由兩個(gè)坐標(biāo)系中點(diǎn)之間的對(duì)應(yīng)關(guān)系而求得。 紋理圖案定義有連續(xù)法和離算法兩種。連續(xù)法把紋理函數(shù)定義為一個(gè)二元函數(shù),函數(shù)的定義域就是紋理空間。離散方法把紋理定義在二維數(shù)組中,這個(gè)數(shù)組可以代表一個(gè)用于光柵圖形顯示的字符位圖。位圖可以是用程序生成的各種圖形,也可以是用交互式繪圖系統(tǒng)繪制的各種圖案,還可以是用掃描儀輸入的數(shù)字化圖象等。2022/7/25538.6.2 擾動(dòng)映射 雖然紋理映射可獲得精致的外表細(xì)節(jié),但它不適宜于模擬

41、象桔子皮皺紋那樣的粗糙物體外表,即凹凸紋理。將凹凸紋理映射到物體外表上,看起來(lái)仍象是在外表上畫(huà)的凹凸花紋,這是因?yàn)榧y理圖案的光照細(xì)節(jié)通常與場(chǎng)景中的光照方向不完全一致。生成物體外表凹凸紋理的較好方法是在光照模型計(jì)算中通過(guò)引入一個(gè)擾動(dòng)函數(shù)來(lái)修改外表法向量,稱(chēng)這個(gè)方法為擾動(dòng)映射。 擾動(dòng)映射在外表每一點(diǎn)沿其外表法向量方向附加一個(gè)新的向量,這一向量比較小,不影響原外表的大致形狀,但對(duì)其外表該點(diǎn)處的法向量產(chǎn)生較大擾動(dòng)作用,結(jié)果使曲面變得凹凸不平。通過(guò)恰中選擇擾動(dòng)函數(shù),可使生成圖形具有不同的凹凸紋理效果。2022/7/2554 假設(shè)P(u,v)表示一個(gè)參數(shù)曲面上的點(diǎn),該點(diǎn)處的外表法向量為: NPuPv其中,Pu與Pv為P(u,v)關(guān)于參數(shù)u和v的偏導(dǎo)數(shù)。為了將擾動(dòng)因子參加到曲面的法向量中去,定義一個(gè)擾動(dòng)函數(shù)F(u,v),將物體外表上點(diǎn)P(u,v),沿該點(diǎn)處的法向量方向位移F(u,v)個(gè)單位長(zhǎng),得: P(u,v)P(u,v)F(u,v)n 其中,n=N/|N|是外表單位法向量。新的外表法向量可以通過(guò)對(duì)兩個(gè)偏導(dǎo)數(shù)求叉積來(lái)獲得: NPuPv其中 PuP/u=(P+F.n)/uPuFunFnu Pv P/v=(P+F.n)/vPvFvnFnv2022/7/2555 由于F(u,v)的值相對(duì)于式中其它量很小,可以忽略不計(jì)最后一項(xiàng),因此上述兩個(gè)偏導(dǎo)數(shù)可以近似地表示為: PuPuFun PvPvFvn所

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論