沒有幻燈片標(biāo)題-8191_第1頁
沒有幻燈片標(biāo)題-8191_第2頁
沒有幻燈片標(biāo)題-8191_第3頁
沒有幻燈片標(biāo)題-8191_第4頁
沒有幻燈片標(biāo)題-8191_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

19、離場景足夠遠(yuǎn)的光源,如太陽,也可用點(diǎn)光源模型來較好的模擬。我們在下面反射光的討論中假定使用點(diǎn)光源模型。 從物體表面反射出來的光決定于光源中光的成分、光線的方向、光源的幾何性質(zhì)以及物體表面的朝向和表面的材料屬性等。物體表面的反射光又可分為漫反射光和鏡面反射光。漫反射光可以認(rèn)為是光穿過物體表面并被吸收,然后重新發(fā)射出來的光,漫反射光均勻地散布在各個(gè)方向,因此同觀察者的位置無關(guān)。8/19/202222 朗伯(lambert)余弦定律總結(jié)了點(diǎn)光源所發(fā)出的光照射在一個(gè)完全漫反射體上時(shí)光的反射法則。根據(jù)朗伯定律,一個(gè)完全漫射體上反射出來的光強(qiáng)度同入射光與物體表面法線之間夾角的余弦成正比。即 IdkdIlc

20、os 01式中Id為漫反射光強(qiáng)度;Il為從一點(diǎn)光源所發(fā)出的入射光的光強(qiáng)度;kd為決定于物體表面材料屬性的漫反射系數(shù),0kd1;為入射光與表面法向量之間的夾角,如下圖所示。8/19/202223 反射光的光強(qiáng)度是光波長的函數(shù),然而在簡單的光照模型中,通常假定光波長為常數(shù)。若N為物體表面的單位法向量,L為從表面上一點(diǎn)指向點(diǎn)光源的單位矢量,則cos= NL,則(8-3)可以寫成: IdkdIl(NL)8/19/2022248.2.3 鏡面反射光 除了漫反射,光源照射物體表面還會產(chǎn)生高光或強(qiáng)光,這種現(xiàn)象稱為鏡面反射。這種高光效果在光滑的物體表面上很明顯,如磨光的金屬表面,而對于陰暗物體表面則效果較差。

21、 鏡面反射光是具有一定方向的反射光。鏡面反射角等于入射角,它們位于表面的單位法向量N的兩側(cè),如圖9所示。用R表示鏡面反射方向的單位矢量,L表示指向點(diǎn)光源的單位矢量,V為指向視點(diǎn)的單位矢量,是V 與R之間的夾角。對于一個(gè)理想的鏡面反射,入射光僅在鏡面反射方向有反射現(xiàn)象,即僅當(dāng)V與R重合時(shí)才能觀察到反射光,而在其它方向都看不到反射光。對于這種光滑的反射面,鏡面的反射光強(qiáng)比漫反射的光強(qiáng)和環(huán)境光的光強(qiáng)高出很多倍。8/19/202225圖98/19/202226對于一般光滑表面,由于表面具有一定粗糙度,其表面實(shí)際上是由許多朝向不同的微小表面組成,鏡面反射方向分布在R周圍有限范圍內(nèi)。較光滑表面的鏡面反射范

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

23、值一般取12000,圖10表示了n對鏡面反射角度范圍的影響。圖108/19/202228 當(dāng)視點(diǎn)取在鏡面反射方向附近時(shí),觀察者接受到鏡面反射光較強(qiáng),而偏離這一方向觀察時(shí),接受到鏡面反射光就會減弱,故高光隨著觀察者的位置變化而變化。另外,由于鏡面反射光是經(jīng)物體外表面直接反射而產(chǎn)生的,與漫反射光不同,高光具有與入射光同樣性質(zhì),而與物體表面顏色無關(guān)。 若R與V已規(guī)格化為單位向量,則式(8-5)可改寫為: IsksIl(RV)n 綜上所述,從視點(diǎn)觀察到物體表面上任一點(diǎn)處的顏色和亮度I應(yīng)為反射光強(qiáng)度Ie、漫反射光強(qiáng)度Id及鏡面反射光強(qiáng)度Is的總和,即 IIeIdIs將各入上式,則得 IkaIakdIl(

24、NL)ksIl(RV)n 8/19/202229 另外,反射光強(qiáng)度還和物體與點(diǎn)光源的距離d的平方成反比,即物體離光源愈遠(yuǎn),顯的愈暗。因此,若要得到真實(shí)感的光照效果,在光照明模型中必須考慮這一因素。然而,若采用因子1/d2來進(jìn)行光強(qiáng)度衰減,簡單的點(diǎn)光源照明并不總能產(chǎn)生真實(shí)感的圖形。當(dāng)d很小時(shí),1/d2會產(chǎn)生過大的強(qiáng)度變化,而d很大時(shí)反射光強(qiáng)度項(xiàng)將無意義。另外,人對物體的視覺也同視點(diǎn)與物體的距離有關(guān),因此綜合考慮,可以用以下修正公式,它是根據(jù)經(jīng)驗(yàn),取同距離的關(guān)系為線性衰減。 IkaIaIl(kd(NL)ks(RV)n)/(d+K)常數(shù)項(xiàng)K為一調(diào)整常數(shù),它的存在可以防止當(dāng)d很小時(shí)1/d值太大。8/1

25、9/202230 上式就是計(jì)算機(jī)圖形學(xué)中通常使用的簡單光照模型,也稱為明暗函數(shù),用它可以計(jì)算出物體表面上每一象素處的光強(qiáng)或明暗色調(diào)。上式的計(jì)算量是很大的,尤其是鏡面反射方向矢量R的計(jì)算。使用矢量L與V間的半角矢量H來計(jì)算鏡面反射范圍可得到簡化的Phong模型。只須以NH替代Phong模型中的點(diǎn)積VR。這等于用cos計(jì)算來替代cos,如圖11所示。半角矢量可從下式計(jì)算得到: H(LV)/2替換后(8-8)可以寫為: IkaIaIl(kd(NL)ks(NH)n)/(d+K)若觀察點(diǎn)與光源離物體表面足夠遠(yuǎn),則V與L可以看作為常量,則H亦為常量。就是說只要計(jì)算一次H的值就可以,但R是隨N變化而改變的,

26、這就是用NH近似VR的好處。8/19/202231圖118/19/2022328.2.4 多點(diǎn)光源和顏色 若存在多個(gè)點(diǎn)光源,則物體表面上的反射光強(qiáng)度是各個(gè)點(diǎn)光源照射效果的線性相加,這時(shí)光照模型為: IkaIa (kd(NLi)ks(NHi)n) 其中,m為點(diǎn)光源的數(shù)目。大多數(shù)真實(shí)感圖形均為彩色圖形,要生成一幅彩色圖形,需要用RGB三基色分量來標(biāo)識光源強(qiáng)度和物體表面顏色,并根據(jù)光照模型來計(jì)算反射光中的RGB分量。但由于鏡面反射光的顏色通常取決于入射光的顏色,因此計(jì)算RGB分量時(shí)ks取相同的常數(shù)值。將式(8-10)改寫成RGB三個(gè)分量的形式為: IRkaRIaRIlR(kdR(NL)ks(NH)n

27、)/(d+K) IGkaGIaGIlG(kdG(NL)ks(NH)n/(d+K) IBkaBIaBIlB(kdB(NL)ks(NH)n/(d+K)8/19/202233計(jì)算出RGB三個(gè)基色分量的強(qiáng)度,用來控制RGB彩色顯示器中相應(yīng)的電子槍,就可以獲得彩色圖形。8.3 透明處理 前面介紹的光照模型假定所考慮的物體表面是不透明的。但有些物體是透明的,如水、玻璃等。一個(gè)透明物體的表面會同時(shí)產(chǎn)生反射光和折射光。當(dāng)光線從一種傳播介質(zhì)進(jìn)入另一種傳播介質(zhì)時(shí),例如從空氣進(jìn)入水中時(shí),光線會由于折射而產(chǎn)生彎曲。光線彎曲的程度由Snell定律決定,該定律指出折射光線與入射光線位于同一平面內(nèi),而且入射角與折射角之間存

28、在下列關(guān)系: 1sin=2sin式中,1和2分別為光線在第一種介質(zhì)和第二種介質(zhì)中的折射率,為光線入射角,為折射角,圖12為示意圖。實(shí)際中,沒有那種材料能夠透過全部入射光,總有一部分被反射出去。8/19/202234圖12 入射與折射的關(guān)系8/19/202235 光有規(guī)則透射和漫透射。透明材料如玻璃等會產(chǎn)生規(guī)則透射,透過透明材料觀察物體仍然是清晰的。如果透射光線是發(fā)散的,那么就會形成漫透射,發(fā)生漫透射的材料呈現(xiàn)朦朧的半透明狀態(tài)。漫透射計(jì)算復(fù)雜,大多數(shù)光照模型僅考慮規(guī)則透射。 當(dāng)要表示一個(gè)透明表面時(shí),光強(qiáng)度計(jì)算公式必須進(jìn)行修改,一方面要考慮由于透射的原因,表面反射光強(qiáng)度的減弱,另一方面還要考慮表面

29、背后物體的反射光穿過透明表面,對表面總光強(qiáng)度的增加,如圖13所示。 為了加速光強(qiáng)度的計(jì)算,簡單的透明算法不考慮折射導(dǎo)致的路徑變化,這樣折射角總是與入射角相同,也不考慮光線在媒體中所經(jīng)路線長度對光強(qiáng)的影響。對透明的可見面,取它與同它相距最近的另一表面光強(qiáng)的線性組合,則總的光強(qiáng)度可表示為: I=ktIt+(1-kt)Ic 0kt1其中,Ic為透明可見面的反射光強(qiáng)度,It為透明可見面后第一個(gè)可見表面上的光強(qiáng)度。kt為透明可見面的透明度。kt=0對應(yīng)不透明面,光線無透射。kt=1對應(yīng)不可見面,光線全部透射。Ic和It可用前面介紹的光照模型計(jì)算。8/19/202236 若It所對應(yīng)表面也是透明面,則上述

30、算法可以遞歸地使用,直到遇到一個(gè)不透明面或背景時(shí)為止。 透明處理還可以用于顯示復(fù)雜物體或空間的內(nèi)部結(jié)構(gòu)。為每一多邊形表面均設(shè)一透明度,透明度的初始值均取為1,繪制出物體的外形消隱圖。通過有選擇地將某些表面的透明度改為0,即將它們當(dāng)做看不見的面處理,這樣再次繪制畫面時(shí),就會顯示出物體的內(nèi)部結(jié)構(gòu)。圖138/19/2022378.4.1 表面法線的計(jì)算 但為了提高計(jì)算速度,一般用多邊形平面逼近曲面。對于多邊形平面,可根據(jù)其平面方程的系數(shù),決定平面的法向量,平面內(nèi)所有點(diǎn)的法向量是相同的。而多邊形平面在頂點(diǎn)處的法向量可取包圍該頂點(diǎn)的各多邊形平面法向量的平均值。如圖14中,頂點(diǎn)V處的近似法向量為: NV(

31、N1N2.Nn)/n其中,n為包圍頂點(diǎn)的平面?zhèn)€數(shù),圖中示例n=4。如圖148/19/202238 但多邊形一般是由頂點(diǎn)和棱邊存儲的,在各多邊形平面方程未知的情況下,頂點(diǎn)處的法向量可取交于此頂點(diǎn)的各棱邊叉積的平均值。如圖15中,頂點(diǎn)V處的法向量可由下式計(jì)算: NVVV1VV2VV2VV3VV3VV4VV4VV1上式近似法向量的模依賴于圍繞頂點(diǎn)的各多邊形棱邊數(shù)和長度。多邊形愈大,棱邊愈長,模愈大,實(shí)際使用中應(yīng)該單位化。圖158/19/202239 當(dāng)觀察畫面上具有相同光強(qiáng)度的區(qū)域時(shí),在其邊界處眼睛所感受到的明亮度常常會不同于實(shí)際值。眼睛的這一視覺特性使得光強(qiáng)度為常數(shù)的區(qū)域看上去似乎是光強(qiáng)度發(fā)生了變

32、化,這一現(xiàn)象稱之為馬赫(Mach)帶效應(yīng)。在光強(qiáng)度發(fā)生急劇變化的地方會出現(xiàn)馬赫帶效應(yīng),這時(shí)常顯得更亮或更暗。對于多邊形平面,每一點(diǎn)的光強(qiáng)度由相應(yīng)多邊形的法向量決定,則在兩多邊形平面的交界處,光強(qiáng)度會發(fā)生急劇改變,產(chǎn)生馬赫帶效應(yīng)。馬赫帶效應(yīng)影響圖形的真實(shí)感,利用下面介紹的兩種明暗處理方法都可不同程度的改善這一現(xiàn)象。8/19/2022408.4.2 Gouraud光強(qiáng)度插值方法 這種由Gouraud提出的光強(qiáng)度插值方法通常被稱為Gouraud明暗處理。該方法先計(jì)算出各多邊形頂點(diǎn)處的光強(qiáng)度值,然后再采用雙線性插值方法確定多邊形平面上每一點(diǎn)處的光強(qiáng)度值。由于兩相交多邊形平面邊界上的光強(qiáng)度值被同時(shí)用于兩

33、平面內(nèi)點(diǎn)的光強(qiáng)度插值計(jì)算,這樣就消除了在多邊形平面繪制中存在的光強(qiáng)度不連續(xù)現(xiàn)象。 多邊形頂點(diǎn)處的法向量可以計(jì)算得到,然后可以根據(jù)光照模型來確定頂點(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)度值:8/19/202241圖168/19/202242 式中x,y為各點(diǎn)投影到屏幕后的坐標(biāo)。上面各次線性插值還可以改成增量的形式,例如改為:0t1 采用Gouraud明暗處理解決了兩多邊形平面之間光強(qiáng)度的不

34、連續(xù)過渡以及多邊形平面域內(nèi)光強(qiáng)度單一的問題,而且計(jì)算速度較之簡單光照模型有明顯的提高。但此方法對漫射效果好,對鏡面反射效果差。主要表現(xiàn)在高光域的形狀不規(guī)整,高光域只能在頂點(diǎn)周圍形成,不能在多邊形域內(nèi)形成。8/19/2022438.4.3 Phong 法向量插值方法 Phong提出了對法向量而不是光強(qiáng)度進(jìn)行插值的方法。在多邊形平面上各點(diǎn)處按照線性插值計(jì)算法向量,然后根據(jù)光照模型計(jì)算光強(qiáng)度。該方法通常被稱為Phong明暗處理。它能夠更真實(shí)地表現(xiàn)物體表面鏡面反射效果并大大降低馬赫帶效應(yīng)。 這種方法與Gouraud方法一樣,首先計(jì)算多邊形每個(gè)頂點(diǎn)的法向量,然后應(yīng)用與Gouraud光強(qiáng)度插值計(jì)算類似方法

35、求得每個(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。8/19/202244圖178/19/202245 Phong明暗處理對法向量插值的方法,比Gouraud明暗處理中對光強(qiáng)度插值法所得到的結(jié)果精確得多。法向量插值可以生成高光,真實(shí)感更強(qiáng)。然而,法向量插值計(jì)算量較大,既要計(jì)算各項(xiàng)點(diǎn)的法向量,插值計(jì)算多邊形平面上各點(diǎn)的法向量,還要用光照模型計(jì)算各點(diǎn)的光強(qiáng)度值。8/19/2022468.5 陰影處理 當(dāng)觀察方向與光源方向重合時(shí)

36、,觀察者是看不到陰影的。只有當(dāng)兩者方向不一致時(shí),才會看到陰影。陰影使人感到畫面上景物的遠(yuǎn)近深淺,從而極大地增強(qiáng)畫面的真實(shí)感。 陰影一般分為兩類:自身陰影和投射陰影。物體本身遮擋而使光線照不到某些面稱自身陰影。投射陰影有本影和半影之分。我們觀察一個(gè)物體影子時(shí),可以看到位于中間全黑的輪廓分明部分就是本影。本影周圍半明半暗的區(qū)域?yàn)榘胗?。本影是所有光源的光線照不到的區(qū)域,而半影則為可接收到分布光源部分光線的區(qū)域。如果只有一個(gè)點(diǎn)光源或平行光,將只產(chǎn)生本影。如果在有限距離內(nèi)有分布光源,將同時(shí)形成本影和半影。為避免大量計(jì)算,通常只考慮由點(diǎn)光源形成的本影。8/19/202247圖18 自身陰影和投射陰影8/1

37、9/202248 由于陰影是光線照射不到而觀察者卻可見到的區(qū)域,所以在畫面中生成陰影的過程基本上相當(dāng)于二次消隱,一次是對光源消隱,另一次是對視點(diǎn)消隱。生成自身陰影的過程如下: (1)首先將視點(diǎn)置于光源位置,用相同于消除隱藏面的方法找出光線照不到的面; (2)然后按實(shí)際的視點(diǎn)位置和觀察方向,對物體進(jìn)行消隱。 投射陰影是由于物體遮擋光線,使場景中位于它后面的物體或區(qū)域受不到光線照射而形成的。投射陰影可從光源投射光線將所有非自隱藏面投影到場景中而得到。投影面與場景中其它平面的交線組成陰影多邊形,這只需先找到物體的輪廓線并將它對場景作投影,而不必將所有非自隱藏面都投影到場景中。 在得到陰影信息后,就可

38、利用光照模型計(jì)算得到有陰影效果的圖形。若選用簡單光照模型,并只有點(diǎn)光源,則陰影由于不能得到光源的直接照射,只有環(huán)境光對其亮度有貢獻(xiàn)。 另外,陰影決定于光源的位置而與觀察者位置無關(guān)。一旦對所有光源確定出陰影區(qū)域。只要光源位置不變,則對于任意選定的觀察位置,由隱藏面算法所生成的陰影均是正確的。8/19/202249 8.6 紋理處理 現(xiàn)實(shí)世界中的物體往往有各種表面細(xì)節(jié), 例如木制品表面的木紋,墻面上的裝飾圖案等,在計(jì)算機(jī)圖形學(xué)中,物體的表面細(xì)節(jié)稱為紋理。若將計(jì)算機(jī)生成的形體表面加上紋理,可以大大增強(qiáng)圖形的真實(shí)感。用計(jì)算機(jī)生成紋理通常考慮兩種方式,一種是通過在光滑表面上附加花紋或圖案生成表面紋理這一

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

40、/202251 為了簡化計(jì)算,一般假定映射函數(shù)為一個(gè)線性函數(shù),即:式中各系數(shù)可由兩個(gè)坐標(biāo)系中已知點(diǎn)之間的對應(yīng)關(guān)系而求得。 紋理圖案定義有連續(xù)法和離算法兩種。連續(xù)法把紋理函數(shù)定義為一個(gè)二元函數(shù),函數(shù)的定義域就是紋理空間。離散方法把紋理定義在二維數(shù)組中,這個(gè)數(shù)組可以代表一個(gè)用于光柵圖形顯示的字符位圖。位圖可以是用程序生成的各種圖形,也可以是用交互式繪圖系統(tǒng)繪制的各種圖案,還可以是用掃描儀輸入的數(shù)字化圖象等。8/19/2022528.6.2 擾動映射 雖然紋理映射可獲得精致的表面細(xì)節(jié),但它不合適于模擬象桔子皮皺紋那樣的粗糙物體表面,即凹凸紋理。將凹凸紋理映射到物體表面上,看起來仍象是在表面上畫的凹凸

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

溫馨提示

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

評論

0/150

提交評論