




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)1 第八章第八章 真實(shí)感圖形生成技術(shù)真實(shí)感圖形生成技術(shù)(Third Dimension Graphics Technology) 用計(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ù)發(fā)展迅速。 真實(shí)感圖形生成技術(shù)涉及到的主要問(wèn)題包括隱藏隱藏線面的消除、明暗處理、陰影處理、紋理處理線面的消除、明暗處理、陰影處理、紋理處理等,缺乏這
2、些處理,圖形會(huì)缺乏真實(shí)感或真實(shí)感不足。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)28.1 8.1 隱藏線面的消除隱藏線面的消除( (Hidden-Line and Surface Removal) ) 在用計(jì)算機(jī)生成三維圖形時(shí),形體的所有部分都將被表示,不管是可見(jiàn)的還是不可見(jiàn)的,這樣的圖形顯示出來(lái)形狀是不清楚的,甚至是不確定的。圖1(a)所示是一個(gè)通過(guò)棱邊表示的立方體的圖形,如果不消隱不易辨別。通過(guò)適當(dāng)刪除不可見(jiàn)的隱藏部分,可以得到表示明確的圖形。圖1(b)是觀察點(diǎn)在立方體的前上方的消隱圖,圖1(c)是觀察點(diǎn)位于立方體的前下方消隱圖,消隱圖表示了明確的立體感形體。圖12022-2-
3、25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)3 觀察點(diǎn)確定后,找出并消除圖形中不可見(jiàn)的部分,稱觀察點(diǎn)確定后,找出并消除圖形中不可見(jiàn)的部分,稱為消隱為消隱。經(jīng)過(guò)消隱得到的圖形稱為消隱圖。 消除隱藏線和隱藏面是計(jì)算機(jī)圖形學(xué)中一個(gè)較為困難的問(wèn)題,消隱算法是決定相對(duì)于空間給定位置的觀察者,消隱算法是決定相對(duì)于空間給定位置的觀察者,哪些棱邊、表面或物體是可見(jiàn)的,哪些是不可見(jiàn)的哪些棱邊、表面或物體是可見(jiàn)的,哪些是不可見(jiàn)的。消隱不僅與消隱對(duì)象有關(guān),還與觀察點(diǎn)、觀察方向、投影面等與觀察點(diǎn)、觀察方向、投影面等的設(shè)置方位有關(guān)的設(shè)置方位有關(guān)。改變這些設(shè)置,物體上某些可見(jiàn)的部分將會(huì)變成不可見(jiàn),某些不可見(jiàn)的部分又會(huì)變成可見(jiàn)
4、。 雖然各種消隱算法的基本思想有所不同,但它們大多采用了排序和相關(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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)4 消隱算法一般可以分為兩類。如果算法是在物體所定義的空間實(shí)現(xiàn),那么這種算法稱為對(duì)象空間算法對(duì)象空間算法;如果算法是在物體投影后的屏幕坐標(biāo)空間實(shí)現(xiàn),那么這種算法就稱為圖象空間算法圖象空間算法。一般說(shuō)來(lái),對(duì)象空間算法有比較高的精度,
5、而圖象空間算法在精度上受屏幕分辨率的限制,但可以方便地利用圖象空間中各種相關(guān)性獲得較高的計(jì)算效率。8.1.1 8.1.1 凸多面體的消隱算法凸多面體的消隱算法( (Back-Face Removal Algorithm) 在消隱問(wèn)題中,凸多面體是最簡(jiǎn)單情形。凸多面體是由多個(gè)凸多邊形平面包圍而成的立體,連接形體上不屬于同一表面的任意兩點(diǎn)的線段完全位于形體的內(nèi)部。對(duì)于單個(gè)凸多面體,背向觀察點(diǎn)的面是不可見(jiàn)面對(duì)于單個(gè)凸多面體,背向觀察點(diǎn)的面是不可見(jiàn)面,如圖2所示。因此,只要判斷出這些“朝后面”,即可達(dá)到隱藏面消除的目的。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)5圖2 構(gòu)成多面體的每個(gè)平面
6、都有其法線。通常規(guī)定法線的方向是由多面體的內(nèi)部指向多面體的外部,稱為“外法線外法線”。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)6 假定在右手坐標(biāo)系中,觀察點(diǎn)位于原點(diǎn),投影面平行于XY坐標(biāo)平面,以Z Z軸作為深度坐標(biāo)軸軸作為深度坐標(biāo)軸,視線平行于Z軸,如圖3所示,則平面外法線同Z軸方向的夾角,就是外法線同視線的夾角。很顯然,對(duì)于單個(gè)凸多面體,當(dāng)外法線同視線的夾角小于90時(shí),其平面背向觀察點(diǎn)為不可見(jiàn)面。圖32022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)7設(shè)平面外法線同Z軸方向的夾角為,則cos為單位平面外法線矢量在Z軸上的分量。角同可見(jiàn)性的關(guān)系為: (1 1)當(dāng))當(dāng) 0 0
7、9090 時(shí),時(shí),coscos0 0,此面背向觀察,此面背向觀察者為不可見(jiàn)面。者為不可見(jiàn)面。 (2 2)當(dāng))當(dāng) 9090 時(shí),時(shí),coscos0 0,此面平行于,此面平行于Z Z軸,可以軸,可以認(rèn)為是不可見(jiàn)面。認(rèn)為是不可見(jiàn)面。 (3 3)當(dāng))當(dāng) 9090 180180 時(shí),時(shí),coscos0 0,此面朝向觀,此面朝向觀察者的,為可見(jiàn)面。察者的,為可見(jiàn)面。 設(shè)平面方程為 Ax+By+Cz+D=0法向矢量為 N NAi iBj jCk k則cosC/|N N|。作為判斷依據(jù),只需要知道cos的正負(fù)號(hào)就夠了。因?yàn)閨N N|恒大于 0,所以cos的符號(hào)由C決定,因此,當(dāng)當(dāng)C C0 0 時(shí),為可見(jiàn)面。當(dāng)
8、時(shí),為可見(jiàn)面。當(dāng)C0C0時(shí),為不可見(jiàn)面時(shí),為不可見(jiàn)面。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)8 由于三點(diǎn)可以構(gòu)成一個(gè)平面,和三點(diǎn)可以構(gòu)成兩個(gè)矢量,由兩矢量的叉積可以求出平面的法線。對(duì)于凸多面 體 , 任 取 構(gòu) 成 平 面 多 邊 形 的 三 個(gè) 相 鄰 點(diǎn)任 取 構(gòu) 成 平 面 多 邊 形 的 三 個(gè) 相 鄰 點(diǎn)P P0 0(x(x0 0,y,y0 0,z,z0 0),P),P1 1(x(x1 1,y,y1 1,z,z1 1),P),P2 2(x(x2 2,y,y2 2,z,z2 2) ),按右手規(guī)則確,按右手規(guī)則確定點(diǎn)的順序定點(diǎn)的順序,此時(shí)有:)()(01121201121
9、20101yyxxyyxxyyxxyyxxC 為了決定一個(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ù)雜形體,則還需進(jìn)行更多的測(cè)試來(lái)檢查是否存在被其它面或其它物體完全或部分遮擋的表面。通常,凸多面體消隱處理可消除一半左右的隱藏面。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)9凸多面體消隱演示示例凸多面體消隱演示示例2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)108.1.2 8.1.2 畫(huà)家算法畫(huà)家算法(Depth So
10、rt and Painters Algorithm) 畫(huà)家創(chuàng)作一幅畫(huà)的過(guò)程是先畫(huà)背景,然后畫(huà)中間景物,最后才畫(huà)近景。這樣,每一層總是在前一層的景物上覆蓋,從而解決了隱藏面或可見(jiàn)性問(wèn)題。采用同樣的技術(shù),首先將形體的所有面根據(jù)它們與觀察點(diǎn)將形體的所有面根據(jù)它們與觀察點(diǎn)的距離排序,然后按距離遞減順序逐個(gè)將各面顯示出的距離排序,然后按距離遞減順序逐個(gè)將各面顯示出來(lái)來(lái),由于當(dāng)重迭時(shí),后顯示的畫(huà)面會(huì)覆蓋先顯示的畫(huà)面,這樣就可以實(shí)現(xiàn)消除隱藏面的目的。這種隱藏面消除算法通常稱為畫(huà)家算法。 畫(huà)家算法也稱表優(yōu)先級(jí)算法或深度優(yōu)先排序算法畫(huà)家算法也稱表優(yōu)先級(jí)算法或深度優(yōu)先排序算法。這種算法排序操作同時(shí)在對(duì)象空間和圖象
11、空間完成,而在圖象空間產(chǎn)生消隱圖。實(shí)現(xiàn)時(shí)首先以深度優(yōu)先級(jí)進(jìn)行排序,距觀察點(diǎn)遠(yuǎn)的面優(yōu)先級(jí)低,近的面優(yōu)先級(jí)距觀察點(diǎn)遠(yuǎn)的面優(yōu)先級(jí)低,近的面優(yōu)先級(jí)高高,以此建立一張深度優(yōu)先級(jí)表。然后按優(yōu)先級(jí)表順序?qū)⒏髅嫠腿霂彌_器進(jìn)行顯示。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)11 深度優(yōu)先級(jí)表的建立是動(dòng)態(tài)進(jìn)行的。假定觀察方向同Z軸同向,則最初可按各面的最小z值排序。但這一初步排序可能出現(xiàn)差錯(cuò),如圖4所示的情況。圖中盡管面S1的最小z值小于面S2的最小z值,但正確的順序是面S2位于面S1前。因此在實(shí)際將z值最大的面S寫(xiě)入幀緩沖器之前,需與其它面比較以確定是否在Z方向存在重疊。若無(wú)重疊,則對(duì)S進(jìn)行寫(xiě)入,
12、若存在重疊,則需作一些比較以決定是否有必要重新排序。如果存在兩面相交和循環(huán)遮擋,如圖5中所示的情況,這時(shí)簡(jiǎn)單的排序是無(wú)法解決問(wèn)題的,必須求交分割后再進(jìn)行排序。圖4圖52022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)12 下面給出這種算法過(guò)程的簡(jiǎn)單描述 (1(1)計(jì)算各面最?。┯?jì)算各面最小z z值值z(mì) zminmin,并以此值的優(yōu)先級(jí)進(jìn),并以此值的優(yōu)先級(jí)進(jìn)行排序,建立初步的深度優(yōu)先表;行排序,建立初步的深度優(yōu)先表; (2(2)表空結(jié)束。否則取表中深度最大的面)表空結(jié)束。否則取表中深度最大的面S Sn n, ,檢查檢查表中其它各面表中其它各面S Sk k(k=0,1,.,n-1)(k=0,1
13、,.,n-1)與與S Sn n是否在是否在Z Z方向存方向存在重疊的關(guān)系。存在,記重疊面為在重疊的關(guān)系。存在,記重疊面為S Sj j轉(zhuǎn)轉(zhuǎn)(3)(3)。否則,。否則,將將S Sn n寫(xiě)入幀緩沖器,寫(xiě)入幀緩沖器,n=n-1n=n-1轉(zhuǎn)轉(zhuǎn)(2)(2); (3)(3)檢查檢查S Sn n是否遮擋是否遮擋S Sj j,不遮擋則將,不遮擋則將S Sn n寫(xiě)入幀緩存寫(xiě)入幀緩存器,器,n=n-1n=n-1轉(zhuǎn)轉(zhuǎn)(2)(2)。否則,交換。否則,交換S Sn n和和S Sj j在表中位置,轉(zhuǎn)在表中位置,轉(zhuǎn)(2)(2)。如果。如果S Sn n和和S Sj j已經(jīng)交換過(guò)位置,則兩面交叉遮擋,已經(jīng)交換過(guò)位置,則兩面交叉遮
14、擋,轉(zhuǎn)轉(zhuǎn)(4)(4); (4)(4)用用S Sn n和和S Sj j的交線分割的交線分割S Sn n為兩部分,轉(zhuǎn)為兩部分,轉(zhuǎn)(1)(1)。 畫(huà)家算法的優(yōu)點(diǎn)是簡(jiǎn)單,容易實(shí)現(xiàn),缺點(diǎn)是算法中的深度排序計(jì)算量大。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)138.1.3 8.1.3 深度深度緩沖器算法緩沖器算法( (Z-Buffer Algorithm) ) 深度緩沖器算法是一種圖象空間消隱算法。由于一般采用Z軸方向?yàn)橛^察方向,沿Z軸計(jì)算深度,所以此方法也稱為z z緩沖器算法緩沖器算法。它需要兩個(gè)緩沖器,一個(gè)是深度緩沖器深度緩沖器,用于保存表面上各象素點(diǎn)(x,y)所對(duì)應(yīng)的深度值z(mì),一個(gè)是刷新
15、緩沖器刷新緩沖器,用于保存各點(diǎn)的屬性值。兩個(gè)緩沖器的大小與屏幕上象素點(diǎn)的個(gè)數(shù)兩個(gè)緩沖器的大小與屏幕上象素點(diǎn)的個(gè)數(shù)相同,也與顯示器幀緩沖器的單元個(gè)數(shù)相同相同,也與顯示器幀緩沖器的單元個(gè)數(shù)相同。 深度緩沖器算法的原理是,對(duì)一坐標(biāo)(x,y),查找最小的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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)14 深度緩沖器算法可描
16、述如下: (1) (1) 刷新緩沖器置成背景光強(qiáng)或顏色;刷新緩沖器置成背景光強(qiáng)或顏色; (2) (2) 深度緩沖器置成最大深度緩沖器置成最大z z值;值; (3) (3) 以任意順序掃描各多邊形:以任意順序掃描各多邊形: 對(duì)于多邊形中的每一象素對(duì)于多邊形中的每一象素(x,y,z)(x,y,z),將,將z(x,y)z(x,y)與深與深度緩沖器中存儲(chǔ)值度緩沖器中存儲(chǔ)值Z Zbufferbuffer(x,y)(x,y) 進(jìn)行比較進(jìn)行比較, ,若若z(x,y)z(x,y)Z Zbufferbuffer(x,y)(x,y),則將此點(diǎn)屬性,則將此點(diǎn)屬性寫(xiě)入刷新緩沖器,且用寫(xiě)入刷新緩沖器,且用z(x,y)z
17、(x,y)重置重置Z Zbufferbuffer(x,y)(x,y); (4) (4) 所有多邊形都處理完后,顯示所有多邊形都處理完后,顯示消隱圖消隱圖。 深度緩沖器算法便于硬件實(shí)現(xiàn)。實(shí)際上,在當(dāng)今生產(chǎn)的大多數(shù)高檔圖形工作站,除了幀緩存外,還帶有用于消隱的深度緩存,從而克服了深度緩存算法占用大量存儲(chǔ)單元的缺點(diǎn)。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)15真實(shí)感圖形繪制真實(shí)感圖形繪制深度緩沖器消隱深度緩沖器消隱可改藍(lán)色四邊形位置:按鍵可改藍(lán)色四邊形位置:按鍵X-右移,右移,x-左移,左移, Y-上移,上移,y-下移,下移,OpenGL(Open Graphics Library)編
18、程,)編程,源程序見(jiàn)下頁(yè)。源程序見(jiàn)下頁(yè)。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)16OpenGL實(shí)現(xiàn)深度緩沖器檢測(cè)示例:#include stdafx.h#include /控制變量說(shuō)明float parallelogram_X= 0.0, parallelogram_Y=0.0; /藍(lán)色四邊形的坐標(biāo)參數(shù)/三維平行四邊形1繪制函數(shù):中心位于坐標(biāo)原點(diǎn)void parallelogram1()glBegin(GL_QUADS);glVertex3f( -0.3, -0.3, 0.3);glVertex3f( 0.3, -0.2, -0.3);glVertex3f( 0.3, 0.4,
19、 -0.3);glVertex3f( -0.3, 0.3, 0.3); glEnd(); /三維平行四邊形2繪制函數(shù):中心位于坐標(biāo)原點(diǎn)void parallelogram2()glBegin(GL_QUADS);glVertex3f( -0.3, -0.2, -0.3);glVertex3f( 0.3, -0.3, 0.3);glVertex3f( 0.3, 0.3, 0.3);glVertex3f( -0.3, 0.4, -0.3); glEnd(); 2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)17/圖形繪制函數(shù)void Display(void) /清除屏幕顏色及深度緩沖器gl
20、Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /啟用深度測(cè)試glEnable(GL_DEPTH_TEST); /繪制第一個(gè)紅色平行四邊形 glColor3f(1.0f,0.0f,0.0f); /設(shè)置平行四邊形繪制顏色glLoadIdentity(); /設(shè)置當(dāng)前矩陣為單位矩陣glTranslatef(0.0f, 0.0f, 0.0f); /平移繪制位置parallelogram1(); /繪制四邊形 /繪制第二個(gè)藍(lán)色平行四邊形,同紅色四邊形交叉 glColor3f(0.0f,0.0f,1.0f); /設(shè)置平行四邊形繪制顏色glLoadIde
21、ntity(); /設(shè)置當(dāng)前矩陣為單位矩陣glTranslatef(parallelogram_X, parallelogram_Y, 0.0); /平移繪制位置parallelogram2(); /繪制四邊形/交換緩沖器,完成物體繪制glutSwapBuffers();2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)18/鍵盤(pán)響應(yīng)函數(shù),改變藍(lán)色四邊形的坐標(biāo)位置void key(unsigned char key,int x,int y)switch(key)case X: parallelogram_X +=0.05;/增加x glutPostRedisplay();break;cas
22、e x: parallelogram_X -=0.05;/減小x glutPostRedisplay();break;case Y: parallelogram_Y +=0.05;/增加y glutPostRedisplay();break;case y: parallelogram_Y -=0.05;/減小y glutPostRedisplay();break;case 033:/按ESCAP鍵退出程序運(yùn)行exit(0);break;default:break;2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)19void main(int argc, char* argv)/glut初
23、始化函數(shù) glutInit(&argc, argv); /設(shè)置初始顯示模式glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); /初始化窗口起始位置glutInitWindowPosition(100, 100); /初始化窗口大小glutInitWindowSize(800, 800);/創(chuàng)建窗口glutCreateWindow(真實(shí)感圖形繪制-深度緩沖器消隱);/調(diào)用鍵盤(pán)響應(yīng)函數(shù)glutKeyboardFunc(key);/調(diào)用顯示函數(shù)glutDisplayFunc(Display);glutMainLoop();return;2022-2-2
24、5計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)208.1.4 8.1.4 區(qū)域細(xì)分算法區(qū)域細(xì)分算法(area subdivision algorithm) 區(qū)域細(xì)分算法也稱為Warnock算法。這種算法在圖像空間中實(shí)現(xiàn)。該算法充分利用圖形的區(qū)域連貫性,在連續(xù)的區(qū)域上確定可見(jiàn)線面及其屬性。它既可以用于消除隱藏線,也可以用于消除隱面,適用于解決多邊形所表示的畫(huà)面消隱問(wèn)題。 區(qū)域細(xì)分算法的基本思想是,把形體投影到全屏幕窗把形體投影到全屏幕窗口上,然后遞歸地分割窗口,直到窗口內(nèi)僅包含單個(gè)可見(jiàn)口上,然后遞歸地分割窗口,直到窗口內(nèi)僅包含單個(gè)可見(jiàn)面或不包含任何面面或不包含任何面。算法先檢測(cè)初始窗口是否包含圖形,如果
25、不包含,則按背景色顯示,若窗口內(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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)21 細(xì)分過(guò)程如圖6所示,算法每次將區(qū)域分割為四等分,類似于組織一棵四叉樹(shù)。這樣,即使是一個(gè)1024l024分辨率的窗口被細(xì)分10次以后,也僅能使每個(gè)單元覆蓋一個(gè)象素。圖62022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)22 窗口
26、與多邊形面的相互關(guān)系可分為四種:內(nèi)含、相內(nèi)含、相交、包圍和分離交、包圍和分離。內(nèi)含指的是多邊形全部落在窗口內(nèi);相交指的是多邊形一部分在窗口內(nèi),另一部分在窗口外;包圍是指窗口包含在多邊形內(nèi);分離指的是多邊形完全在窗口外。四種關(guān)系如圖7所示。圖72022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)23 我們可根據(jù)這四種關(guān)系來(lái)確定一個(gè)窗口是否需要繼續(xù)細(xì)分。若以下條件之一為真,則無(wú)須再對(duì)窗口進(jìn)行細(xì)分: 所有多邊形均為窗口的分離多邊形,此時(shí)窗口內(nèi)為所有多邊形均為窗口的分離多邊形,此時(shí)窗口內(nèi)為空;空; 在窗口內(nèi)只有一個(gè)內(nèi)含多邊形;在窗口內(nèi)只有一個(gè)內(nèi)含多邊形; 窗口只與一個(gè)多邊形相交;窗口只與一個(gè)多邊形相
27、交; 窗口只被一個(gè)多邊形所包圍或包圍多邊形遮擋了其窗口只被一個(gè)多邊形所包圍或包圍多邊形遮擋了其它所有多邊形。它所有多邊形。 通過(guò)檢查所有多邊形的包圍盒與窗口邊界的關(guān)系可以實(shí)現(xiàn)條件的檢測(cè)。利用XY平面上的包圍盒可以判別內(nèi)含多邊形。窗口和多邊形相交關(guān)系可以借助于裁剪算法來(lái)解決。利用平面方程計(jì)算可以測(cè)定所有包圍多邊形、重疊多邊形和內(nèi)含多邊形在窗口邊界四頂點(diǎn)處的深度值,若某多邊形的深度值小于其它所有多邊形,則條件結(jié)果為真。 2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)24區(qū)域細(xì)分算法可以借助于堆棧結(jié)構(gòu)實(shí)現(xiàn),算法描述如下:(1) (1) 將初始窗口入棧;將初始窗口入棧;(2) (2) 棧空結(jié)束
28、。否則,取出棧頂窗口轉(zhuǎn)步驟棧空結(jié)束。否則,取出棧頂窗口轉(zhuǎn)步驟(3)(3);(3) (3) 檢測(cè)確定當(dāng)前窗口與多邊形關(guān)系,若檢測(cè)確定當(dāng)前窗口與多邊形關(guān)系,若 A A條件為真條件為真, ,以背景顏色顯示當(dāng)前窗口,轉(zhuǎn)步驟以背景顏色顯示當(dāng)前窗口,轉(zhuǎn)步驟(2)(2); B B條件為真,多邊形內(nèi)區(qū)域,以該多邊形顏色顯示,條件為真,多邊形內(nèi)區(qū)域,以該多邊形顏色顯示,其它區(qū)域以背景顏色顯示,轉(zhuǎn)步驟其它區(qū)域以背景顏色顯示,轉(zhuǎn)步驟(2)(2); C C條件為真條件為真, ,相交多邊形位于窗口內(nèi)的區(qū)域以該多邊相交多邊形位于窗口內(nèi)的區(qū)域以該多邊形顏色顯示形顏色顯示, ,其它區(qū)域以背景顏色顯示其它區(qū)域以背景顏色顯示,
29、,轉(zhuǎn)步驟轉(zhuǎn)步驟(2)(2); D D條件為真條件為真, ,以包圍多邊形顏色顯示當(dāng)前窗口以包圍多邊形顏色顯示當(dāng)前窗口, ,轉(zhuǎn)步轉(zhuǎn)步驟驟(2)(2); E E條件均不滿足,轉(zhuǎn)步驟條件均不滿足,轉(zhuǎn)步驟(4)(4)。(4) (4) 對(duì)當(dāng)前窗口進(jìn)行再細(xì)分,細(xì)分后的子窗口存入堆棧,對(duì)當(dāng)前窗口進(jìn)行再細(xì)分,細(xì)分后的子窗口存入堆棧,轉(zhuǎn)轉(zhuǎn)(2)(2)。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)25 8.2 8.2 簡(jiǎn)單光照模型簡(jiǎn)單光照模型( (Basic Illumination Model) ) 當(dāng)光照射到一個(gè)不透明的物體表面時(shí),部分被反射反射( (Reflection) ),部分被吸收并轉(zhuǎn)化為熱。
30、對(duì)一個(gè)透明的表面,部分入射光被反射,而另一部分被透射透射。其中,反射或透射反射或透射部分的光使物體可見(jiàn)部分的光使物體可見(jiàn)。如果入射光全部被吸收,物體將不可見(jiàn),該物體稱為黑體黑體。一物體表面呈現(xiàn)的顏色是由物體表面顏色是由物體表面向視線方向輻射的光能中各種波長(zhǎng)的分布所決定的向視線方向輻射的光能中各種波長(zhǎng)的分布所決定的。光能中被吸收、反射或透射的數(shù)量決定于光的波長(zhǎng)和物體的表面特表面特性性(surface property)。由于光照射到物體表面產(chǎn)生的現(xiàn)象是很復(fù)雜的,它與光源光源(light sources)的性質(zhì)、形狀、數(shù)量、位置的性質(zhì)、形狀、數(shù)量、位置有關(guān),還與物體的幾何形狀、光學(xué)性質(zhì)、表面紋理物
31、體的幾何形狀、光學(xué)性質(zhì)、表面紋理等許多因素有關(guān),甚至與人眼對(duì)光的生理與心理視覺(jué)人眼對(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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)268.2.1 8.2.1 環(huán)境光環(huán)境光(Ambient Light) 在實(shí)際場(chǎng)景中,一個(gè)物體即使不直接暴露于光源之下,還會(huì)接收到從周圍物體散射出來(lái)的光,這種光是由是由于周圍各物體被照明后多次反射所產(chǎn)生的于周圍各物體被照明后多次反射所產(chǎn)生的。例如從墻壁、地板及天
32、花板等反射回來(lái)的光。這種光是一種分布光源分布光源,稱為環(huán)境光。環(huán)境光的特點(diǎn)是照射在物體上的光來(lái)自周環(huán)境光的特點(diǎn)是照射在物體上的光來(lái)自周圍各個(gè)方向,又均勻地向各個(gè)方向反射圍各個(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可表示為 I Ie ek ka aI Ia a 0k 0ka a11式中ka為由物體表
33、面材料屬性決定的環(huán)境光反射系數(shù)。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)278.2.2 8.2.2 漫反射光漫反射光( (Diffuse Light) 我們可以用光源來(lái)表示所有發(fā)出輻射能量的物體,如燈泡或太陽(yáng)。點(diǎn)光源點(diǎn)光源( (point light source) )是光源的最簡(jiǎn)單模型。這種光源模型是對(duì)場(chǎng)景中比物體小得多的光源的合適的逼近。離場(chǎng)景足夠遠(yuǎn)的光源,如太陽(yáng),也可用點(diǎn)光源模型來(lái)較好的模擬。我們?cè)谙旅娣瓷涔獾挠懻撝屑俣ㄊ褂命c(diǎn)光源模型。 從物體表面反射出來(lái)的光決定于光源中光的成分、光的成分、光線的方向、光源的幾何性質(zhì)光線的方向、光源的幾何性質(zhì)以及物體表面的朝向和表面的材料屬
34、性等。物體表面的反射光又可分為漫反射光和鏡面反射光。漫反射光可以認(rèn)為是光穿過(guò)物體漫反射光可以認(rèn)為是光穿過(guò)物體表面并被吸收,然后重新發(fā)射出來(lái)的光,漫反射光均表面并被吸收,然后重新發(fā)射出來(lái)的光,漫反射光均勻地散布在各個(gè)方向,因此同觀察者的位置無(wú)關(guān)勻地散布在各個(gè)方向,因此同觀察者的位置無(wú)關(guān)。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)28 朗伯(lambert)余弦定律總結(jié)了點(diǎn)光源所發(fā)出的光照射在一個(gè)完全漫反射體上時(shí)光的反射法則。根據(jù)朗伯定律,一個(gè)完全漫射體上反射出來(lái)的光強(qiáng)度同入射光與物體表面法線之間夾角的余弦成正比。即 I Id dk kd dI Il lcos 0kcos 0kd d1
35、, 01, 09090式中Id為漫反射光強(qiáng)度;Il為從一點(diǎn)光源所發(fā)出的入射光的光強(qiáng)度;kd為決定于物體表面材料屬性的漫反射系數(shù),0kd1;為入射光與表面法向量之間的夾角,如下圖所示。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)29 反射光的光強(qiáng)度是光波長(zhǎng)的函數(shù),然而在簡(jiǎn)單的光照模型中,通常假定光波長(zhǎng)為常數(shù)。若N為物體表面的單位法向量,L為從表面上一點(diǎn)指向點(diǎn)光源的單位矢量,則cos= NL,則(8-3)可以寫(xiě)成: IdkdIl(NL) 0k 0kd d1 1 簡(jiǎn)單光照模型示例簡(jiǎn)單光照模型示例(光線與視線同異向光線與視線同異向)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)308
36、.2.3 8.2.3 鏡面反射光鏡面反射光( (Specular Light) ) 除了漫反射,光源照射物體表面還會(huì)產(chǎn)生高光或強(qiáng)光,這種現(xiàn)象稱為鏡面反射。這種高光效果在光滑的物體表面上很明顯,如磨光的金屬表面,而對(duì)于陰暗物體表面則效果較差。 鏡面反射光是具有一定方向的反射光鏡面反射光是具有一定方向的反射光。鏡面反射角等于入射角,它們位于表面的單位法向量N的兩側(cè),如圖9所示。用R表示鏡面反射方向的單位矢量,L表示指向點(diǎn)光源的單位矢量,V為指向視點(diǎn)的單位矢量,是V 與R之間的夾角。對(duì)于一個(gè)理想的鏡面反射,入射光僅在鏡面反射方向有反射現(xiàn)象,即僅當(dāng)V與R重合時(shí)才能觀察到反射光,而在其它方向都看不到反射
37、光。對(duì)于這種光滑的反射面,鏡面的反射光強(qiáng)比漫反射的光強(qiáng)和環(huán)境光的光強(qiáng)高出很多倍。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)31圖92022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)32 對(duì)于一般光滑表面,由于表面具有一定粗糙度,其表面實(shí)際上是由許多朝向不同的微小表面組成,鏡面反鏡面反射方向分布在射方向分布在R R周圍有限范圍內(nèi)周圍有限范圍內(nèi)。較光滑表面的鏡面反較光滑表面的鏡面反射范圍較小,而粗糙的物體表面則有較大的鏡面反射范射范圍較小,而粗糙的物體表面則有較大的鏡面反射范圍圍。Phong提出一個(gè)計(jì)算鏡面反射的經(jīng)驗(yàn)公式,稱為PhongPhong模型模型。公式用余弦函數(shù)的冪次來(lái)模擬
38、鏡面反射光的空間分布,可表示為: I Is sk ks sI Il lcoscosn n 0ks1, 090式中Is為鏡面反射光強(qiáng)度;Il為入射光的光強(qiáng)度;ks為決定于物體表面材料屬性的鏡面反射系數(shù),它是入射角和入射光波長(zhǎng)的函數(shù),很難精確得到,實(shí)際應(yīng)用中常以美學(xué)觀點(diǎn)或?qū)嶒?yàn)方法取一常數(shù),0ks1;鏡面反射光強(qiáng) 度 與 c o sn 成 正 比 , 0 9 0 , 因 而0cosn1。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)33 n為鏡面反射光的會(huì)聚系數(shù),其值同被觀察物體表面的光滑度有關(guān),會(huì)聚性好的光滑表面,如金屬表面,n值較大,而粗糙表面如紙張表面的n值則較小。n n值一值一般取般
39、取1 120002000,圖10表示了n對(duì)鏡面反射角度范圍的影響。圖102022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)34 當(dāng)視點(diǎn)取在鏡面反射方向附近時(shí),觀察者接受到鏡面反射光較強(qiáng),而偏離這一方向觀察時(shí),接受到鏡面反射光就會(huì)減弱,故高光隨著觀察者的位置變化而變化。另外,由于鏡面反射光是經(jīng)物體外表面直接反射而產(chǎn)生的,與漫反射光不同,高光具有與入射光同樣性質(zhì),而與物體表面顏色無(wú)關(guān)。 若R R與V V已規(guī)格化為單位向量,則式(8-5)可改寫(xiě)為: I Is sk ks sI Il l(R(RV)V)n n 0ks1 綜上所述,從視點(diǎn)觀察到物體表面上任一點(diǎn)處的顏色和亮度I應(yīng)為反射光強(qiáng)度Ie、漫反
40、射光強(qiáng)度Id及鏡面反射光強(qiáng)度Is的總和,即 I II Ie eI Id dI Is s將各入上式,則得 I Ik ka aI Ia ak kd dI Il l(N(NL)L)k ks sI Il l(R(RV)V)n n 2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)35真實(shí)感圖形繪制真實(shí)感圖形繪制光照處理光照處理可改變材料鏡面反射光會(huì)聚系數(shù)可改變材料鏡面反射光會(huì)聚系數(shù)(n):按鍵:按鍵S-加,加,s-減減OpenGL(Open Graphics Library)編程)編程源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序-圖形學(xué)程序原程序示例
41、圖形學(xué)程序原程序示例- “8-3真實(shí)感圖形繪制真實(shí)感圖形繪制光照處理光照處理.cpp”2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)36 另外,反射光強(qiáng)度還和物體與點(diǎn)光源的距離d的平方成反比,即物體離光源愈遠(yuǎn),顯的愈暗。因此,若要得到真實(shí)感的光照效果,在光照明模型中必須考慮這一因素。然而,若采用因子1/d1/d2 2來(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)系為線性衰減。 I Ik ka a
42、I Ia aI Il l(k(kd d(N(NL)L)k ks s(R(RV)V)n n)/(d+K)/(d+K)常數(shù)項(xiàng)K K為一調(diào)整常數(shù),它的存在可以防止當(dāng)d很小時(shí)1/d值太大。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)37 上式就是計(jì)算機(jī)圖形學(xué)中通常使用的簡(jiǎn)單光照模型,也稱為明暗函數(shù)明暗函數(shù),用它可以計(jì)算出物體表面上每一象素處的光強(qiáng)或明暗色調(diào)。上式的計(jì)算量是很大的,尤其是鏡面反射方向矢量R R的計(jì)算。使用矢量L L與V V間的半角矢量H H來(lái)計(jì)算鏡面反射范圍可得到簡(jiǎn)化的Phong模型。只須以N NH H替代Phong模型中的點(diǎn)積V VR R。這等于用cos計(jì)算來(lái)替代cos,如圖
43、11所示。半角矢量可從下式計(jì)算得到: H H(L(LV)/2V)/2替換后(8-8)可以寫(xiě)為: I Ik ka aI Ia aI Il l(k(kd d(N(NL)L)k ks s(N(NH)H)n n)/(d+K)/(d+K)若觀察點(diǎn)與光源離物體表面足夠遠(yuǎn),則V V與L L可以看作為常量,則H H亦為常量。就是說(shuō)只要計(jì)算一次H H的值就可以,但R R是隨N N變化而改變的,這就是用N NH H近似V VR R的好處。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)38圖11簡(jiǎn)單光照模型示例簡(jiǎn)單光照模型示例(泛光、漫光、鏡面光泛光、漫光、鏡面光)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉
44、波制作(C)398.2.4 8.2.4 多點(diǎn)光源和顏色多點(diǎn)光源和顏色 若存在多個(gè)點(diǎn)光源,則物體表面上的反射光強(qiáng)度是各個(gè)點(diǎn)光源照射效果的線性相加,這時(shí)光照模型為: IkaIa (kd(N NL Li)ks(N NH Hi)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)改寫(xiě)成RGB三個(gè)分量的形式為: IRkaRIaRIlR(kdR(N NL L)ks(N NH H)n)
45、/(d+K) IGkaGIaGIlG(kdG(N NL L)ks(N NH H)n/(d+K) IBkaBIaBIlB(kdB(N NL L)ks(N NH H)n/(d+K)miiiliKdI12022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)40計(jì)算出RGB三個(gè)基色分量的強(qiáng)度,用來(lái)控制RGB彩色顯示器中相應(yīng)的電子槍,就可以獲得彩色圖形。簡(jiǎn)單光照模型示例簡(jiǎn)單光照模型示例(旋轉(zhuǎn)球體旋轉(zhuǎn)球體)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)418.3 8.3 透明透明( (Transmission) )處理處理 前面介紹的光照模型假定所考慮的物體表面是不透明的。但有些物體是透明的,如水
46、、玻璃等。一個(gè)透明物體的表面會(huì)同時(shí)產(chǎn)生反射光和折射光。當(dāng)光線從一種傳播介質(zhì)進(jìn)入另一種傳播介質(zhì)時(shí),例如從空氣進(jìn)入水中時(shí),光線會(huì)由于折射而產(chǎn)生彎曲。光線彎曲的程度由Snell定律決定,該定律指出折射光線與入射光線位于同一平面內(nèi),而且入射角與折射角之間存在下列關(guān)系: 1 1sin=sin=2 2sinsin式中,1和2分別為光線在第一種介質(zhì)和第二種介質(zhì)中的折射率,為光線入射角,為折射角,圖12為示意圖。實(shí)際中,沒(méi)有那種材料能夠透過(guò)全部入射光,總有一部分被反射出去。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)42圖12 入射與折射的關(guān)系2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)4
47、3 光有規(guī)則透射透射和漫透射漫透射。透明材料如玻璃等會(huì)產(chǎn)生規(guī)則透射,透過(guò)透明材料觀察物體仍然是清晰的透過(guò)透明材料觀察物體仍然是清晰的。如果透射光線是發(fā)散的,那么就會(huì)形成漫透射,發(fā)生漫透射的材料呈現(xiàn)朦朧的半透明狀態(tài)發(fā)生漫透射的材料呈現(xiàn)朦朧的半透明狀態(tài)。漫透射計(jì)算復(fù)雜,大多數(shù)光照模型僅考慮規(guī)則透射。 當(dāng)要表示一個(gè)透明表面時(shí),光強(qiáng)度計(jì)算公式必須進(jìn)行修改,一方面要考慮由于透射的原因,表面反射光強(qiáng)度的減弱,另一方面還要考慮表面背后物體的反射光穿過(guò)透明表面,對(duì)表面總光強(qiáng)度的增加,如圖13所示。 為了加速光強(qiáng)度的計(jì)算,簡(jiǎn)單的透明算法不考慮折射導(dǎo)致的路徑變化,這樣折射角總是與入射角相同,也不考慮光線在媒體中所
48、經(jīng)路線長(zhǎng)度對(duì)光強(qiáng)的影響。對(duì)透明的可見(jiàn)面,取它與同它相距最近的另一表面光強(qiáng)的線性組合,則總的光強(qiáng)度可表示為: I=(1-kI=(1-kt t)I)It t+k+kt tI Ic c 0k 0kt t11其中,I Ic c為透明可見(jiàn)面的反射光強(qiáng)度,為透明可見(jiàn)面的反射光強(qiáng)度,I It t為透明可見(jiàn)面后第一個(gè)可為透明可見(jiàn)面后第一個(gè)可見(jiàn)表面上的光強(qiáng)度。見(jiàn)表面上的光強(qiáng)度。k kt t為透明可見(jiàn)面的透明度為透明可見(jiàn)面的透明度。k kt t=1=1對(duì)應(yīng)不透明面,對(duì)應(yīng)不透明面,光線無(wú)透射。光線無(wú)透射。k kt t=0=0對(duì)應(yīng)不可見(jiàn)面,光線全部透射對(duì)應(yīng)不可見(jiàn)面,光線全部透射。Ic和It可用前面介紹的光照模型計(jì)算。
49、2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)44 若It所對(duì)應(yīng)表面也是透明面,則上述算法可以遞歸地使用,直到遇到一個(gè)不透明面或背景時(shí)為止。 透明處理還可以用于顯示復(fù)雜物體或空間的內(nèi)部結(jié)透明處理還可以用于顯示復(fù)雜物體或空間的內(nèi)部結(jié)構(gòu)構(gòu)。為每一多邊形表面均設(shè)一透明度,透明度的初始值均取為1,繪制出物體的外形消隱圖。通過(guò)有選擇地將某些表面的透明度改為0,即將它們當(dāng)做看不見(jiàn)的面處理,這樣再次繪制畫(huà)面時(shí),就會(huì)顯示出物體的內(nèi)部結(jié)構(gòu)。圖132022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)45真實(shí)感圖形繪制真實(shí)感圖形繪制透明處理透明處理可改變藍(lán)色球透明度:按鍵可改變藍(lán)色球透明度:按鍵A-增加,
50、增加,a-減小減小可改變藍(lán)色球位置:按鍵可改變藍(lán)色球位置:按鍵X-右移,右移,x-左移,左移,Y-上移,上移,y-下移下移OpenGL(Open Graphics Library)編程)編程源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序-圖形學(xué)圖形學(xué) 程序原程序示例程序原程序示例-“8-2真實(shí)感圖形繪制真實(shí)感圖形繪制透明處理透明處理.cpp”2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)468.4.1 8.4.1 表面法線的計(jì)算表面法線的計(jì)算 但為了提高計(jì)算速度,一般用多邊形平面逼近曲面。對(duì)于多邊形平面,可根據(jù)其平面方程的系數(shù),決定平面的法
51、向量,平面內(nèi)所有點(diǎn)的法向量是相同的。而多邊形平面在頂點(diǎn)處的法向量可取包圍該頂點(diǎn)的各多邊形平面法向量的平均值。如圖14中,頂點(diǎn)V處的近似法向量為: N NV V(N(N1 1N N2 2.N Nn n)/n)/n其中,n為包圍頂點(diǎn)的平面?zhèn)€數(shù),圖中示例n=4。如圖148.4 明暗處理明暗處理(Shading)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)47簡(jiǎn)單光照模型示例簡(jiǎn)單光照模型示例(根據(jù)法線消隱根據(jù)法線消隱)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)48 但多邊形一般是由頂點(diǎn)和棱邊存儲(chǔ)的,在各多邊形平面方程未知的情況下,頂點(diǎn)處的法向量可取交于此頂點(diǎn)的各棱邊叉積的平均值。
52、如圖15中,頂點(diǎn)V處的法向量可由下式計(jì)算: N NV VVVVV1 1 VVVV2 2VVVV2 2 VVVV3 3VVVV3 3 VVVV4 4VVVV4 4 VVVV1 1上式近似法向量的模依賴于圍繞頂點(diǎn)的各多邊形棱邊數(shù)和長(zhǎng)度。多邊形愈大,棱邊愈長(zhǎng),模愈大,實(shí)際使用中應(yīng)該單位化。圖152022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)49簡(jiǎn)單光照模型示例簡(jiǎn)單光照模型示例(根據(jù)頂點(diǎn)坐標(biāo)消隱根據(jù)頂點(diǎn)坐標(biāo)消隱)2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)50真實(shí)感圖形繪制真實(shí)感圖形繪制光照處理光照處理可改變光源位置:按鍵可改變光源位置:按鍵X-右移,右移,x-左移,左移,Y-上移,
53、上移,y-下移,下移,Z-距離正加,距離正加,z距離負(fù)加距離負(fù)加可改變漫反射系數(shù):按鍵可改變漫反射系數(shù):按鍵R-R加,加,r-R減,減,G-G加,加,g-G減,減,B-B加,加,b-B減減可改變材料鏡面反射光會(huì)聚系數(shù)可改變材料鏡面反射光會(huì)聚系數(shù)(n):按鍵:按鍵S-加,加,s-減減OpenGL(Open Graphics Library)編程)編程源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序源程序見(jiàn):計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)及部分演示示例源程序-圖形學(xué)程序原程序示例圖形學(xué)程序原程序示例- “8-3真實(shí)感圖形繪制真實(shí)感圖形繪制光照處理光照處理.cpp”真實(shí)感圖形繪制真實(shí)感圖形繪制日照地球日照地球202
54、2-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)51 當(dāng)觀察畫(huà)面上具有相同光強(qiáng)度的區(qū)域時(shí),在其邊界處眼睛所感受到的明亮度常常會(huì)不同于實(shí)際值。眼睛的這一視覺(jué)特性使得光強(qiáng)度為常數(shù)的區(qū)域看上去似乎是光強(qiáng)度發(fā)生了變化,這一現(xiàn)象稱之為馬赫馬赫(Mach)帶效應(yīng)帶效應(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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)528.4.2
55、Gouraud8.4.2 Gouraud光強(qiáng)度插值方法光強(qiáng)度插值方法 這種由Gouraud提出的光強(qiáng)度插值方法通常被稱為GouraudGouraud明暗處理明暗處理( (Gouraud Shading) )。該方法先計(jì)算出各該方法先計(jì)算出各多邊形頂點(diǎn)處的光強(qiáng)度值,然后再采用雙線性插值方法多邊形頂點(diǎn)處的光強(qiáng)度值,然后再采用雙線性插值方法確定多邊形平面上每一點(diǎn)處的光強(qiáng)度值確定多邊形平面上每一點(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)
56、處的光強(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-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)53圖1622111212IyyyyIyyyyIRRR32322233IyyyyIyyyyIQQQQQRPRRQRQPPIxxxxIxxxxI2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)54 式中x,y為各點(diǎn)投影到屏幕后的坐標(biāo)。上面各次線性插值還可以改成增量的形式,例如改為:tIIt
57、IIIIRQRRP)(0t1 采用Gouraud明暗處理解決了兩多邊形平面之間光強(qiáng)度的不連續(xù)過(guò)渡以及多邊形平面域內(nèi)光強(qiáng)度單一的問(wèn)題,而且計(jì)算速度較之簡(jiǎn)單光照模型有明顯的提高。但此方法對(duì)漫射效果好,對(duì)鏡面反射效果差此方法對(duì)漫射效果好,對(duì)鏡面反射效果差。主要表現(xiàn)在高光域的形狀不規(guī)整,高光域只能在頂點(diǎn)周圍形成,不能在多邊形域內(nèi)形成。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)558.4.3 Phong 8.4.3 Phong 法向量插值方法法向量插值方法 Phong提出了對(duì)法向量而不是光強(qiáng)度進(jìn)行插值的方法。在多邊形平面上各點(diǎn)處按照線性插值計(jì)算法向量,在多邊形平面上各點(diǎn)處按照線性插值計(jì)算法向
58、量,然后根據(jù)光照模型計(jì)算光強(qiáng)度然后根據(jù)光照模型計(jì)算光強(qiáng)度。該方法通常被稱為PhongPhong明暗處理明暗處理( (Phong Shading) )。它能夠更真實(shí)地表現(xiàn)物它能夠更真實(shí)地表現(xiàn)物體表面鏡面反射效果并大大降低馬赫帶效應(yīng)體表面鏡面反射效果并大大降低馬赫帶效應(yīng)。 這種方法與Gouraud方法一樣,首先計(jì)算多邊形每個(gè)頂點(diǎn)的法向量,然后應(yīng)用與Gouraud光強(qiáng)度插值計(jì)算類似方法求得每個(gè)點(diǎn)處的法矢量。如圖17,假設(shè)三個(gè)頂點(diǎn)處的法向量已經(jīng)計(jì)算出,分別記為N N1,N N2,N N3。如果要計(jì)算點(diǎn)P處的法向量N NP,先用N N1,N N2,N N3線性插值計(jì)算R和Q這兩點(diǎn)處的法向量N NR和N
59、NQ,然后再利用N NR和N NQ線性插值計(jì)算N NP。2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)56圖1722111212NyyyyNyyyyNRRR32322233NyyyyNyyyyNQQQQQRPRRQRQPpNxxxxNxxxxN2022-2-25計(jì)算機(jī)圖形學(xué)演示稿 紀(jì)玉波制作(C)57 Phong明暗處理對(duì)法向量插值的方法,比Gouraud明暗處理中對(duì)光強(qiáng)度插值法所得到的結(jié)果精確得多。法向量插值可以生成高光,真實(shí)感更強(qiáng)。然而,法向量插值計(jì)算量較大,既要計(jì)算各項(xiàng)點(diǎn)的法向量,插值計(jì)算多邊形平面上各點(diǎn)的法向量,還要用光照模型計(jì)算各點(diǎn)的光強(qiáng)度值。2022-2-25計(jì)算機(jī)圖形學(xué)演
60、示稿 紀(jì)玉波制作(C)588.5 8.5 陰影陰影( (shadows) )處理處理 當(dāng)觀察方向與光源方向重合時(shí),觀察者是看不到陰當(dāng)觀察方向與光源方向重合時(shí),觀察者是看不到陰影的。只有當(dāng)兩者方向不一致時(shí),才會(huì)看到陰影影的。只有當(dāng)兩者方向不一致時(shí),才會(huì)看到陰影。陰影使人感到畫(huà)面上景物的遠(yuǎn)近深淺,從而極大地增強(qiáng)畫(huà)面的真實(shí)感。 陰影一般分為兩類:自身陰影和投射陰影自身陰影和投射陰影。物體本身遮擋而使光線照不到某些面稱自身陰影。投射陰影有本影本影(umbra)和半影半影(penumbra)之分。我們觀察一個(gè)物體影子時(shí),可以看到位于中間全黑的輪廓分明部分就是本影。本影周圍半明半暗的區(qū)域?yàn)榘胗啊1居笆撬泄庠吹墓?/p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專利技術(shù)價(jià)格保密合同書(shū)
- 2025年度休閑漁業(yè)發(fā)展魚(yú)塘承包經(jīng)營(yíng)合同
- 2025年度護(hù)膚品專業(yè)渠道代理商招募合同
- 2025年度業(yè)主起訴解除物業(yè)服務(wù)合同法律依據(jù)與實(shí)踐應(yīng)用
- 2025年度商業(yè)街場(chǎng)地租賃合同解除書(shū)
- 2025年度大型活動(dòng)安全預(yù)案人身免責(zé)及應(yīng)急處理合同
- 2025年度山地滑雪場(chǎng)租賃管理服務(wù)協(xié)議
- 2025年廣東環(huán)境保護(hù)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
- 2025年度智能公寓簡(jiǎn)易版租賃合同
- 2025年度教育培訓(xùn)機(jī)構(gòu)中途入股投資及分紅合作協(xié)議
- JJF1175-2021試驗(yàn)篩校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 產(chǎn)品結(jié)構(gòu)設(shè)計(jì)概述課件
- 八年級(jí)下綜合實(shí)踐教案全套
- 胸痹心痛中醫(yī)診療方案及臨床路徑
- 第8課《山山水水》教學(xué)設(shè)計(jì)(新人教版小學(xué)美術(shù)六年級(jí)上冊(cè))
- word 公章 模板
- 世界技能大賽PPT幻燈片課件(PPT 21頁(yè))
- 中學(xué)生防溺水安全教育課件(PPT 44頁(yè))
- Python程序設(shè)計(jì)ppt課件完整版
- T∕ZSQX 008-2020 建設(shè)工程全過(guò)程質(zhì)量行為導(dǎo)則
- 《腹膜透析》ppt課件
評(píng)論
0/150
提交評(píng)論