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

下載本文檔

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

文檔簡介

MFC的OpenGL紋理貼圖技術研

摘要:OpenGL是一個開放的三維圖形軟件包,而VisualC++是目前主要的OpenGL開發(fā)工具。本文簡要介紹了OpenGL的紋理貼圖技術及其在MFC中的基本操作步驟。并通過最后的實例驗證了紋理貼圖技術在繪制真實感圖形中的必要性。關鍵詞:OpenGL;MFC;紋理貼圖;計算機圖形學現(xiàn)實世界中的物體表面往往有各種紋理,因此要繪制逼真的三維物體,除了對物體進行光照處理外,還需要加上紋理貼圖,使物體看起來更真實。OpenGL是SGI公司的一個開放的三維計算機圖形軟件接口,為用戶提供豐富的圖形庫,能快速渲染出高質(zhì)量的三維彩色圖像。OpenGL編程的重點是圖形的生成和如何產(chǎn)生各種真實效果,但是編寫一個優(yōu)秀的Windows程序,還必須用到用戶界面接口。VC++的MFC模式可以較為完美地實現(xiàn)對OpenGL生成的效果圖的動態(tài)交互操作。紋理貼圖技術簡介紋理貼圖技術也叫紋理映射技術,它是計算機圖形學中廣泛應用的一項重要技術。傳統(tǒng)的幾何造型只能表示景物的形狀,無法描述景物表面的微觀細節(jié),而利用紋理圖像來描述景物表面各點處的反射屬性,可以達到模擬景物表面豐富的紋理細節(jié)的目的,提高計算機生成圖形的真實性。另一方面,采用紋理映射的方法可以大大地簡化建模的過程。比如,同是一棟大樓表面,若完全用建模的方法來構(gòu)造,則需要畫出大樓的每一扇門、每一扇窗戶;若采用紋理映射,只需建立簡單的長方體模型,用拍下的大樓外觀圖片貼至模型表面即可。相比之下,工作量要小得多。OpenGL紋理貼圖紋理映射是將指定圖像的一部分映射到允許進行紋理映射的每個圖段上。這種映射伴隨著使用一幅圖像的顏色到某一圖段的(s,t,r)坐標所指示的位置上并修改該圖段的RGBA顏色。但要特別注意的是,在OpenGL中,紋理映射僅在RGBA模式下說明,在顏色索引模式下,它的使用未作定義。概括地說,使用紋理繪制的一般步驟為:定義紋理貼圖、控制紋理、說明紋理貼圖方式,定義紋理坐標等。2.1定義紋理紋理的定義有兩種:連續(xù)法和離散法。連續(xù)法把紋理定義為一個二元函數(shù),函數(shù)的定義域就是紋理空間。而離散法則是把紋理定義在一個二維數(shù)組中,該數(shù)組表示紋理空間中行間隔和列間隔固定的一組網(wǎng)格點上的紋理值。網(wǎng)格點之間的其它點的紋理值可以通過對相鄰網(wǎng)格點上紋理值進行插值來獲得。通過紋理空間與物體空間之間的坐標變換,可以把紋理映射到物體表面。一般來說,離散法是較為常用的紋理定義方法。其實現(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指定紋理圖像分辨率的級數(shù),當只有一種分辨率時,level=0;Components是選擇用于調(diào)整和混合的成分;width和height分別指定紋理圖像的寬和高,必須是2,凡為正數(shù);Border為邊界的寬度,必須是0和1;format和type分別指定紋理映射的格式和數(shù)據(jù)類型;Pixels指定一個指針,指向紋理數(shù)據(jù)在內(nèi)存中的位置。2.2控制紋理紋理圖像在映射到物體時會產(chǎn)生許多問題。這些問題主要有紋理圖像的紋理怎樣對應到屏幕上的像素、怎樣通過紋理貼圖實現(xiàn)紋理縮放和紋理重復等。其實現(xiàn)函數(shù)為glTexParmneter(),該函數(shù)的原型(以glTexParmneterf形式為例)為:voidglTexPa—rmneterf(GLeRuintarget,GLeRuinpname,GLfloatpa—ram),其中target參數(shù)為目標紋理,pname參數(shù)的取值有以下幾個:GLTEXTUREMINFILTER、GL,ⅡⅨTURE—MAG一兀I肛R、GL—TEXrrIyRE—WRAP一GL—TEXTURE—WRAP—T,而parmn參數(shù)的取值要根據(jù)pname而定。2.3說明紋理貼圖方式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定義紋理坐標紋理坐標控制紋理圖像中的像素怎樣映射到物體。紋理坐標可以是1、2、3、4維的,通常用齊次坐標來表示,即(5,t,r,q)。OpenGL定義紋理坐標的函數(shù)為xCoord()。該函數(shù)共有32種不同的形式。例如:glTexCoord4f(O.Of,0.Of,0.Of,0.Of)。3基于MFC的OpenGL中的紋理貼圖利用VC++的MFCAppWizard(exe)建立一個新項目OpenglTexture,選擇基于單文檔界面的應用,其它選項都使用缺省值。在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);//說明紋理貼圖方式glEnable(GL—TEXTURE一2D);//啟動紋理貼圖glShadeModel(GL—SMOOTH);glBegin(GL—QUADS);//定義紋理坐標和物體幾何坐標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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論