三維空間中的分形課件_第1頁(yè)
三維空間中的分形課件_第2頁(yè)
三維空間中的分形課件_第3頁(yè)
三維空間中的分形課件_第4頁(yè)
三維空間中的分形課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(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)介

第9章三維空間中的分形9.1OpenGL簡(jiǎn)介

9.2三維空間中的Sierpinski地毯

9.3Sierpinski金字塔

9.4三維空間中Sierpinski海綿

1參考書(shū):《分形算法與程序設(shè)計(jì)》第9章三維空間中的分形9.1OpenGL簡(jiǎn)介9.OpenGL簡(jiǎn)介9.1OpenGL,即開(kāi)放性圖形庫(kù)(OpenGraphicsLibrary),是一個(gè)三維的計(jì)算機(jī)圖形和模型庫(kù)。OpenGL包含120個(gè)圖形函數(shù),在微機(jī)環(huán)境下共有5種函數(shù),即基本(或核心)函數(shù)、實(shí)用函數(shù)、輔助函數(shù)、Windows專用函數(shù)和Win32API函數(shù)。

2參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL簡(jiǎn)介9.1OpenGL,即開(kāi)放性圖形庫(kù)(OpenOpenGL的基本功能1.繪制物體

OpenGL提供了豐富的基本圖元繪制命令,從而可以方便地繪制物體,包括規(guī)則的和不規(guī)則的。3參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能1.繪制物體3參考書(shū):《分形算法與程OpenGL的基本功能2.

變換OpenGL提供了一系列基本的變換,如取景變換、模型變換、投影變換及視口變換。4參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能2.變換4參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能3.

光照處理包括發(fā)射光、環(huán)境光、散射光和鏡面反射光。5參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能3.光照處理5參考書(shū):《分形算法與程OpenGL的基本功能4.

著色OpenGL提供了兩種物體著色模式,一種是RGBA顏色模式,另一種是顏色索引(ColorIndex)模式。

6參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能4.著色6參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能5.

反走樣在OpenGL繪制圖形過(guò)程中,由于使用的是位圖,所以繪制出的圖像的邊緣會(huì)出現(xiàn)鋸齒形狀,稱為走樣。為了消除這種缺陷,OpenGL提供了點(diǎn)、線、多邊形的反走樣技術(shù)。

7參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能5.反走樣7參考書(shū):《分形算法與程序OpenGL的基本功能6.

融合為了使三維圖形更加具有真實(shí)感,經(jīng)常需要處理半透明或透明的物體圖像,這就需要用到融合技術(shù)。

8參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能6.融合8參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能7.

霧化正如自然界中存在煙霧一樣,OpenGL提供了“fog”的基本操作來(lái)達(dá)到對(duì)場(chǎng)景進(jìn)行霧化的效果。

9參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能7.霧化9參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能8.

位圖和圖像在圖形繪制過(guò)程中,位圖和圖像是非常重要的一個(gè)方面。OpenGL提供了系列函數(shù)來(lái)實(shí)現(xiàn)位圖和圖像的操作。

10參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能8.位圖和圖像10參考書(shū):《分形算法OpenGL的基本功能9.

紋理映射在計(jì)算機(jī)圖形學(xué)中,把包含顏色、alpha值、亮度等數(shù)據(jù)的矩形數(shù)組稱為紋理。而紋理映射可以理解為將紋理粘貼在所繪制的三維模型表面,以使三維圖形顯得更生動(dòng)。

11參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能9.紋理映射11參考書(shū):《分形算法與OpenGL的運(yùn)行環(huán)境10.動(dòng)畫出色的動(dòng)畫效果是OpenGL的一大特色,OpenGL提供了雙緩存區(qū)技術(shù)來(lái)實(shí)現(xiàn)動(dòng)畫繪制。

12參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的運(yùn)行環(huán)境10.動(dòng)畫12參考書(shū):《分形算法與程序OpenGL的基本函數(shù)1.頂點(diǎn)坐標(biāo)

OpenGL采用有序排列的頂點(diǎn)集合來(lái)構(gòu)造幾何圖元,而不是將線段、多邊形組合起來(lái)構(gòu)造幾何圖元。如:glVertex2s(2,5);//整數(shù)定義的二維坐標(biāo)

glVertex3f(2,5,7);

//浮點(diǎn)定義的三維坐標(biāo)

13參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)1.頂點(diǎn)坐標(biāo)13參考書(shū):《分形算法與OpenGL的基本函數(shù)2.頂點(diǎn)關(guān)系

在OpenGL中,同一個(gè)幾何圖元的所有被定義的頂點(diǎn)一起放在glBegin()和glEnd()函數(shù)之間,同時(shí)定義這些頂點(diǎn)之間的關(guān)系。如:

glBegin(GL_POLYGON);glVertex2s(0,0);glVertex2s(0,11);glVertex2s(11,14);glVertex2s(14,7);glVertex2s(7,0);glEnd();

14參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)2.頂點(diǎn)關(guān)系14參考書(shū):《分形算法與OpenGL的基本函數(shù)3.顯示列表

OpenGL顯示列表(DispplayList)是由一組預(yù)先存儲(chǔ)起來(lái)的留待以后調(diào)用的OpenGL函數(shù)語(yǔ)句組成的,當(dāng)調(diào)用這張顯示列表時(shí)就一次執(zhí)行表中所列出的函數(shù)語(yǔ)句。

創(chuàng)建顯示列表OpenGL用下面的函數(shù)組創(chuàng)建顯示列表:voidglNewList(GLuintlist,GLenummode);……voidglEndList(void);

執(zhí)行顯示列表

顯示列表的執(zhí)行函數(shù)形式如下:voidglCallList(GLuintlist);

參數(shù)list指定被執(zhí)行的顯示列表。15參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)3.顯示列表15參考書(shū):《分形算法與OpenGL的基本函數(shù)4.顏色設(shè)置

⑴RGBA模式下的顏色定義在RGBA模式下,利用glColor*命令來(lái)定義當(dāng)前顏色。glColor*命令有如下幾種形式:voidglColor3{bsifdubusui}(TYPEr,TYPEg,TYPEb);voidglColor4{bsifdubusui}(TYPEr,TYPEg,TYPEb,TYPEa);voidglColor3{bsifdubusui}v(TYPE*v);voidglColor4{bsifdubusui}v(TYPE*v);

⑵在顏色索引模式下的顏色定義

通過(guò)調(diào)用函數(shù)glIndex*()從顏色索引表中選取當(dāng)前顏色。

voidglIndex(sfdi)(c:TYPE);voidglIndex(sfdi)v(c:PTYPE);

16參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)4.顏色設(shè)置16參考書(shū):《分形算法與OpenGL的基本函數(shù)5.光照設(shè)置

⑴創(chuàng)建光源(LightSource)光源有許多特性,如顏色、位置、方向等??梢允褂孟旅娴暮瘮?shù)定義光源:voidglLight{if}[v](GLenumlight,GLenumpname,TYPEparam)⑵啟動(dòng)光照在OpenGL中,必須明確指出光照是否有效或無(wú)效。如果光照無(wú)效,則只是簡(jiǎn)單地將當(dāng)前顏色映射到當(dāng)前頂點(diǎn)上去,不進(jìn)行法向、光源、材質(zhì)等復(fù)雜計(jì)算,那么顯示的圖形就沒(méi)有真實(shí)感。啟動(dòng)和取消光源的函數(shù)如下:glEnable(GL_LIGHTING);//啟動(dòng)光照gDisable(GL_LIGHTING);//取消光照17參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)5.光照設(shè)置17參考書(shū):《分形算法與OpenGL的基本函數(shù)6.明暗處理

在OpenGL中,用單一顏色處理的稱為平面明暗處理(FlatShading),用許多不同顏色處理的稱為光滑明暗處理(SmoothShading)。設(shè)置明暗處理模式的函數(shù)為:

voidglShadeModel(GLenummode);18參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)6.明暗處理18參考書(shū):《分形算法與OpenGL的基本函數(shù)7.材質(zhì)設(shè)置

⑴材質(zhì)定義材質(zhì)的定義與光源的定義類似。其函數(shù)為:voidglMaterial{if}[v](GLenumface,GLenumpname,TYPEparam);⑵改變材質(zhì)在OpenGL中提供了兩種方式來(lái)改變場(chǎng)景中的材質(zhì)。第一種方法是利用函數(shù)glMaterial*()來(lái)改變材質(zhì),但是調(diào)用函數(shù)glMaterial*()需要同時(shí)保存當(dāng)前矩陣,也就是調(diào)用函數(shù)glPushMatrix()和glPopMatrix()。第二種方法是使用函數(shù)glColorMaterial(),其形式為:voidglColorMaterial(GLenumface,GLenummode);

19參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)7.材質(zhì)設(shè)置19參考書(shū):《分形算法與OpenGL的基本函數(shù)8.紋理映射

⑴紋理定義在程序中可以用以下函數(shù)定義二維紋理映射:voidglTexImage2D(GLenumtarget,GLintlevel,GLintcomponents,GLsizeiwidth,Glsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);⑵紋理控制OpenGL中控制紋理的函數(shù)是:voidglTexParameter{if}[v](GLenumtarget,GLenumpname,TYPEparam);⑶

定義紋理坐標(biāo)OpenGL坐標(biāo)定義的函數(shù)是:voidgltexCoord{1234}{sifd}[v](TYPEcoords);20參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)8.紋理映射20參考書(shū):《分形算法與OpenGL的基本函數(shù)9.選擇與反饋

在OpenGL中,提供了選擇和反饋兩種方式,以實(shí)現(xiàn)對(duì)屏幕上的某個(gè)物體的信息提供,達(dá)到交互的目的。

進(jìn)行模式選擇的函數(shù)原型如下:LintglRenderMode(GLenumMode);在進(jìn)入選擇模式之前,必須調(diào)用函數(shù)glSelectBuffer()來(lái)制定選擇數(shù)組。在進(jìn)入反饋模式之前,必須調(diào)用函數(shù)glFeedbackBuffer()來(lái)制定反饋數(shù)組。21參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)9.選擇與反饋21參考書(shū):《分形算法OpenGL的基本函數(shù)10.幀緩存與動(dòng)畫

⑴幀緩存的組成OpenGL幀緩存由以下四種緩存組成:顏色緩存(ColorBuffer)、深度緩存(DepthBuffer)、模板緩存(StencilBuffer)、累積緩存(AccumulationBuffer)。⑵緩存清除OpenGL清除緩存操作過(guò)程是:先給出要寫入每個(gè)緩存的清除值,然后用單個(gè)函數(shù)命令執(zhí)行操作,傳入所有要清除的緩存表。⑶動(dòng)畫OpenGL提供了雙緩存,可以用來(lái)制作動(dòng)畫。也就是說(shuō),在顯示前臺(tái)緩存內(nèi)容中的一幀畫面時(shí),后臺(tái)緩存正在繪制下一幀畫面,當(dāng)繪制完畢,則后臺(tái)緩存內(nèi)容便在屏幕上顯示出來(lái),而前臺(tái)正好相反,又在繪制下一幀畫面內(nèi)容。這樣循環(huán)反復(fù),屏幕上顯示的總是已經(jīng)畫好的圖形,于是看起來(lái)所有的畫面都是連續(xù)的。

22參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)10.幀緩存與動(dòng)畫22參考書(shū):《分形9.2三維空間中的Sierpinski地毯算法:3D_Sierpinski標(biāo)題:三維空間中的Sierpinski地毯變量:端點(diǎn)坐標(biāo)a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)a1(),a2(),b1(),b2()c1(),c2(),d1(),d2()a_(),b_()c_(),d_()

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))23參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯算法:3D_Si9.2三維空間中的Sierpinski地毯point3done_third(point3d&p2){returnpoint3d((p2.x-x)/3+x,(p2.y-y)/3+y,(p2.z-z)/3+z);}

//算出所有點(diǎn)的坐標(biāo)

point3da1=a.one_third(b),a2=b.one_third(a);point3db1=b.one_third(c),b2=c.one_third(b);point3dc1=c.one_third(d),c2=d.one_third(c);point3dd1=d.one_third(a),d2=a.one_third(d);Point3d_a=a1.one_third(c2),_b=a2.one_third(c1);point3d_c=b2.one_third(d1),_d=d1.one_third(b2);24參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯point3d9.2三維空間中的Sierpinski地毯//遞歸繪制8個(gè)小塊Menger(a,a1,_a,d2);Menger(a1,a2,_b,_a);Menger(a2,b,b1,_b);Menger(_b,b1,b2,_c);Menger(_c,b2,c,c1);Menger(_d,_c,c1,c2);Menger(d1,_d,c2,d);Menger(d2,_a,_d,d1);

25參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯25參考書(shū):《分9.3Sierpinski金字塔算法:Sierpinski_pyramid標(biāo)題:Sierpinski金字塔變量:端點(diǎn)坐標(biāo)a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))26參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔算法:Sierpinski9.3Sierpinski金字塔point3dmiddle(point3d&p2){returnpoint3d((x+p2.x)/2,(y+p2.y)/2,(z+p2.z)/2);}glBegin(GL_TRIANGLES);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glVertex3f(d.x,d.y,d.z);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(d.x,d.y,d.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glEnd();27參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔point3dmiddl9.3Sierpinski金字塔//遞歸繪制四個(gè)錐體seripinski(a.middle(b),b,b.middle(c),b.middle(d));seripinski(a,a.middle(b),a.middle(c),a.middle(d));seripinski(a.middle(c),b.middle(c),c,c.middle(d));seripinski(a.middle(d),b.middle(d),c.middle(d),d);28參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔28參考書(shū):《分形算法與程9.4Sierpinski海綿算法:Sierpinski_sponge標(biāo)題:Sierpinski海綿變量:端點(diǎn)坐標(biāo)

x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))29參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿算法:Sierpinski_s9.4Sierpinski海綿voidCRenderDlg::lft(doublex,doubley,doublez,doublel){doublex1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;

x1=x-l/2;y1=y-l/2;z1=z-l/2;

30參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿voidCRenderDlg9.4Sierpinski海綿x2=x+l/2;y2=y-l/2;z2=z-l/2;

x3=x-l/2;y3=y-l/2;z3=z+l/2;

x4=x+l/2;y4=y-l/2;z4=z+l/2;

x5=x-l/2;y5=y+l/2;z5=z+l/2;31參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿31參考書(shū):《分形算法與程序設(shè)9.4Sierpinski海綿

x6=x+l/2;y6=y+l/2;z6=z+l/2;

x7=x-l/2;y7=y+l/2;z7=z-l/2;

x8=x+l/2;y8=y+l/2;z8=z-l/2;32參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿

32參考書(shū):《分形算法與程序9.4Sierpinski海綿voidCRenderDlg::Drawscene(doublex,doubley,doublez,doublel,doublen){if(n<1){//畫一級(jí)Sierpinski海綿l:=l/3;lft(x-l,y+l,z-l,l);//后左上lft(x,y+l,z-l,l);//后中上lft(x+l,y+l,z-l,l);//后右上lft(x-l,y,z-l,l);//后左中l(wèi)ft(x+l,y,z-l,l);//后右中l(wèi)ft(x-l,y-l,z-l,l);//后左下lft(x,y-l,z-l,l);//后中下lft(x+l,y-l,z-l,l);//后右下

33參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿voidCRenderDlg9.4Sierpinski海綿lft(x-l,y+l,z,l);//中左上lft(x+l,y+l,z,l);//中右上lft(x-l,y-l,z,l);//中左下lft(x+l,y-l,z,l);//中右下

lft(x-l,y+l,z+l,l);//前左上lft(x,y+l,z+l,l);//前中上lft(x+l,y+l,z+l,l);//前右上lft(x-l,y,z+l,l);//前左中l(wèi)ft(x+l,y,z+l,l);//前右中l(wèi)ft(x-l,y-l,z+l,l);//前左下lft(x,y-l,z+l,l);//前中下lft(x+l,y-l,z+l,l);//前右下34參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿lft(x-l,y+l9.4Sierpinski海綿else//遞歸調(diào)用畫下一級(jí)Sierpinski海綿glClear(GL_COLOR_BUFFER_BITorGL_DEPTH_BUFFER_BIT);l:=l/3;Drawscene(x-l,y+l,z-l,l,n-1);//后左上Drawscene(x,y+l,z-l,l,n-1);//后中上Drawscene(x+l,y+l,z-l,l,n-1);//后右上Drawscene(x-l,y,z-l,l,n-1);//后左中Drawscene(x+l,y,z-l,l,n-1);//后右中Drawscene(x-l,y-l,z-l,l,n-1);//后左下Drawscene(x,y-l,z-l,l,n-1);//后中下Drawscene(x+l,y-l,z-l,l,n-1);//后右下35參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿else35參考書(shū):《分形9.4Sierpinski海綿Drawscene(x-l,y+l,z,l,n-1);//中左上Drawscene(x+l,y+l,z,l,n-1);//中右上Drawscene(x-l,y-l,z,l,n-1);//中左下Drawscene(x+l,y-l,z,l,n-1);//中右下

Drawscene(x-l,y+l,z+l,l,n-1);//前左上Drawscene(x,y+l,z+l,l,n-1);//前中上Drawscene(x+l,y+l,z+l,l,n-1);//前右上Drawscene(x-l,y,z+l,l,n-1);//前左中Drawscene(x+l,y,z+l,l,n-1);//前右中Drawscene(x-l,y-l,z+l,l,n-1);//前左下Drawscene(x,y-l,z+l,l,n-1);//前中下Drawscene(x+l,y-l,z+l,l,n-1);//前右下}36參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿Drawscene(x第9章三維空間中的分形9.1OpenGL簡(jiǎn)介

9.2三維空間中的Sierpinski地毯

9.3Sierpinski金字塔

9.4三維空間中Sierpinski海綿

37參考書(shū):《分形算法與程序設(shè)計(jì)》第9章三維空間中的分形9.1OpenGL簡(jiǎn)介9.OpenGL簡(jiǎn)介9.1OpenGL,即開(kāi)放性圖形庫(kù)(OpenGraphicsLibrary),是一個(gè)三維的計(jì)算機(jī)圖形和模型庫(kù)。OpenGL包含120個(gè)圖形函數(shù),在微機(jī)環(huán)境下共有5種函數(shù),即基本(或核心)函數(shù)、實(shí)用函數(shù)、輔助函數(shù)、Windows專用函數(shù)和Win32API函數(shù)。

38參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL簡(jiǎn)介9.1OpenGL,即開(kāi)放性圖形庫(kù)(OpenOpenGL的基本功能1.繪制物體

OpenGL提供了豐富的基本圖元繪制命令,從而可以方便地繪制物體,包括規(guī)則的和不規(guī)則的。39參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能1.繪制物體3參考書(shū):《分形算法與程OpenGL的基本功能2.

變換OpenGL提供了一系列基本的變換,如取景變換、模型變換、投影變換及視口變換。40參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能2.變換4參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能3.

光照處理包括發(fā)射光、環(huán)境光、散射光和鏡面反射光。41參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能3.光照處理5參考書(shū):《分形算法與程OpenGL的基本功能4.

著色OpenGL提供了兩種物體著色模式,一種是RGBA顏色模式,另一種是顏色索引(ColorIndex)模式。

42參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能4.著色6參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能5.

反走樣在OpenGL繪制圖形過(guò)程中,由于使用的是位圖,所以繪制出的圖像的邊緣會(huì)出現(xiàn)鋸齒形狀,稱為走樣。為了消除這種缺陷,OpenGL提供了點(diǎn)、線、多邊形的反走樣技術(shù)。

43參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能5.反走樣7參考書(shū):《分形算法與程序OpenGL的基本功能6.

融合為了使三維圖形更加具有真實(shí)感,經(jīng)常需要處理半透明或透明的物體圖像,這就需要用到融合技術(shù)。

44參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能6.融合8參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能7.

霧化正如自然界中存在煙霧一樣,OpenGL提供了“fog”的基本操作來(lái)達(dá)到對(duì)場(chǎng)景進(jìn)行霧化的效果。

45參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能7.霧化9參考書(shū):《分形算法與程序設(shè)OpenGL的基本功能8.

位圖和圖像在圖形繪制過(guò)程中,位圖和圖像是非常重要的一個(gè)方面。OpenGL提供了系列函數(shù)來(lái)實(shí)現(xiàn)位圖和圖像的操作。

46參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能8.位圖和圖像10參考書(shū):《分形算法OpenGL的基本功能9.

紋理映射在計(jì)算機(jī)圖形學(xué)中,把包含顏色、alpha值、亮度等數(shù)據(jù)的矩形數(shù)組稱為紋理。而紋理映射可以理解為將紋理粘貼在所繪制的三維模型表面,以使三維圖形顯得更生動(dòng)。

47參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本功能9.紋理映射11參考書(shū):《分形算法與OpenGL的運(yùn)行環(huán)境10.動(dòng)畫出色的動(dòng)畫效果是OpenGL的一大特色,OpenGL提供了雙緩存區(qū)技術(shù)來(lái)實(shí)現(xiàn)動(dòng)畫繪制。

48參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的運(yùn)行環(huán)境10.動(dòng)畫12參考書(shū):《分形算法與程序OpenGL的基本函數(shù)1.頂點(diǎn)坐標(biāo)

OpenGL采用有序排列的頂點(diǎn)集合來(lái)構(gòu)造幾何圖元,而不是將線段、多邊形組合起來(lái)構(gòu)造幾何圖元。如:glVertex2s(2,5);//整數(shù)定義的二維坐標(biāo)

glVertex3f(2,5,7);

//浮點(diǎn)定義的三維坐標(biāo)

49參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)1.頂點(diǎn)坐標(biāo)13參考書(shū):《分形算法與OpenGL的基本函數(shù)2.頂點(diǎn)關(guān)系

在OpenGL中,同一個(gè)幾何圖元的所有被定義的頂點(diǎn)一起放在glBegin()和glEnd()函數(shù)之間,同時(shí)定義這些頂點(diǎn)之間的關(guān)系。如:

glBegin(GL_POLYGON);glVertex2s(0,0);glVertex2s(0,11);glVertex2s(11,14);glVertex2s(14,7);glVertex2s(7,0);glEnd();

50參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)2.頂點(diǎn)關(guān)系14參考書(shū):《分形算法與OpenGL的基本函數(shù)3.顯示列表

OpenGL顯示列表(DispplayList)是由一組預(yù)先存儲(chǔ)起來(lái)的留待以后調(diào)用的OpenGL函數(shù)語(yǔ)句組成的,當(dāng)調(diào)用這張顯示列表時(shí)就一次執(zhí)行表中所列出的函數(shù)語(yǔ)句。

創(chuàng)建顯示列表OpenGL用下面的函數(shù)組創(chuàng)建顯示列表:voidglNewList(GLuintlist,GLenummode);……voidglEndList(void);

執(zhí)行顯示列表

顯示列表的執(zhí)行函數(shù)形式如下:voidglCallList(GLuintlist);

參數(shù)list指定被執(zhí)行的顯示列表。51參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)3.顯示列表15參考書(shū):《分形算法與OpenGL的基本函數(shù)4.顏色設(shè)置

⑴RGBA模式下的顏色定義在RGBA模式下,利用glColor*命令來(lái)定義當(dāng)前顏色。glColor*命令有如下幾種形式:voidglColor3{bsifdubusui}(TYPEr,TYPEg,TYPEb);voidglColor4{bsifdubusui}(TYPEr,TYPEg,TYPEb,TYPEa);voidglColor3{bsifdubusui}v(TYPE*v);voidglColor4{bsifdubusui}v(TYPE*v);

⑵在顏色索引模式下的顏色定義

通過(guò)調(diào)用函數(shù)glIndex*()從顏色索引表中選取當(dāng)前顏色。

voidglIndex(sfdi)(c:TYPE);voidglIndex(sfdi)v(c:PTYPE);

52參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)4.顏色設(shè)置16參考書(shū):《分形算法與OpenGL的基本函數(shù)5.光照設(shè)置

⑴創(chuàng)建光源(LightSource)光源有許多特性,如顏色、位置、方向等??梢允褂孟旅娴暮瘮?shù)定義光源:voidglLight{if}[v](GLenumlight,GLenumpname,TYPEparam)⑵啟動(dòng)光照在OpenGL中,必須明確指出光照是否有效或無(wú)效。如果光照無(wú)效,則只是簡(jiǎn)單地將當(dāng)前顏色映射到當(dāng)前頂點(diǎn)上去,不進(jìn)行法向、光源、材質(zhì)等復(fù)雜計(jì)算,那么顯示的圖形就沒(méi)有真實(shí)感。啟動(dòng)和取消光源的函數(shù)如下:glEnable(GL_LIGHTING);//啟動(dòng)光照gDisable(GL_LIGHTING);//取消光照53參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)5.光照設(shè)置17參考書(shū):《分形算法與OpenGL的基本函數(shù)6.明暗處理

在OpenGL中,用單一顏色處理的稱為平面明暗處理(FlatShading),用許多不同顏色處理的稱為光滑明暗處理(SmoothShading)。設(shè)置明暗處理模式的函數(shù)為:

voidglShadeModel(GLenummode);54參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)6.明暗處理18參考書(shū):《分形算法與OpenGL的基本函數(shù)7.材質(zhì)設(shè)置

⑴材質(zhì)定義材質(zhì)的定義與光源的定義類似。其函數(shù)為:voidglMaterial{if}[v](GLenumface,GLenumpname,TYPEparam);⑵改變材質(zhì)在OpenGL中提供了兩種方式來(lái)改變場(chǎng)景中的材質(zhì)。第一種方法是利用函數(shù)glMaterial*()來(lái)改變材質(zhì),但是調(diào)用函數(shù)glMaterial*()需要同時(shí)保存當(dāng)前矩陣,也就是調(diào)用函數(shù)glPushMatrix()和glPopMatrix()。第二種方法是使用函數(shù)glColorMaterial(),其形式為:voidglColorMaterial(GLenumface,GLenummode);

55參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)7.材質(zhì)設(shè)置19參考書(shū):《分形算法與OpenGL的基本函數(shù)8.紋理映射

⑴紋理定義在程序中可以用以下函數(shù)定義二維紋理映射:voidglTexImage2D(GLenumtarget,GLintlevel,GLintcomponents,GLsizeiwidth,Glsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);⑵紋理控制OpenGL中控制紋理的函數(shù)是:voidglTexParameter{if}[v](GLenumtarget,GLenumpname,TYPEparam);⑶

定義紋理坐標(biāo)OpenGL坐標(biāo)定義的函數(shù)是:voidgltexCoord{1234}{sifd}[v](TYPEcoords);56參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)8.紋理映射20參考書(shū):《分形算法與OpenGL的基本函數(shù)9.選擇與反饋

在OpenGL中,提供了選擇和反饋兩種方式,以實(shí)現(xiàn)對(duì)屏幕上的某個(gè)物體的信息提供,達(dá)到交互的目的。

進(jìn)行模式選擇的函數(shù)原型如下:LintglRenderMode(GLenumMode);在進(jìn)入選擇模式之前,必須調(diào)用函數(shù)glSelectBuffer()來(lái)制定選擇數(shù)組。在進(jìn)入反饋模式之前,必須調(diào)用函數(shù)glFeedbackBuffer()來(lái)制定反饋數(shù)組。57參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)9.選擇與反饋21參考書(shū):《分形算法OpenGL的基本函數(shù)10.幀緩存與動(dòng)畫

⑴幀緩存的組成OpenGL幀緩存由以下四種緩存組成:顏色緩存(ColorBuffer)、深度緩存(DepthBuffer)、模板緩存(StencilBuffer)、累積緩存(AccumulationBuffer)。⑵緩存清除OpenGL清除緩存操作過(guò)程是:先給出要寫入每個(gè)緩存的清除值,然后用單個(gè)函數(shù)命令執(zhí)行操作,傳入所有要清除的緩存表。⑶動(dòng)畫OpenGL提供了雙緩存,可以用來(lái)制作動(dòng)畫。也就是說(shuō),在顯示前臺(tái)緩存內(nèi)容中的一幀畫面時(shí),后臺(tái)緩存正在繪制下一幀畫面,當(dāng)繪制完畢,則后臺(tái)緩存內(nèi)容便在屏幕上顯示出來(lái),而前臺(tái)正好相反,又在繪制下一幀畫面內(nèi)容。這樣循環(huán)反復(fù),屏幕上顯示的總是已經(jīng)畫好的圖形,于是看起來(lái)所有的畫面都是連續(xù)的。

58參考書(shū):《分形算法與程序設(shè)計(jì)》OpenGL的基本函數(shù)10.幀緩存與動(dòng)畫22參考書(shū):《分形9.2三維空間中的Sierpinski地毯算法:3D_Sierpinski標(biāo)題:三維空間中的Sierpinski地毯變量:端點(diǎn)坐標(biāo)a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)a1(),a2(),b1(),b2()c1(),c2(),d1(),d2()a_(),b_()c_(),d_()

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))59參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯算法:3D_Si9.2三維空間中的Sierpinski地毯point3done_third(point3d&p2){returnpoint3d((p2.x-x)/3+x,(p2.y-y)/3+y,(p2.z-z)/3+z);}

//算出所有點(diǎn)的坐標(biāo)

point3da1=a.one_third(b),a2=b.one_third(a);point3db1=b.one_third(c),b2=c.one_third(b);point3dc1=c.one_third(d),c2=d.one_third(c);point3dd1=d.one_third(a),d2=a.one_third(d);Point3d_a=a1.one_third(c2),_b=a2.one_third(c1);point3d_c=b2.one_third(d1),_d=d1.one_third(b2);60參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯point3d9.2三維空間中的Sierpinski地毯//遞歸繪制8個(gè)小塊Menger(a,a1,_a,d2);Menger(a1,a2,_b,_a);Menger(a2,b,b1,_b);Menger(_b,b1,b2,_c);Menger(_c,b2,c,c1);Menger(_d,_c,c1,c2);Menger(d1,_d,c2,d);Menger(d2,_a,_d,d1);

61參考書(shū):《分形算法與程序設(shè)計(jì)》9.2三維空間中的Sierpinski地毯25參考書(shū):《分9.3Sierpinski金字塔算法:Sierpinski_pyramid標(biāo)題:Sierpinski金字塔變量:端點(diǎn)坐標(biāo)a(x1,y1,z1),b(x2,y2,z2)c(x3,y3,z3),d(x4,y4,z4)

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))62參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔算法:Sierpinski9.3Sierpinski金字塔point3dmiddle(point3d&p2){returnpoint3d((x+p2.x)/2,(y+p2.y)/2,(z+p2.z)/2);}glBegin(GL_TRIANGLES);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glVertex3f(d.x,d.y,d.z);glVertex3f(a.x,a.y,a.z);glVertex3f(b.x,b.y,b.z);glVertex3f(d.x,d.y,d.z);glVertex3f(b.x,b.y,b.z);glVertex3f(c.x,c.y,c.z);glEnd();63參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔point3dmiddl9.3Sierpinski金字塔//遞歸繪制四個(gè)錐體seripinski(a.middle(b),b,b.middle(c),b.middle(d));seripinski(a,a.middle(b),a.middle(c),a.middle(d));seripinski(a.middle(c),b.middle(c),c,c.middle(d));seripinski(a.middle(d),b.middle(d),c.middle(d),d);64參考書(shū):《分形算法與程序設(shè)計(jì)》9.3Sierpinski金字塔28參考書(shū):《分形算法與程9.4Sierpinski海綿算法:Sierpinski_sponge標(biāo)題:Sierpinski海綿變量:端點(diǎn)坐標(biāo)

x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;

函數(shù):glVertex2s(x,y)(頂點(diǎn)坐標(biāo)函數(shù))

glVertex2s(x,y,z)(頂點(diǎn)坐標(biāo)函數(shù))65參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿算法:Sierpinski_s9.4Sierpinski海綿voidCRenderDlg::lft(doublex,doubley,doublez,doublel){doublex1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8;

x1=x-l/2;y1=y-l/2;z1=z-l/2;

66參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿voidCRenderDlg9.4Sierpinski海綿x2=x+l/2;y2=y-l/2;z2=z-l/2;

x3=x-l/2;y3=y-l/2;z3=z+l/2;

x4=x+l/2;y4=y-l/2;z4=z+l/2;

x5=x-l/2;y5=y+l/2;z5=z+l/2;67參考書(shū):《分形算法與程序設(shè)計(jì)》9.4Sierpinski海綿31參考書(shū):《分形算法與程序設(shè)9.4Sierpinski海綿

x6=x+l/2;y6=y+l/2;z6=z+l/2;

x7=x-l/2;y7=y+l/2;z7=z-l/2;

x8=x+l/2;y8=y+l/2;

溫馨提示

  • 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)論