第8章真實感圖形生成技術(shù)1_第1頁
第8章真實感圖形生成技術(shù)1_第2頁
第8章真實感圖形生成技術(shù)1_第3頁
第8章真實感圖形生成技術(shù)1_第4頁
第8章真實感圖形生成技術(shù)1_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)1

第八章真實感圖形生成技術(shù)(ThirdDimensionGraphicsTechnology)

用計算機(jī)生成三維形體的真實感圖形,是計算機(jī)圖形學(xué)研究的重要內(nèi)容之一。真實感圖形生成技術(shù)在仿真模擬、幾何造型、計算機(jī)動畫制作、影視廣告、科學(xué)計算可視化、自然景物模擬、醫(yī)學(xué)、氣象學(xué)、地質(zhì)學(xué)等領(lǐng)域都有廣泛應(yīng)用。近幾年來隨著多色彩高分辨率光柵圖形設(shè)備的普及,真實感圖形生成技術(shù)發(fā)展迅速。真實感圖形生成技術(shù)涉及到的主要問題包括隱藏線面的消除、明暗處理、陰影處理、紋理處理等,缺乏這些處理,圖形會缺乏真實感或真實感不足。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)28.1隱藏線面的消除(Hidden-LineandSurfaceRemoval)

在用計算機(jī)生成三維圖形時,形體的所有部分都將被表示,不管是可見的還是不可見的,這樣的圖形顯示出來形狀是不清楚的,甚至是不確定的。圖1(a)所示是一個通過棱邊表示的立方體的圖形,如果不消隱不易辨別。通過適當(dāng)刪除不可見的隱藏部分,可以得到表示明確的圖形。圖1(b)是觀察點在立方體的前上方的消隱圖,圖1(c)是觀察點位于立方體的前下方消隱圖,消隱圖表示了明確的立體感形體。圖12023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)3

觀察點確定后,找出并消除圖形中不可見的部分,稱為消隱。經(jīng)過消隱得到的圖形稱為消隱圖。消除隱藏線和隱藏面是計算機(jī)圖形學(xué)中一個較為困難的問題,消隱算法是決定相對于空間給定位置的觀察者,哪些棱邊、表面或物體是可見的,哪些是不可見的。消隱不僅與消隱對象有關(guān),還與觀察點、觀察方向、投影面等的設(shè)置方位有關(guān)。改變這些設(shè)置,物體上某些可見的部分將會變成不可見,某些不可見的部分又會變成可見。雖然各種消隱算法的基本思想有所不同,但它們大多采用了排序和相關(guān)性以提高效率。排序的主要目的是區(qū)分體、面、邊、點與觀察點間幾何距離的遠(yuǎn)近。因為一個物體離觀察點愈遠(yuǎn),它愈有可能被另一距觀察點較近的物體部分地或全部遮擋。消隱算法的效率在很大程度上取決于排序的效率。通常利用畫面在局部區(qū)域內(nèi)的相關(guān)性來提高排序過程的效率。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)4

消隱算法一般可以分為兩類。如果算法是在物體所定義的空間實現(xiàn),那么這種算法稱為對象空間算法;如果算法是在物體投影后的屏幕坐標(biāo)空間實現(xiàn),那么這種算法就稱為圖象空間算法。一般說來,對象空間算法有比較高的精度,而圖象空間算法在精度上受屏幕分辨率的限制,但可以方便地利用圖象空間中各種相關(guān)性獲得較高的計算效率。8.1.1凸多面體的消隱算法(Back-FaceRemovalAlgorithm)

在消隱問題中,凸多面體是最簡單情形。凸多面體是由多個凸多邊形平面包圍而成的立體,連接形體上不屬于同一表面的任意兩點的線段完全位于形體的內(nèi)部。對于單個凸多面體,背向觀察點的面是不可見面,如圖2所示。因此,只要判斷出這些“朝后面”,即可達(dá)到隱藏面消除的目的。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)5圖2

構(gòu)成多面體的每個平面都有其法線。通常規(guī)定法線的方向是由多面體的內(nèi)部指向多面體的外部,稱為“外法線”。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)6

假定在右手坐標(biāo)系中,觀察點位于原點,投影面平行于XY坐標(biāo)平面,以Z軸作為深度坐標(biāo)軸,視線平行于Z軸,如圖3所示,則平面外法線同Z軸方向的夾角,就是外法線同視線的夾角。很顯然,對于單個凸多面體,當(dāng)外法線同視線的夾角小于90°時,其平面背向觀察點為不可見面。圖32023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)7設(shè)平面外法線同Z軸方向的夾角為β,則cosβ為單位平面外法線矢量在Z軸上的分量。β角同可見性的關(guān)系為:

(1)當(dāng)0≤β≤90

時,cosβ>0,此面背向觀察者為不可見面。(2)當(dāng)﹦90

時,cosβ﹦0,此面平行于Z軸,可以認(rèn)為是不可見面。(3)當(dāng)90≤β≤180

時,cosβ<0,此面朝向觀察者的,為可見面。設(shè)平面方程為

Ax+By+Cz+D=0法向矢量為

N﹦Ai﹢Bj﹢Ck則cosβ﹦C/|N|。作為判斷依據(jù),只需要知道cosβ的正負(fù)號就夠了。因為|N|恒大于0,所以cosβ的符號由C決定,因此,當(dāng)C<0時,為可見面。當(dāng)C≥0時,為不可見面。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)8

由于三點可以構(gòu)成一個平面,和三點可以構(gòu)成兩個矢量,由兩矢量的叉積可以求出平面的法線。對于凸多面體,任取構(gòu)成平面多邊形的三個相鄰點P0(x0,y0,z0),P1(x1,y1,z1),P2(x2,y2,z2),按右手規(guī)則確定點的順序,此時有:

為了決定一個凸多面體的不可見面,對于每一個面按上述公式進(jìn)行計算,當(dāng)C≥0時為不可見面。對于單個凸多面體,該方法可判別出所有隱藏面,因為每個面或是完全可見,或是完全不可見。對于其它形體,如凹多面體或由多個物體組成的復(fù)雜形體,則還需進(jìn)行更多的測試來檢查是否存在被其它面或其它物體完全或部分遮擋的表面。通常,凸多面體消隱處理可消除一半左右的隱藏面。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)9凸多面體消隱演示示例2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)108.1.2畫家算法(DepthSortandPainter’sAlgorithm)

畫家創(chuàng)作一幅畫的過程是先畫背景,然后畫中間景物,最后才畫近景。這樣,每一層總是在前一層的景物上覆蓋,從而解決了隱藏面或可見性問題。采用同樣的技術(shù),首先將形體的所有面根據(jù)它們與觀察點的距離排序,然后按距離遞減順序逐個將各面顯示出來,由于當(dāng)重迭時,后顯示的畫面會覆蓋先顯示的畫面,這樣就可以實現(xiàn)消除隱藏面的目的。這種隱藏面消除算法通常稱為畫家算法。

畫家算法也稱表優(yōu)先級算法或深度優(yōu)先排序算法。這種算法排序操作同時在對象空間和圖象空間完成,而在圖象空間產(chǎn)生消隱圖。實現(xiàn)時首先以深度優(yōu)先級進(jìn)行排序,距觀察點遠(yuǎn)的面優(yōu)先級低,近的面優(yōu)先級高,以此建立一張深度優(yōu)先級表。然后按優(yōu)先級表順序?qū)⒏髅嫠腿霂彌_器進(jìn)行顯示。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)11

深度優(yōu)先級表的建立是動態(tài)進(jìn)行的。假定觀察方向同Z軸同向,則最初可按各面的最小z值排序。但這一初步排序可能出現(xiàn)差錯,如圖4所示的情況。圖中盡管面S1的最小z值小于面S2的最小z值,但正確的順序是面S2位于面S1前。因此在實際將z值最大的面S寫入幀緩沖器之前,需與其它面比較以確定是否在Z方向存在重疊。若無重疊,則對S進(jìn)行寫入,若存在重疊,則需作一些比較以決定是否有必要重新排序。如果存在兩面相交和循環(huán)遮擋,如圖5中所示的情況,這時簡單的排序是無法解決問題的,必須求交分割后再進(jìn)行排序。圖4圖52023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)12

下面給出這種算法過程的簡單描述

(1)計算各面最小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已經(jīng)交換過位置,則兩面交叉遮擋,轉(zhuǎn)(4);

(4)用Sn和Sj的交線分割Sn為兩部分,轉(zhuǎn)(1)。

畫家算法的優(yōu)點是簡單,容易實現(xiàn),缺點是算法中的深度排序計算量大。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)138.1.3深度緩沖器算法(Z-BufferAlgorithm)

深度緩沖器算法是一種圖象空間消隱算法。由于一般采用Z軸方向為觀察方向,沿Z軸計算深度,所以此方法也稱為z緩沖器算法。它需要兩個緩沖器,一個是深度緩沖器,用于保存表面上各象素點(x,y)所對應(yīng)的深度值z,一個是刷新緩沖器,用于保存各點的屬性值。兩個緩沖器的大小與屏幕上象素點的個數(shù)相同,也與顯示器幀緩沖器的單元個數(shù)相同。深度緩沖器算法的原理是,對一坐標(biāo)(x,y),查找最小的z(x,y)值。對每一象素計算z(x,y)值并與已經(jīng)存在z緩沖器中該象素的原深度值z比較。如果z(x,y)小于原z值則替換原值,同時用當(dāng)前點的屬性更新原屬性。算法的最大優(yōu)點在于簡單,它可輕而易舉地處理任意復(fù)雜的畫面。因為圖象空間的大小是固定的,計算量最多隨畫面復(fù)雜度線性增長。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)14

深度緩沖器算法可描述如下:

(1)刷新緩沖器置成背景光強或顏色;

(2)深度緩沖器置成最大z值;

(3)以任意順序掃描各多邊形:對于多邊形中的每一象素(x,y,z),將z(x,y)與深度緩沖器中存儲值Zbuffer(x,y)

進(jìn)行比較,若z(x,y)<Zbuffer(x,y),則將此點屬性寫入刷新緩沖器,且用z(x,y)重置Zbuffer(x,y);

(4)所有多邊形都處理完后,顯示消隱圖。深度緩沖器算法便于硬件實現(xiàn)。實際上,在當(dāng)今生產(chǎn)的大多數(shù)高檔圖形工作站,除了幀緩存外,還帶有用于消隱的深度緩存,從而克服了深度緩存算法占用大量存儲單元的缺點。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)15真實感圖形繪制—深度緩沖器消隱可改藍(lán)色四邊形位置:按鍵X-右移,x-左移,Y-上移,y-下移,OpenGL(OpenGraphicsLibrary)編程,源程序見下頁。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)16OpenGL實現(xiàn)深度緩沖器檢測示例:#include"stdafx.h"#include<gl/glut.h>//控制變量說明floatparallelogram_X=0.0,parallelogram_Y=0.0;//藍(lán)色四邊形的坐標(biāo)參數(shù)//三維平行四邊形1繪制函數(shù):中心位于坐標(biāo)原點voidparallelogram1(){

glBegin(GL_QUADS); glVertex3f(-0.3,-0.3,0.3); glVertex3f(0.3,-0.2,-0.3); glVertex3f(0.3,0.4,-0.3); glVertex3f(-0.3,0.3,0.3);

glEnd();}//三維平行四邊形2繪制函數(shù):中心位于坐標(biāo)原點voidparallelogram2(){

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();}2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)17//圖形繪制函數(shù)voidDisplay(void){ //清除屏幕顏色及深度緩沖器

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//啟用深度測試

glEnable(GL_DEPTH_TEST);

//繪制第一個紅色平行四邊形

glColor3f(1.0f,0.0f,0.0f);//設(shè)置平行四邊形繪制顏色

glLoadIdentity(); //設(shè)置當(dāng)前矩陣為單位矩陣

glTranslatef(0.0f,0.0f,0.0f);//平移繪制位置

parallelogram1();//繪制四邊形

//繪制第二個藍(lán)色平行四邊形,同紅色四邊形交叉

glColor3f(0.0f,0.0f,1.0f);//設(shè)置平行四邊形繪制顏色

glLoadIdentity(); //設(shè)置當(dāng)前矩陣為單位矩陣

glTranslatef(parallelogram_X,parallelogram_Y,0.0);//平移繪制位置

parallelogram2();//繪制四邊形

//交換緩沖器,完成物體繪制

glutSwapBuffers();}2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)18//鍵盤響應(yīng)函數(shù),改變藍(lán)色四邊形的坐標(biāo)位置voidkey(unsignedcharkey,int

x,inty){

switch(key) { case'X':

parallelogram_X+=0.05;//增加x

glutPostRedisplay(); break; case'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鍵退出程序運行

exit(0); break; default: break; }}2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)19voidmain(int

argc,char*argv[]){ //glut初始化函數(shù)

glutInit(&argc,argv);//設(shè)置初始顯示模式

glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);//初始化窗口起始位置

glutInitWindowPosition(100,100);//初始化窗口大小

glutInitWindowSize(800,800); //創(chuàng)建窗口

glutCreateWindow("真實感圖形繪制-深度緩沖器消隱"); //調(diào)用鍵盤響應(yīng)函數(shù)

glutKeyboardFunc(key); //調(diào)用顯示函數(shù)

glutDisplayFunc(Display);

glutMainLoop(); return;}2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)208.1.4區(qū)域細(xì)分算法(areasubdivisionalgorithm)

區(qū)域細(xì)分算法也稱為Warnock算法。這種算法在圖像空間中實現(xiàn)。該算法充分利用圖形的區(qū)域連貫性,在連續(xù)的區(qū)域上確定可見線面及其屬性。它既可以用于消除隱藏線,也可以用于消除隱面,適用于解決多邊形所表示的畫面消隱問題。區(qū)域細(xì)分算法的基本思想是,把形體投影到全屏幕窗口上,然后遞歸地分割窗口,直到窗口內(nèi)僅包含單個可見面或不包含任何面。算法先檢測初始窗口是否包含圖形,如果不包含,則按背景色顯示,若窗口內(nèi)只有單個面,則把該面顯示出來。否則,當(dāng)窗口內(nèi)含有兩個以上的面時,則把窗口等分成四個小窗口,對每個小窗口再作上述同樣的處理。這樣反復(fù)地進(jìn)行下去,如果窗口細(xì)分到象素大小,而窗口內(nèi)仍有兩個以上的面,這時不必再繼續(xù)分割,只要取窗口內(nèi)最近的可見面的顏色或所有可見面的平均色作為該象素的值。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)21

細(xì)分過程如圖6所示,算法每次將區(qū)域分割為四等分,類似于組織一棵四叉樹。這樣,即使是一個1024×l024分辨率的窗口被細(xì)分10次以后,也僅能使每個單元覆蓋一個象素。圖62023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)22

窗口與多邊形面的相互關(guān)系可分為四種:內(nèi)含、相交、包圍和分離。內(nèi)含指的是多邊形全部落在窗口內(nèi);相交指的是多邊形一部分在窗口內(nèi),另一部分在窗口外;包圍是指窗口包含在多邊形內(nèi);分離指的是多邊形完全在窗口外。四種關(guān)系如圖7所示。圖72023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)23

我們可根據(jù)這四種關(guān)系來確定一個窗口是否需要繼續(xù)細(xì)分。若以下條件之一為真,則無須再對窗口進(jìn)行細(xì)分:

①所有多邊形均為窗口的分離多邊形,此時窗口內(nèi)為空;②在窗口內(nèi)只有一個內(nèi)含多邊形;③窗口只與一個多邊形相交;④窗口只被一個多邊形所包圍或包圍多邊形遮擋了其它所有多邊形。通過檢查所有多邊形的包圍盒與窗口邊界的關(guān)系可以實現(xiàn)條件①的檢測。利用XY平面上的包圍盒可以判別內(nèi)含多邊形。窗口和多邊形相交關(guān)系可以借助于裁剪算法來解決。利用平面方程計算可以測定所有包圍多邊形、重疊多邊形和內(nèi)含多邊形在窗口邊界四頂點處的深度值,若某多邊形的深度值小于其它所有多邊形,則條件④結(jié)果為真。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)24區(qū)域細(xì)分算法可以借助于堆棧結(jié)構(gòu)實現(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)步驟(2);

D.條件④為真,以包圍多邊形顏色顯示當(dāng)前窗口,轉(zhuǎn)步驟(2);

E.條件①~④均不滿足,轉(zhuǎn)步驟(4)。(4)對當(dāng)前窗口進(jìn)行再細(xì)分,細(xì)分后的子窗口存入堆棧,轉(zhuǎn)(2)。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)258.2簡單光照模型(BasicIlluminationModel)

當(dāng)光照射到一個不透明的物體表面時,部分被反射(Reflection),部分被吸收并轉(zhuǎn)化為熱。對一個透明的表面,部分入射光被反射,而另一部分被透射。其中,反射或透射部分的光使物體可見。如果入射光全部被吸收,物體將不可見,該物體稱為黑體。一物體表面呈現(xiàn)的顏色是由物體表面向視線方向輻射的光能中各種波長的分布所決定的。光能中被吸收、反射或透射的數(shù)量決定于光的波長和物體的表面特性(surfaceproperty)。由于光照射到物體表面產(chǎn)生的現(xiàn)象是很復(fù)雜的,它與光源(lightsources)的性質(zhì)、形狀、數(shù)量、位置有關(guān),還與物體的幾何形狀、光學(xué)性質(zhì)、表面紋理等許多因素有關(guān),甚至與人眼對光的生理與心理視覺因素有關(guān),我們不可能把這一切都準(zhǔn)確計算出來。我們將討論計算光強度的一些較為簡單的方法,這些經(jīng)驗?zāi)P蜑橛嬎阄矬w表面某點處的光強度提供了簡單有效的途徑,并能在許多應(yīng)用場合獲得較好的效果。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)268.2.1環(huán)境光(AmbientLight)

在實際場景中,一個物體即使不直接暴露于光源之下,還會接收到從周圍物體散射出來的光,這種光是由于周圍各物體被照明后多次反射所產(chǎn)生的。例如從墻壁、地板及天花板等反射回來的光。這種光是一種分布光源,稱為環(huán)境光。環(huán)境光的特點是照射在物體上的光來自周圍各個方向,又均勻地向各個方向反射。由于處理分布光源所需計算量甚大,通常將這種光所產(chǎn)生的效應(yīng)簡化為在各個方向都有均勻的光強度。這樣,每個物體表面都得到同樣大小的光照,且反射光相對于該物體表面亦為常數(shù),即反射光與觀察方向和物體表面的朝向無關(guān)。但不同物體的反射光強度取決于物體的表面特性,如果用Ia表示環(huán)境光的大小,則表面上一點對環(huán)境光的反射強度Ie可表示為

Ie﹦kaIa0≤ka≤1式中ka為由物體表面材料屬性決定的環(huán)境光反射系數(shù)。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)278.2.2漫反射光(DiffuseLight)

我們可以用光源來表示所有發(fā)出輻射能量的物體,如燈泡或太陽。點光源(pointlightsource)是光源的最簡單模型。這種光源模型是對場景中比物體小得多的光源的合適的逼近。離場景足夠遠(yuǎn)的光源,如太陽,也可用點光源模型來較好的模擬。我們在下面反射光的討論中假定使用點光源模型。從物體表面反射出來的光決定于光源中光的成分、光線的方向、光源的幾何性質(zhì)以及物體表面的朝向和表面的材料屬性等。物體表面的反射光又可分為漫反射光和鏡面反射光。漫反射光可以認(rèn)為是光穿過物體表面并被吸收,然后重新發(fā)射出來的光,漫反射光均勻地散布在各個方向,因此同觀察者的位置無關(guān)。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)28

朗伯(lambert)余弦定律總結(jié)了點光源所發(fā)出的光照射在一個完全漫反射體上時光的反射法則。根據(jù)朗伯定律,一個完全漫射體上反射出來的光強度同入射光與物體表面法線之間夾角的余弦成正比。即

Id﹦kdIlcosθ0≤kd≤1,0°≤θ≤90°式中Id為漫反射光強度;Il為從一點光源所發(fā)出的入射光的光強度;kd為決定于物體表面材料屬性的漫反射系數(shù),0≤kd≤1;θ為入射光與表面法向量之間的夾角,如下圖所示。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)29

反射光的光強度是光波長的函數(shù),然而在簡單的光照模型中,通常假定光波長為常數(shù)。若N為物體表面的單位法向量,L為從表面上一點指向點光源的單位矢量,則cosθ=N·L,則(8-3)可以寫成:

Id﹦kdIl(N·L)0≤kd≤1簡單光照模型示例(光線與視線同異向)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)308.2.3鏡面反射光(Specular

Light)

除了漫反射,光源照射物體表面還會產(chǎn)生高光或強光,這種現(xiàn)象稱為鏡面反射。這種高光效果在光滑的物體表面上很明顯,如磨光的金屬表面,而對于陰暗物體表面則效果較差。

鏡面反射光是具有一定方向的反射光。鏡面反射角等于入射角,它們位于表面的單位法向量N的兩側(cè),如圖9所示。用R表示鏡面反射方向的單位矢量,L表示指向點光源的單位矢量,V為指向視點的單位矢量,是V與R之間的夾角。對于一個理想的鏡面反射,入射光僅在鏡面反射方向有反射現(xiàn)象,即僅當(dāng)V與R重合時才能觀察到反射光,而在其它方向都看不到反射光。對于這種光滑的反射面,鏡面的反射光強比漫反射的光強和環(huán)境光的光強高出很多倍。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)31圖92023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)32

對于一般光滑表面,由于表面具有一定粗糙度,其表面實際上是由許多朝向不同的微小表面組成,鏡面反射方向分布在R周圍有限范圍內(nèi)。較光滑表面的鏡面反射范圍較小,而粗糙的物體表面則有較大的鏡面反射范圍。Phong提出一個計算鏡面反射的經(jīng)驗公式,稱為Phong模型。公式用余弦函數(shù)的冪次來模擬鏡面反射光的空間分布,可表示為:

Is﹦ksIlcosnα

0≤ks≤1,0°≤α≤90°式中Is為鏡面反射光強度;Il為入射光的光強度;ks為決定于物體表面材料屬性的鏡面反射系數(shù),它是入射角和入射光波長的函數(shù),很難精確得到,實際應(yīng)用中常以美學(xué)觀點或?qū)嶒灧椒ㄈ∫怀?shù),0≤ks≤1;鏡面反射光強度與cosnα成正比,0°≤α≤90°,因而0≤cosnα≤1。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)33n為鏡面反射光的會聚系數(shù),其值同被觀察物體表面的光滑度有關(guān),會聚性好的光滑表面,如金屬表面,n值較大,而粗糙表面如紙張表面的n值則較小。n值一般取1~2000,圖10表示了n對鏡面反射角度范圍的影響。圖102023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)34

當(dāng)視點取在鏡面反射方向附近時,觀察者接受到鏡面反射光較強,而偏離這一方向觀察時,接受到鏡面反射光就會減弱,故高光隨著觀察者的位置變化而變化。另外,由于鏡面反射光是經(jīng)物體外表面直接反射而產(chǎn)生的,與漫反射光不同,高光具有與入射光同樣性質(zhì),而與物體表面顏色無關(guān)。若R與V已規(guī)格化為單位向量,則式(8-5)可改寫為:

Is﹦ksIl(R·V)n

0≤ks≤1

綜上所述,從視點觀察到物體表面上任一點處的顏色和亮度I應(yīng)為反射光強度Ie、漫反射光強度Id及鏡面反射光強度Is的總和,即

I﹦Ie﹢Id﹢Is將各入上式,則得

I﹦kaIa﹢kdIl(N·L)﹢ksIl(R·V)n

2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)35真實感圖形繪制—光照處理可改變材料鏡面反射光會聚系數(shù)(n):按鍵S-加,s-減OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-圖形學(xué)程序原程序示例-“8-3真實感圖形繪制—光照處理.cpp”2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)36

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

I﹦kaIa﹢Il(kd(N·L)﹢ks(R·V)n)/(d+K)常數(shù)項K為一調(diào)整常數(shù),它的存在可以防止當(dāng)d很小時1/d值太大。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)37

上式就是計算機(jī)圖形學(xué)中通常使用的簡單光照模型,也稱為明暗函數(shù),用它可以計算出物體表面上每一象素處的光強或明暗色調(diào)。上式的計算量是很大的,尤其是鏡面反射方向矢量R的計算。使用矢量L與V間的半角矢量H來計算鏡面反射范圍可得到簡化的Phong模型。只須以N·H替代Phong模型中的點積V·R。這等于用cos計算來替代cosα,如圖11所示。半角矢量可從下式計算得到:

H﹦(L﹢V)/2替換后(8-8)可以寫為:

I﹦kaIa﹢Il(kd(N·L)﹢ks(N·H)n)/(d+K)若觀察點與光源離物體表面足夠遠(yuǎn),則V與L可以看作為常量,則H亦為常量。就是說只要計算一次H的值就可以,但R是隨N變化而改變的,這就是用N·H近似V·R的好處。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)38圖11簡單光照模型示例(泛光、漫光、鏡面光)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)398.2.4多點光源和顏色若存在多個點光源,則物體表面上的反射光強度是各個點光源照射效果的線性相加,這時光照模型為:

I﹦kaIa﹢(kd(N·Li)﹢ks(N·Hi)n)其中,m為點光源的數(shù)目。

大多數(shù)真實感圖形均為彩色圖形,要生成一幅彩色圖形,需要用RGB三基色分量來標(biāo)識光源強度和物體表面顏色,并根據(jù)光照模型來計算反射光中的RGB分量。但由于鏡面反射光的顏色通常取決于入射光的顏色,因此計算RGB分量時ks取相同的常數(shù)值。將式(8-10)改寫成RGB三個分量的形式為:

IR﹦kaRIaR﹢IlR(kdR(N·L)﹢ks(N·H)n)/(d+K)

IG﹦kaGIaG﹢IlG(kdG(N·L)﹢ks(N·H)n/(d+K)

IB﹦kaBIaB﹢IlB(kdB(N·L)﹢ks(N·H)n/(d+K)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)40計算出RGB三個基色分量的強度,用來控制RGB彩色顯示器中相應(yīng)的電子槍,就可以獲得彩色圖形。簡單光照模型示例(旋轉(zhuǎn)球體)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)418.3透明(Transmission)處理前面介紹的光照模型假定所考慮的物體表面是不透明的。但有些物體是透明的,如水、玻璃等。一個透明物體的表面會同時產(chǎn)生反射光和折射光。當(dāng)光線從一種傳播介質(zhì)進(jìn)入另一種傳播介質(zhì)時,例如從空氣進(jìn)入水中時,光線會由于折射而產(chǎn)生彎曲。光線彎曲的程度由Snell定律決定,該定律指出折射光線與入射光線位于同一平面內(nèi),而且入射角與折射角之間存在下列關(guān)系:

η1sinθ=η2sinθ’式中,η1和η2分別為光線在第一種介質(zhì)和第二種介質(zhì)中的折射率,θ為光線入射角,θ’為折射角,圖12為示意圖。實際中,沒有那種材料能夠透過全部入射光,總有一部分被反射出去。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)42圖12入射與折射的關(guān)系2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)43

光有規(guī)則透射和漫透射。透明材料如玻璃等會產(chǎn)生規(guī)則透射,透過透明材料觀察物體仍然是清晰的。如果透射光線是發(fā)散的,那么就會形成漫透射,發(fā)生漫透射的材料呈現(xiàn)朦朧的半透明狀態(tài)。漫透射計算復(fù)雜,大多數(shù)光照模型僅考慮規(guī)則透射。當(dāng)要表示一個透明表面時,光強度計算公式必須進(jìn)行修改,一方面要考慮由于透射的原因,表面反射光強度的減弱,另一方面還要考慮表面背后物體的反射光穿過透明表面,對表面總光強度的增加,如圖13所示。為了加速光強度的計算,簡單的透明算法不考慮折射導(dǎo)致的路徑變化,這樣折射角總是與入射角相同,也不考慮光線在媒體中所經(jīng)路線長度對光強的影響。對透明的可見面,取它與同它相距最近的另一表面光強的線性組合,則總的光強度可表示為:

I=(1-kt)It+ktIc0≤kt≤1其中,Ic為透明可見面的反射光強度,It為透明可見面后第一個可見表面上的光強度。kt為透明可見面的透明度。kt=1對應(yīng)不透明面,光線無透射。kt=0對應(yīng)不可見面,光線全部透射。Ic和It可用前面介紹的光照模型計算。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)44

若It所對應(yīng)表面也是透明面,則上述算法可以遞歸地使用,直到遇到一個不透明面或背景時為止。

透明處理還可以用于顯示復(fù)雜物體或空間的內(nèi)部結(jié)構(gòu)。為每一多邊形表面均設(shè)一透明度,透明度的初始值均取為1,繪制出物體的外形消隱圖。通過有選擇地將某些表面的透明度改為0,即將它們當(dāng)做看不見的面處理,這樣再次繪制畫面時,就會顯示出物體的內(nèi)部結(jié)構(gòu)。圖132023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)45真實感圖形繪制—透明處理可改變藍(lán)色球透明度:按鍵A-增加,a-減小可改變藍(lán)色球位置:按鍵X-右移,x-左移,Y-上移,y-下移OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-圖形學(xué)程序原程序示例-“8-2真實感圖形繪制—透明處理.cpp”2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)468.4.1表面法線的計算

但為了提高計算速度,一般用多邊形平面逼近曲面。對于多邊形平面,可根據(jù)其平面方程的系數(shù),決定平面的法向量,平面內(nèi)所有點的法向量是相同的。而多邊形平面在頂點處的法向量可取包圍該頂點的各多邊形平面法向量的平均值。如圖14中,頂點V處的近似法向量為:

NV﹦(N1﹢N2﹢...﹢Nn)/n其中,n為包圍頂點的平面?zhèn)€數(shù),圖中示例n=4。如圖148.4明暗處理(Shading)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)47簡單光照模型示例(根據(jù)法線消隱)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)48

但多邊形一般是由頂點和棱邊存儲的,在各多邊形平面方程未知的情況下,頂點處的法向量可取交于此頂點的各棱邊叉積的平均值。如圖15中,頂點V處的法向量可由下式計算:

NV﹦VV1VV2﹢VV2VV3﹢VV3VV4﹢VV4VV1上式近似法向量的模依賴于圍繞頂點的各多邊形棱邊數(shù)和長度。多邊形愈大,棱邊愈長,模愈大,實際使用中應(yīng)該單位化。圖152023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)49簡單光照模型示例(根據(jù)頂點坐標(biāo)消隱)2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)50真實感圖形繪制—光照處理可改變光源位置:按鍵X-右移,x-左移,Y-上移,y-下移,Z-距離正加,z距離負(fù)加可改變漫反射系數(shù):按鍵R-R加,r-R減,G-G加,g-G減,B-B加,b-B減可改變材料鏡面反射光會聚系數(shù)(n):按鍵S-加,s-減OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-圖形學(xué)程序原程序示例-“8-3真實感圖形繪制—光照處理.cpp”真實感圖形繪制—日照地球2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)51

當(dāng)觀察畫面上具有相同光強度的區(qū)域時,在其邊界處眼睛所感受到的明亮度常常會不同于實際值。眼睛的這一視覺特性使得光強度為常數(shù)的區(qū)域看上去似乎是光強度發(fā)生了變化,這一現(xiàn)象稱之為馬赫(Mach)帶效應(yīng)。在光強度發(fā)生急劇變化的地方會出現(xiàn)馬赫帶效應(yīng),這時常顯得更亮或更暗。對于多邊形平面,每一點的光強度由相應(yīng)多邊形的法向量決定,則在兩多邊形平面的交界處,光強度會發(fā)生急劇改變,產(chǎn)生馬赫帶效應(yīng)。馬赫帶效應(yīng)影響圖形的真實感,利用下面介紹的兩種明暗處理方法都可不同程度的改善這一現(xiàn)象。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)528.4.2Gouraud光強度插值方法這種由Gouraud提出的光強度插值方法通常被稱為Gouraud明暗處理(GouraudShading)。該方法先計算出各多邊形頂點處的光強度值,然后再采用雙線性插值方法確定多邊形平面上每一點處的光強度值。由于兩相交多邊形平面邊界上的光強度值被同時用于兩平面內(nèi)點的光強度插值計算,這樣就消除了在多邊形平面繪制中存在的光強度不連續(xù)現(xiàn)象。多邊形頂點處的法向量可以計算得到,然后可以根據(jù)光照模型來確定頂點處的光強度值,再使用二次線性插值求出其它點的光強度。具體計算辦法如圖16所示,假設(shè)多邊形三個頂點的光強度值已經(jīng)計算出,分別記為I1,I2,I3。如要計算掃描線上點P的光強度值,先用I1,I2,I3第一次線性插值計算掃描線與三角形交點R和Q點的光強度值:2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)53圖162023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)54

式中x,y為各點投影到屏幕后的坐標(biāo)。上面各次線性插值還可以改成增量的形式,例如改為:0≤t≤1

采用Gouraud明暗處理解決了兩多邊形平面之間光強度的不連續(xù)過渡以及多邊形平面域內(nèi)光強度單一的問題,而且計算速度較之簡單光照模型有明顯的提高。但此方法對漫射效果好,對鏡面反射效果差。主要表現(xiàn)在高光域的形狀不規(guī)整,高光域只能在頂點周圍形成,不能在多邊形域內(nèi)形成。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)558.4.3Phong

法向量插值方法

Phong提出了對法向量而不是光強度進(jìn)行插值的方法。在多邊形平面上各點處按照線性插值計算法向量,然后根據(jù)光照模型計算光強度。該方法通常被稱為Phong明暗處理(PhongShading)。它能夠更真實地表現(xiàn)物體表面鏡面反射效果并大大降低馬赫帶效應(yīng)。這種方法與Gouraud方法一樣,首先計算多邊形每個頂點的法向量,然后應(yīng)用與Gouraud光強度插值計算類似方法求得每個點處的法矢量。如圖17,假設(shè)三個頂點處的法向量已經(jīng)計算出,分別記為N1,N2,N3。如果要計算點P處的法向量NP,先用N1,N2,N3線性插值計算R和Q這兩點處的法向量NR和NQ,然后再利用NR和NQ線性插值計算NP。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)56圖172023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)57

Phong明暗處理對法向量插值的方法,比Gouraud明暗處理中對光強度插值法所得到的結(jié)果精確得多。法向量插值可以生成高光,真實感更強。然而,法向量插值計算量較大,既要計算各項點的法向量,插值計算多邊形平面上各點的法向量,還要用光照模型計算各點的光強度值。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)588.5陰影(shadows)處理

當(dāng)觀察方向與光源方向重合時,觀察者是看不到陰影的。只有當(dāng)兩者方向不一致時,才會看到陰影。陰影使人感到畫面上景物的遠(yuǎn)近深淺,從而極大地增強畫面的真實感。陰影一般分為兩類:自身陰影和投射陰影。物體本身遮擋而使光線照不到某些面稱自身陰影。投射陰影有本影(umbra)和半影(penumbra)之分。我們觀察一個物體影子時,可以看到位于中間全黑的輪廓分明部分就是本影。本影周圍半明半暗的區(qū)域為半影。本影是所有光源的光線照不到的區(qū)域,而半影則為可接收到分布光源部分光線的區(qū)域。如果只有一個點光源或平行光,將只產(chǎn)生本影。如果在有限距離內(nèi)有分布光源,將同時形成本影和半影。為避免大量計算,通常只考慮由點光源形成的本影。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)59圖18自身陰影和投射陰影2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)60

由于陰影是光線照射不到而觀察者卻可見到的區(qū)域,所以在畫面中生成陰影的過程基本上相當(dāng)于二次消隱,一次是對光源消隱,另一次是對視點消隱。生成自身陰影的過程如下:

(1)首先將視點置于光源位置,用相同于消除隱藏面的方法找出光線照不到的面;(2)然后按實際的視點位置和觀察方向,對物體進(jìn)行消隱。

由于投射陰影是由于物體遮擋光線,使場景中位于它后面的物體或區(qū)域受不到光線照射而形成的,投射陰影可從光源投射光線將所有非自隱藏面投影到場景中而得到。投影面與場景中其它平面的交線組成陰影多邊形,這只需先找到物體的輪廓線并將它對場景作投影,而不必將所有非自隱藏面都投影到場景中。

2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)61

假設(shè)光源位置的齊次坐標(biāo)為:

物體投影平面的方程為A=Ax+By+Cz+D=0。記:K=AX+BY+CZ+DW可以推證,物體在平面上的投射陰影轉(zhuǎn)換矩陣為:2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)62

例如,如果陰影投影平面為XZ平面,則投影平面的方程為y=0,此時平面方程Ax+By+Cz+D=0中A=C=D=0,B=1。K=AX+BY+CZ+DW=Y,陰影轉(zhuǎn)換矩陣為:

在得到陰影信息后,就可利用光照模型計算得到有陰影效果的圖形。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)63

另外,陰影決定于光源的位置而與觀察者位置無關(guān)。一旦對所有光源確定出陰影區(qū)域。只要光源位置不變,則對于任意選定的觀察位置,由隱藏面算法所生成的陰影均是正確的。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)64真實感圖形繪制—陰影處理可改變光源位置:按鍵X-右移,x-左移,Y-上移,y-下移,Z-距離正加,z距離負(fù)加OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-圖形學(xué)程序原程序示例-“8-4真實感圖形繪制—陰影處理—改變光源位置.cpp”真實感圖形繪制—陰影處理可改變視點位置:按鍵X-右移,x-左移,Y-上移,y-下移,Z-距離正加,z距離負(fù)加OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-圖形學(xué)程序原程序示例-“8-5真實感圖形繪制—陰影處理—變換視點位置.cpp”2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)658.6紋理(texture)處理現(xiàn)實世界中的物體往往有各種表面細(xì)節(jié),例如木制品表面的木紋,墻面上的裝飾圖案等,在計算機(jī)圖形學(xué)中,物體的表面細(xì)節(jié)稱為紋理。若將計算機(jī)生成的形體表面加上紋理,可以大大增強圖形的真實感。用計算機(jī)生成紋理通??紤]兩種方式,一種是通過在光滑表面上附加花紋或圖案生成表面紋理這一過程可用紋理映射函數(shù)描述實現(xiàn)。另一種是通過在光照模型計算中擾動表面法向量,使表面呈現(xiàn)出凸凹不平的紋理效果,這一過程可用擾動函數(shù)描述實現(xiàn)。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)668.6.1紋理映射在光滑表面上附加花紋或圖案生成表面紋理的一般方法,是在一平面區(qū)域上,也即紋理空間中,預(yù)先定義紋理圖案,然后建立物體表面的點與紋理空間的點之間的對應(yīng)關(guān)系。當(dāng)物體表面的可見點確定之后,以紋理空間對應(yīng)點的值修改物體表面的值,就可以把紋理圖案附加到物體表面上。假定紋理圖案定義在紋理空間正交坐標(biāo)系(s,t)中,而物體表面定義在另一個正交坐標(biāo)系(u,v)中,則在物體表面上描繪紋理圖案需要在兩個空間中定義一個映射函數(shù),即:2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)67

為了簡化計算,一般假定映射函數(shù)為一個線性函數(shù),即:式中各系數(shù)可由兩個坐標(biāo)系中已知點之間的對應(yīng)關(guān)系而求得。紋理圖案定義有連續(xù)法和離算法兩種。連續(xù)法把紋理函數(shù)定義為一個二元函數(shù),函數(shù)的定義域就是紋理空間。離散方法把紋理定義在二維數(shù)組中,這個數(shù)組可以代表一個用于光柵圖形顯示的字符位圖。位圖可以是用程序生成的各種圖形,也可以是用交互式繪圖系統(tǒng)繪制的各種圖案,還可以是用掃描儀輸入的數(shù)字化圖象等。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)68山的紋理512x512BMP圖片2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)69真實感圖形繪制—紋理處理可改變顯示內(nèi)容:按鍵g-顯示網(wǎng)格圖,t-顯示紋理圖可改變圖形位置:按鍵X-右移,x-左移,Y-上移,y-下移,Z-距離正加,z距離負(fù)加可旋轉(zhuǎn)圖形:按鍵R-逆時針旋轉(zhuǎn),r-順時針旋轉(zhuǎn)OpenGL(OpenGraphicsLibrary)編程源程序見:計算機(jī)圖形學(xué)實驗及部分演示示例源程序-“真實感圖形繪制—紋理處理”2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)708.6.2擾動映射雖然紋理映射可獲得精致的表面細(xì)節(jié),但它不合適于模擬象桔子皮皺紋那樣的粗糙物體表面,即凹凸紋理。將凹凸紋理映射到物體表面上,看起來仍象是在表面上畫的凹凸花紋,這是因為紋理圖案的光照細(xì)節(jié)通常與場景中的光照方向不完全一致。生成物體表面凹凸紋理的較好方法是在光照模型計算中通過引入一個擾動函數(shù)來修改表面法向量,稱這個方法為擾動映射。擾動映射在表面每一點沿其表面法向量方向附加一個新的向量,這一向量比較小,不影響原表面的大致形狀,但對其表面該點處的法向量產(chǎn)生較大擾動作用,結(jié)果使曲面變得凹凸不平。通過恰當(dāng)選擇擾動函數(shù),可使生成圖形具有不同的凹凸紋理效果。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)71

若P(u,v)表示一個參數(shù)曲面上的點,該點處的表面法向量為:

N﹦PuPv其中,Pu與Pv為P(u,v)關(guān)于參數(shù)u和v的偏導(dǎo)數(shù)。為了將擾動因子加入到曲面的法向量中去,定義一個擾動函數(shù)F(u,v),將物體表面上點P(u,v),沿該點處的法向量方向位移F(u,v)個單位長,得:

P’(u,v)﹦P(u,v)﹢F(u,v)·n

其中,n=N/|N|是表面單位法向量。新的表面法向量可以通過對兩個偏導(dǎo)數(shù)求叉積來獲得:

N’﹦Pu’Pv’其中

Pu’﹦P’/u=(P+F.n)/u﹦Pu﹢Fu·n﹢F·nu

Pv’﹦P’/v=(P+F.n)/v﹦Pv﹢Fv·n﹢F·nv2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)72

由于F(u,v)的值相對于式中其它量很小,可以忽略不計最后一項,因此上述兩個偏導(dǎo)數(shù)可以近似地表示為:

Pu’﹦Pu﹢Fu·n

Pv’﹦Pv﹢Fv·n所以,被擾動點處的表面法向量為:

N’﹦Pu’Pv’﹦PuPv﹢Fu(nPv)﹢Fv(Pun)﹢FuFv(nn)因為nn﹦0,故:

N’﹦N﹢Fu(nPv)﹢Fv(Pun)其中N﹦PuPv為原法向量,D=

Fu(nPv)﹢Fv(Pun)為擾動向量,擾動向量改變了原曲面法向量。新法向量經(jīng)過單位化,用于光照模型中計算曲面的光強度,產(chǎn)生凹凸紋理。2023/2/1計算機(jī)圖形學(xué)演示稿紀(jì)玉波制作(C)73

擾動函數(shù)同紋理函數(shù)一樣可以用連續(xù)法和離算法兩種形式定義??梢郧髮?dǎo)的任一函數(shù)幾乎都可取作擾動函數(shù)。相對而言,離散法更常用一些,可利用簡單的位圖或交互式圖形系統(tǒng)作出的模擬紋理圖案作為擾動函數(shù)。圖案中較暗的顏色對應(yīng)于較小的F

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論