


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MFC的OpenGL紋理貼圖技術(shù)研
摘要:OpenGL是一個開放的三維圖形軟件包,而VisualC++是目前主要的OpenGL開發(fā)工具。本文簡要介紹了OpenGL的紋理貼圖技術(shù)及其在MFC中的基本操作步驟。并通過最后的實(shí)例驗(yàn)證了紋理貼圖技術(shù)在繪制真實(shí)感圖形中的必要性。關(guān)鍵詞:OpenGL;MFC;紋理貼圖;計(jì)算機(jī)圖形學(xué)現(xiàn)實(shí)世界中的物體表面往往有各種紋理,因此要繪制逼真的三維物體,除了對物體進(jìn)行光照處理外,還需要加上紋理貼圖,使物體看起來更真實(shí)。OpenGL是SGI公司的一個開放的三維計(jì)算機(jī)圖形軟件接口,為用戶提供豐富的圖形庫,能快速渲染出高質(zhì)量的三維彩色圖像。OpenGL編程的重點(diǎn)是圖形的生成和如何產(chǎn)生各種真實(shí)效果,但是編寫一個優(yōu)秀的Windows程序,還必須用到用戶界面接口。VC++的MFC模式可以較為完美地實(shí)現(xiàn)對OpenGL生成的效果圖的動態(tài)交互操作。紋理貼圖技術(shù)簡介紋理貼圖技術(shù)也叫紋理映射技術(shù),它是計(jì)算機(jī)圖形學(xué)中廣泛應(yīng)用的一項(xiàng)重要技術(shù)。傳統(tǒng)的幾何造型只能表示景物的形狀,無法描述景物表面的微觀細(xì)節(jié),而利用紋理圖像來描述景物表面各點(diǎn)處的反射屬性,可以達(dá)到模擬景物表面豐富的紋理細(xì)節(jié)的目的,提高計(jì)算機(jī)生成圖形的真實(shí)性。另一方面,采用紋理映射的方法可以大大地簡化建模的過程。比如,同是一棟大樓表面,若完全用建模的方法來構(gòu)造,則需要畫出大樓的每一扇門、每一扇窗戶;若采用紋理映射,只需建立簡單的長方體模型,用拍下的大樓外觀圖片貼至模型表面即可。相比之下,工作量要小得多。OpenGL紋理貼圖紋理映射是將指定圖像的一部分映射到允許進(jìn)行紋理映射的每個圖段上。這種映射伴隨著使用一幅圖像的顏色到某一圖段的(s,t,r)坐標(biāo)所指示的位置上并修改該圖段的RGBA顏色。但要特別注意的是,在OpenGL中,紋理映射僅在RGBA模式下說明,在顏色索引模式下,它的使用未作定義。概括地說,使用紋理繪制的一般步驟為:定義紋理貼圖、控制紋理、說明紋理貼圖方式,定義紋理坐標(biāo)等。2.1定義紋理紋理的定義有兩種:連續(xù)法和離散法。連續(xù)法把紋理定義為一個二元函數(shù),函數(shù)的定義域就是紋理空間。而離散法則是把紋理定義在一個二維數(shù)組中,該數(shù)組表示紋理空間中行間隔和列間隔固定的一組網(wǎng)格點(diǎn)上的紋理值。網(wǎng)格點(diǎn)之間的其它點(diǎn)的紋理值可以通過對相鄰網(wǎng)格點(diǎn)上紋理值進(jìn)行插值來獲得。通過紋理空間與物體空間之間的坐標(biāo)變換,可以把紋理映射到物體表面。一般來說,離散法是較為常用的紋理定義方法。其實(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指定紋理圖像分辨率的級數(shù),當(dāng)只有一種分辨率時,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)生許多問題。這些問題主要有紋理圖像的紋理怎樣對應(yīng)到屏幕上的像素、怎樣通過紋理貼圖實(shí)現(xiàn)紋理縮放和紋理重復(fù)等。其實(shí)現(xiàn)函數(shù)為glTexParmneter(),該函數(shù)的原型(以glTexParmneterf形式為例)為:voidglTexPa—rmneterf(GLeRuintarget,GLeRuinpname,GLfloatpa—ram),其中target參數(shù)為目標(biāo)紋理,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定義紋理坐標(biāo)紋理坐標(biāo)控制紋理圖像中的像素怎樣映射到物體。紋理坐標(biāo)可以是1、2、3、4維的,通常用齊次坐標(biāo)來表示,即(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)建立一個新項(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);//說明紋理貼圖方式glEnable(GL—TEXTURE一2D);//啟動紋理貼圖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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三方協(xié)議合同編號怎么弄
- 合格協(xié)議與合同協(xié)議
- 合同怎么代簽協(xié)議
- 個人供貨合同協(xié)議
- 技術(shù)合同協(xié)議書樣本圖
- 無合同框架協(xié)議
- 終端維修合同協(xié)議
- 減肥合同退款協(xié)議
- 合同保密協(xié)議內(nèi)容
- 沒有物業(yè)合同協(xié)議
- GB/T 2882-2023鎳及鎳合金管
- 自身免疫性肝炎診斷和治療指南(2021版)解讀
- 《小池》的說課課件
- 《童年》讀書分享PPT
- 中央空調(diào)自控系統(tǒng)施工方案
- 洞室開挖安全教育培訓(xùn)
- 腹式全子宮切除術(shù)配合常規(guī)
- 心血管內(nèi)科介入耗材遴選目錄
- 2022-2023學(xué)年度高一英語必修二綜合測試卷二
- 經(jīng)濟(jì)學(xué)說史教程重點(diǎn)
- 通過PDCA降低住院精神病人的逃跑率
評論
0/150
提交評論