MFC的OpenGL紋理貼圖技術(shù)研_第1頁(yè)
MFC的OpenGL紋理貼圖技術(shù)研_第2頁(yè)
MFC的OpenGL紋理貼圖技術(shù)研_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

MFC的OpenGL紋理貼圖技術(shù)研

摘要:OpenGL是一個(gè)開(kāi)放的三維圖形軟件包,而VisualC++是目前主要的OpenGL開(kāi)發(fā)工具。本文簡(jiǎn)要介紹了OpenGL的紋理貼圖技術(shù)及其在MFC中的基本操作步驟。并通過(guò)最后的實(shí)例驗(yàn)證了紋理貼圖技術(shù)在繪制真實(shí)感圖形中的必要性。關(guān)鍵詞:OpenGL;MFC;紋理貼圖;計(jì)算機(jī)圖形學(xué)現(xiàn)實(shí)世界中的物體表面往往有各種紋理,因此要繪制逼真的三維物體,除了對(duì)物體進(jìn)行光照處理外,還需要加上紋理貼圖,使物體看起來(lái)更真實(shí)。OpenGL是SGI公司的一個(gè)開(kāi)放的三維計(jì)算機(jī)圖形軟件接口,為用戶(hù)提供豐富的圖形庫(kù),能快速渲染出高質(zhì)量的三維彩色圖像。OpenGL編程的重點(diǎn)是圖形的生成和如何產(chǎn)生各種真實(shí)效果,但是編寫(xiě)一個(gè)優(yōu)秀的Windows程序,還必須用到用戶(hù)界面接口。VC++的MFC模式可以較為完美地實(shí)現(xiàn)對(duì)OpenGL生成的效果圖的動(dòng)態(tài)交互操作。紋理貼圖技術(shù)簡(jiǎn)介紋理貼圖技術(shù)也叫紋理映射技術(shù),它是計(jì)算機(jī)圖形學(xué)中廣泛應(yīng)用的一項(xiàng)重要技術(shù)。傳統(tǒng)的幾何造型只能表示景物的形狀,無(wú)法描述景物表面的微觀(guān)細(xì)節(jié),而利用紋理圖像來(lái)描述景物表面各點(diǎn)處的反射屬性,可以達(dá)到模擬景物表面豐富的紋理細(xì)節(jié)的目的,提高計(jì)算機(jī)生成圖形的真實(shí)性。另一方面,采用紋理映射的方法可以大大地簡(jiǎn)化建模的過(guò)程。比如,同是一棟大樓表面,若完全用建模的方法來(lái)構(gòu)造,則需要畫(huà)出大樓的每一扇門(mén)、每一扇窗戶(hù);若采用紋理映射,只需建立簡(jiǎn)單的長(zhǎng)方體模型,用拍下的大樓外觀(guān)圖片貼至模型表面即可。相比之下,工作量要小得多。OpenGL紋理貼圖紋理映射是將指定圖像的一部分映射到允許進(jìn)行紋理映射的每個(gè)圖段上。這種映射伴隨著使用一幅圖像的顏色到某一圖段的(s,t,r)坐標(biāo)所指示的位置上并修改該圖段的RGBA顏色。但要特別注意的是,在OpenGL中,紋理映射僅在RGBA模式下說(shuō)明,在顏色索引模式下,它的使用未作定義。概括地說(shuō),使用紋理繪制的一般步驟為:定義紋理貼圖、控制紋理、說(shuō)明紋理貼圖方式,定義紋理坐標(biāo)等。2.1定義紋理紋理的定義有兩種:連續(xù)法和離散法。連續(xù)法把紋理定義為一個(gè)二元函數(shù),函數(shù)的定義域就是紋理空間。而離散法則是把紋理定義在一個(gè)二維數(shù)組中,該數(shù)組表示紋理空間中行間隔和列間隔固定的一組網(wǎng)格點(diǎn)上的紋理值。網(wǎng)格點(diǎn)之間的其它點(diǎn)的紋理值可以通過(guò)對(duì)相鄰網(wǎng)格點(diǎn)上紋理值進(jìn)行插值來(lái)獲得。通過(guò)紋理空間與物體空間之間的坐標(biāo)變換,可以把紋理映射到物體表面。一般來(lái)說(shuō),離散法是較為常用的紋理定義方法。其實(shí)現(xiàn)函數(shù)為glTexlmage2D()。該函數(shù)的原型如下:voidglTexImage2D(Gl_enumtarget,GLintlevel,Gl_enumcompo—nents,GLsizeiwidth,GLsizeiheight,Glintborder,Gl_enumformat。Gl_enumtype,constGLvoidpixels);其中:target指定紋理映射,此處必須是GL—TEXT—URE2D;level指定紋理圖像分辨率的級(jí)數(shù),當(dāng)只有一種分辨率時(shí),level=0;Components是選擇用于調(diào)整和混合的成分;width和height分別指定紋理圖像的寬和高,必須是2,凡為正數(shù);Border為邊界的寬度,必須是0和1;format和type分別指定紋理映射的格式和數(shù)據(jù)類(lèi)型;Pixels指定一個(gè)指針,指向紋理數(shù)據(jù)在內(nèi)存中的位置。2.2控制紋理紋理圖像在映射到物體時(shí)會(huì)產(chǎn)生許多問(wèn)題。這些問(wèn)題主要有紋理圖像的紋理怎樣對(duì)應(yīng)到屏幕上的像素、怎樣通過(guò)紋理貼圖實(shí)現(xiàn)紋理縮放和紋理重復(fù)等。其實(shí)現(xiàn)函數(shù)為glTexParmneter(),該函數(shù)的原型(以glTexParmneterf形式為例)為:voidglTexPa—rmneterf(GLeRuintarget,GLeRuinpname,GLfloatpa—ram),其中target參數(shù)為目標(biāo)紋理,pname參數(shù)的取值有以下幾個(gè):GLTEXTUREMINFILTER、GL,ⅡⅨTURE—MAG一兀I肛R、GL—TEXrrIyRE—WRAP一GL—TEXTURE—WRAP—T,而parmn參數(shù)的取值要根據(jù)pname而定。2.3說(shuō)明紋理貼圖方式OpenGL用于紋理貼圖方式的函數(shù)為glTex~v(),該函數(shù)的原型(以glTexEnvf形式為例)為:voidglTexEnv(Gl_enumtarget,Gl_enumpname,GLfloatpa—ram)其中target參數(shù)必須為GL—TEXTURE—ENV,pname參數(shù)必須為GL—TEXTURE—ENV—MODE,而參數(shù)parmn為GL—MODULATE、GL—DECAL或GL—BLEND。2.4定義紋理坐標(biāo)紋理坐標(biāo)控制紋理圖像中的像素怎樣映射到物體。紋理坐標(biāo)可以是1、2、3、4維的,通常用齊次坐標(biāo)來(lái)表示,即(5,t,r,q)。OpenGL定義紋理坐標(biāo)的函數(shù)為xCoord()。該函數(shù)共有32種不同的形式。例如:glTexCoord4f(O.Of,0.Of,0.Of,0.Of)。3基于MFC的OpenGL中的紋理貼圖利用VC++的MFCAppWizard(exe)建立一個(gè)新項(xiàng)目OpenglTexture,選擇基于單文檔界面的應(yīng)用,其它選項(xiàng)都使用缺省值。在OpenglTextureView.h頭文件中,添加各成員變量和成員函數(shù)。for(i=0;i<128;i++)forfj=0;j<64;j++)//定義紋理glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE—WRAP—S,GL—CLAMP);//控制紋理glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE—WRAP—T,GL—CLAMP);glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE—MAG—FIL—ER,GL—NEAREST);glTexParameteri(GL—TEXTURE一2D,GL—TEXTURE—MIN—FIL—TER,GL—NEAREST);rSTexEnvf(GL—TEXTURE—ENV,GL—TEXTURE—ENV—MODE,GL—DECAL);//說(shuō)明紋理貼圖方式glEnable(GL—TEXTURE一2D);//啟動(dòng)紋理貼圖glShadeModel(GL—SMOOTH);glBegin(GL—QUADS);//定義紋理坐標(biāo)和物體幾何坐標(biāo)glTexCoord2f(1.of,1.Of);glVertex3f(1.Of,1.Of,0.Of);glTexCoord2f(1.of,0.Of);glVertex3f(1.Of,一1.Of,0.Of);glTexCoord2f(0.of,0.Of);glVertex3f(一1.Of,一1.Of,0.Of);glTexCoord2f(0.Of.I.Of);glVertex3f(一I.Of,I.Of,0.Of);glEnd

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論