OpenGL學習十九 紋理過濾

2021-09-01 21:58:35 字數 1610 閱讀 6066

當物體放大縮小時導致投影在上面的紋理也隨著變化,opengl為了 優化其細節使其效果更好,因此可以採用紋理過濾

gltexparameteri(gl_texture_2d, gl_texture_mag_filter, gl_nearest);

gl_texture_mag_filter

gl_nearest或gl_linear

gl_texture_min_filter

gl_nearest 速度快,效果差

gl_linear  計算量大。效果好

gl_nearest_mipmap_nearest 速度快,效果差

gl_linear_mipmap_nearest

gl_nearest_mipmap_linear

gl_linear_mipmap_linear 計算量大。效果好

gl_nearest是點取樣,gl_linear 是雙線性取樣,gl_linear_mipmap_linear三線性取樣

命名紋理空間

void glgentextures (glsizei n, gluint *textures);

判斷紋理是否已繫結

glboolean glistexture (gluint texturename);

建立和使用紋理物件

void glbindtexture (glenum target, gluint texture);

清除紋理物件

void gldeletetextures (glsizei n, gluint *textures);

常駐紋理工作集

有些opengl實現支援高效能的紋理工作集,稱為常駐紋理,一般情況下,這些opengl實現具有專門的硬體來執行紋理操作,使用

glboolean glaretexturesresident (glsizei n, const gluint *textures, glboolean *residences);判斷紋理是否是常駐紋理

如果opengl實現並沒有建立高效能工作集,那麼紋理總被認識是常駐的

常駐紋理策略

如果常駐紋理足夠,絕不應該訪問非常駐紋理,如果常駐紋理資源有限,將經常使用的放入常駐紋理,同時減少所使用的紋理影象的大小,解析度以及mipmap層數量,或者使用gltexsubimage*()函式反覆使用同一塊紋理記憶體

可以設定紋理的優先順序。使經常用的紋理能夠有更多的機會的形成常駐紋理,當常駐紋理資源緊張時可以移除哪些低優先順序的紋理單元

void glprioritizetextures (glsizei n, const gluint *textures, const glclampf *priorities);

如果幾個紋理物件具有相同的優先順序,opengl一般會採用最近最少使用策略來選擇哪些紋理單元該被移除常駐紋理。

MipMap(紋理過濾)

mipmap 首先從mipmap的原理說起,它是把一張貼圖按照2的倍數進行縮小。直到1x1。把縮小的圖都儲存起來。在渲染時,根據乙個畫素離眼睛為之的距離,來判斷從乙個合適的圖層中取出texel顏色賦值給畫素。在d3d和ogl都有相對應的api控制接 口透過它的工作原理我們可以發現,硬體總是根據眼睛到...

紋理過濾函式glTexParameteri

opengl 紋理過濾函式gltexparameteri 圖象從紋理圖象空間對映到幀緩衝圖象空間 對映需要重新構造紋理影象,這樣就會造成應用到多邊形上的影象失真 這時就可用gltexparmeteri 函式來確定如何把紋理象素對映成畫素.gltexparameteri int target,int ...

紋理過濾相關內容

最近的工作涉及到了紋理過濾的知識,然後就開始回想起來以前的儲備知識,結果發現自己的儲備簡直是弱爆了,因此查了點資料,總計寫記錄下來,一邊以後翻閱 d3d支援的紋理過濾型別是3中 最近點取樣,線性紋理過濾,各向異性 anisotropic 紋理過濾 但是在遊戲中一般會分為4種 點取樣 設定方式 g d...