OpenGL高級課題與紋理映射技術(shù)_第1頁
OpenGL高級課題與紋理映射技術(shù)_第2頁
OpenGL高級課題與紋理映射技術(shù)_第3頁
OpenGL高級課題與紋理映射技術(shù)_第4頁
OpenGL高級課題與紋理映射技術(shù)_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、顯示列表顯示列表求值器求值器頂點操作頂點操作光柵化光柵化逐個象素操作逐個象素操作幀緩沖幀緩沖紋理紋理CPU后象素處理后象素處理頂點變換與光照計算紋理映射幀緩沖區(qū)操作像素級光照計算OpenGL其他高級課題混合深度測試抖動邏輯操作裁剪測試模板測試Alpha測試象素幀緩沖區(qū)透明度的度量 模擬透明物體 玻璃、水等 合成圖像 反走樣 混合狀態(tài)下有效 glEnable( GL_BLEND );基于alpha值選擇象素 glAlphaFunc( func, value ) glEnable( GL_ALPHA_TEST );在紋理映射時用alpha值作為蒙板結(jié)合輸出與幀緩沖器中原有的象素值glBlendFu

2、nc( src, dst )混合方程pfrCdstCsrcC其他的裁剪測試 glScissor( x, y, w, h )包圍盒外的象素被裁剪掉便于更新視域的一小塊區(qū)域 影響glClear()操作用模板緩沖區(qū)的值控制繪制 無法通過模板測試的象素將不被繪制 例子:在模板緩沖區(qū)中創(chuàng)建一個蒙板,并僅繪制那些不在蒙板區(qū)域內(nèi)的物體glStencilFunc( func, ref, mask ) 用func比較緩沖區(qū)的值與 ref 只對那些mask值為1的象素進(jìn)行操作 func 是一個標(biāo)準(zhǔn)比較函數(shù)glStencilOp( fail(模板失敗), zfail(模板通過,z失?。? zpass(兩者都通過)

3、) 基于模板測試和深度測試的結(jié)果相應(yīng)調(diào)整模板緩沖區(qū)的值: GL_KEEP, GL_INCRglInitDisplayMode( |GLUT_STENCIL| );glEnable( GL_STENCIL_TEST );glClearStencil( 0 x0 );glStencilFunc( GL_ALWAYS, 0 x1, 0 x1 );glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );繪制蒙板當(dāng)stencil = 1繪制物體glStencilFunc( GL_EQUAL, 0 x1, 0 x1 )當(dāng)stencil != 1繪制 glSten

4、cilFunc( GL_NOTEQUAL, 0 x1, 0 x1 ); glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP ); glEnable( GL_DITHER );抖動用于加強(qiáng)視覺效果 用于模擬更多顏色打印設(shè)置目前,該功能很少被用到使用位邏輯操作結(jié)合多個象素值 glLogicOp( mode );命令模式 GL_XOR GL_AND目前,該功能很少被用到目前,該功能很少被用到顏色緩沖器合成的問題 有限顏色分辨率 截斷 精度損失 累積緩沖區(qū)扮演著“浮點”顏色緩沖區(qū)的角色 合成到積累緩沖區(qū) 將結(jié)果轉(zhuǎn)換到幀緩沖區(qū)glAccum( op, value ) 操作 在積

5、累緩沖區(qū)中的操作: GL_ADD, GL_MULT 讀緩沖區(qū)操作: GL_ACCUM, GL_LOAD 寫緩沖區(qū)操作: GL_RETURN glAccum(GL_ACCUM, 0.5)將寫緩沖區(qū)的每一個值乘以0.5,然后加到累積緩沖區(qū)中顏色合成:透明全屏反走樣:A-buffer算法景深:Depth Cue濾波:運動模糊: Motion blur消除鋸齒狀glEnable( mode ) GL_POINT_SMOOTH GL_LINE_SMOOTH GL_POLYGON_SMOOTH 象素的Alpha值由象素被覆蓋大小決定 可以是RGBA或顏色索引模式當(dāng)我們略微移動視點時,圖像隨之平移 每一幅圖

6、像有不同的走樣情況 用積累緩沖區(qū)對圖像作平均,將消除這些走樣沿平行焦平面的方向移動視點前平面后平面焦平面眼睛位置1眼睛位置2景深景深glFogif( property, value )景深效果處理 指定線性霧化漸變區(qū)域大小 GL_FOG_LINEAR環(huán)境效果 模擬真實霧化效果 GL_FOG_EXP GL_FOG_EXP2成像子集 只有當(dāng)GL_ARB_imaging有定義時才有效 顏色矩陣 卷積 顏色表 直方圖 MinMax 高級混合立即模式(immediate mode) 圖元直接發(fā)送到繪制流水線并顯示 不需要顯卡內(nèi)存顯示列表(display list) 圖元保存在顯示列表中、顯示列表保存在顯

7、卡中保留模式(retained mode) 所有數(shù)據(jù)預(yù)先置入顯存立即模式列出顯示顯示顯示列表列表多項式多項式求值器求值器頂點操作頂點操作和和圖元組裝圖元組裝光柵化光柵化象素象素操作操作紋理紋理內(nèi)存內(nèi)存CPU象素象素操作操作幀幀緩沖緩沖創(chuàng)建顯示列表GLuint id;void init( void ) id = glGenLists( 1 ); glNewList( id, GL_COMPILE ); /* other OpenGL routines */ glEndList();調(diào)用顯示列表void display( void ) glCallList( id );不是所有的OpenGL程序都

8、能存儲在顯示列表當(dāng)中顯示列表創(chuàng)建后,狀態(tài)仍然能夠被改變顯示列表可以嵌套調(diào)用顯示列表一旦創(chuàng)建,不能進(jìn)行編輯 令列表(A) 調(diào)用其他列表(B, C, 或D) 刪除A并按照要求調(diào)用B, C或D考慮一個汽車模型 創(chuàng)建底盤顯示列表 創(chuàng)建輪胎顯示列表glNewList( CAR, GL_COMPILE );glCallList( CHASSIS );glTranslatef( );glCallList( WHEEL );glTranslatef( );glCallList( WHEEL );glEndList();將頂點、顏色數(shù)組一次性送至顯存處理glVertexPointer( 3, GL_FLOAT,

9、 0, coords )glColorPointer( 4, GL_FLOAT, 0, colors )glEnableClientState( GL_VERTEX_ARRAY )glEnableClientState( GL_COLOR_ARRAY )glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );所有有效數(shù)組被用于繪制ColordataVertexdata比直接繪制模式效率更高顯示列表可以在多個OpenGL操作描述表之間共享,降低內(nèi)存要求頂點數(shù)組便于內(nèi)存訪問的方式組織數(shù)據(jù)D3D和最近的OpenGL支持保留模式Bernstein 多項式求值器 G

10、LU NURBS(Non-Uniform Rational B-Splines,非均勻有理B樣條)的基礎(chǔ)GLU二次曲面物體 球面 圓柱(或圓錐) 圓盤(或圓)未繪制的光柵化后的頂點數(shù)據(jù)返回應(yīng)用程序 確定哪些圖元最終被繪制到屏幕上需要指定反饋緩沖區(qū)glFeedbackBuffer( size, type, buffer )選擇繪制反饋模式 glRenderMode( GL_FEEDBACK );決定哪些圖元在視域當(dāng)中需要一個緩沖區(qū)放置返回結(jié)果選擇繪制的選擇模式 glRenderMode( GL_SELECT )用名字區(qū)別各個圖元 “名字”用整數(shù)而非字符串表示名字建立在堆上 允許層次化圖元名字選擇

11、程序 glLoadName( name ) glPushName( name ) glInitNames()拾取是選擇的特殊情況編程步驟 限制鼠標(biāo)周圍的一小塊區(qū)域為當(dāng)前繪制區(qū)域在投影矩陣上使用gluPickMatrix() 進(jìn)入選擇模式; 重繪屏幕 被視見體裁剪的每個圖元引起一個選擇命中 退出選擇模式; 分析命中記錄紋理映射的基本原理凹凸紋理映射(bump mapping)位移映射(displacement mapping)環(huán)境紋理映射(environment mapping)基于光照映射的快速繪制(light mapping)高級紋理映射技術(shù)總結(jié)將一個一維、二維、三維的圖像映射到幾何物體上的

12、過程紋理映射的用途 仿真自然界的材質(zhì) 減少幾何復(fù)雜度 圖像warping 反射效果模擬 。stxyz圖像:即紋理幾何屏幕圖像和幾何在不同的管道中處理,最后在光柵處理器中融合。 復(fù)雜的紋理不影響幾何的復(fù)雜性。幾何管道頂點象素管道圖像光柵處理器256 x 256的圖像映射到 一個長方形,并進(jìn)行透視投影。 二維紋理圖像 紋理坐標(biāo) 紋理映射到三維空間中平面 三步設(shè)置紋理讀入或者生成圖像將圖像賦到某個紋理上打開紋理映射功能將紋理坐標(biāo)賦到頂點上設(shè)置紋理參數(shù) Wrapping(重復(fù)pattern的方式), filtering(紋理采樣的濾波方式):類似于紋理圖像序列的顯示列表(可加快速度) 每個紋理對象對應(yīng)

13、一個圖像 可以由多個圖形上下文共享生成紋理名字glGenTextures( n, *texIds );綁定紋理圖像(id為紋理對象名字)glBindTexture( target, id );從CPU內(nèi)存的一塊圖像定義一個紋理對象glTexImage2D( target, level, components, w, h, border, format, type, *texels ); 圖像的尺寸是 2的冪次紋理顏色由象素處理管道處理如果圖像的維數(shù)不是2的冪次 gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out,

14、 type_out, *data_out ); *_in 源圖像源圖像 *_out 目標(biāo)圖像目標(biāo)圖像 Format:圖像格式(圖像格式(GL_RGB) Type:圖像數(shù)據(jù)格式圖像數(shù)據(jù)格式在縮放過程中進(jìn)行插值和濾波將幀緩沖器的內(nèi)容設(shè)定為紋理圖像的來源設(shè)置某個紋理的一部分拷貝部分紋理 glCopyTexSubImage2D(.)基于參數(shù)化的紋理坐標(biāo)glTexCoord*() 指定每個頂點處的紋理st1, 10, 10, 01, 0(s, t) = (0.2, 0.8)(0.4, 0.2)(0.8, 0.4)ABCabc紋理空間物體空間紋理映射區(qū)域通常是平面或曲面,計算任意空間曲面與紋理域的對應(yīng)關(guān)系

15、本質(zhì)上是一個參數(shù)化的過程 避免出現(xiàn)扭曲、變形的效果 最好是保角映射或保面積映射平面方程數(shù)學(xué)曲面物體表面屬性 過程式紋理函數(shù)生成自動生成紋理坐標(biāo) glTexGenifdv()指定一個平面 基于到平面的距離生成紋理坐標(biāo)生成模式 GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP0DCzByAx紋理濾波模式 縮小或放大時的濾波方式 mipmap 縮小濾波紋理取址方式 Clamping(邊界顏色) repeating(重復(fù))紋理融合函數(shù) 如何混合紋理的顏色與物體表面計算的顏色: 融合,modulate 或者替換紋理多邊形放大時縮小多邊形紋理例如:Mipmap 允許

16、對一個紋理進(jìn)行預(yù)處理,生成小尺寸紋理對于小的物體,能減少插值錯誤,加快繪制速度Mipmap由OpenGL自動生成可以在定義紋理的時候聲明mipmap層次GLU mipmap 生成函數(shù)OpenGL 1.2 引入了高級的 LOD(層次細(xì)節(jié)) 控制紋理插值模式函數(shù)使用例子:glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )(上左)重復(fù);(上右)鏡像;(下左)截斷;(下右)重復(fù)邊界顏色 控制紋理是如何映射到物

17、體上 glTexEnvfiv( GL_TEXTURE_ENV, prop, param ) GL_TEXTURE_ENV_MODE 模式: GL_MODULATE GL_BLEND GL_DECAL(GL_REPLACE)設(shè)置混合顏色: GL_TEXTURE_ENV_COLORDemo: MFCTex對同一個物體實施多步光照明計算和多個紋理映射,這就是三維繪制引擎中的多步紋理技術(shù)(multipass texture mapping)兩步繪制: 計算漫射分量并與紋理相乘 計算鏡面分量并與第一步計算結(jié)果相加。 在每一步中,紋理值可以和其他光照明分量進(jìn)行多種融合操作,包括替代、相加、混合等。alpha通道扮演了一個遠(yuǎn)遠(yuǎn)超過透明度的角色。第1到第4步:累積凹凸映射;第5步:漫射光分量;第6步:基紋理;第7步:鏡面光分量(可選);第8步:自身發(fā)射光分量(可選);第9步:體/霧/大氣效果(可選);第10步:屏幕閃爍(可選)。在

溫馨提示

  • 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

提交評論