
Android中GLES20.glTexParameteri函數(shù)表示對(duì)紋理的設(shè)置,函數(shù)結(jié)構(gòu)如下:
public static native void glTexParameteri(
int target,
int pname,
int param
);
參數(shù)說(shuō)明如下:
- target: 活動(dòng)紋理單元的目標(biāo)紋理,GLES20.GL_TEXTURE_2D表示2D紋理,還有其他紋理,比如GLES11Ext.GL_TEXTURE_EXTERNAL_OES,這是Android特有的OES紋理,預(yù)覽相機(jī)或者視頻使用此紋理。
- pname:紋理參數(shù)的標(biāo)記名,可以設(shè)置的值如下:GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_S 或 GL_TEXTURE_WRAP_T。
- param:設(shè)置的值。
GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T
紋理的坐標(biāo)系統(tǒng)叫做ST坐標(biāo)系統(tǒng),和xy坐標(biāo)系統(tǒng)一樣,s對(duì)應(yīng)x,t對(duì)應(yīng)y,因此GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T表示超出范圍的紋理處理方式,可以設(shè)置的值如下:GL_CLAMP_TO_EDGE、GL_REPEAT、GL_MIRRORED_REPEAT。
將紋理的坐標(biāo)值設(shè)置超出界限,紋理坐標(biāo)如下:
var texBuffer = GLTools.array2Buffer(
floatArrayOf(
0.0f, 0.0f,
0.0f, 1.0f,
2.0f, 1.0f,
2.0f, 0.0f
)
)
-
GL_CLAMP_TO_EDGE:采樣紋理邊緣,即剩余部分顯示紋理臨近的邊緣顏色值。
效果如下:
image
后面的部分使用紋理的最后像素的顏色值。
-
GL_REPEAT:重復(fù)紋理。效果如下:
image -
GL_MIRRORED_REPEAT:鏡像重復(fù),效果如下:
image
GL_TEXTURE_WRAP_T和GL_TEXTURE_WRAP_S一樣,T代表y軸。
GL_TEXTURE_MIN_FILTER和GL_TEXTURE_MAG_FILTER
當(dāng)紋理的大小和渲染屏幕的大小不一致時(shí)會(huì)出現(xiàn)兩種情況:
- 第一種情況:紋理大于渲染屏幕,將會(huì)有一部分像素?zé)o法映射到屏幕上,對(duì)應(yīng)于GL_TEXTURE_MIN_FILTER。
- 第二種情況:紋理小于渲染屏幕,沒(méi)有足夠的像素映射到屏幕上,GL_TEXTURE_MAG_FILTER。
可以設(shè)置GL_NEAREST 和 GL_LINEAR。
- GL_NEAREST:使用紋理中坐標(biāo)最接近的一個(gè)像素的顏色作為需要繪制的像素顏色。
- GL_LINEAR:使用紋理中坐標(biāo)最接近的若干個(gè)顏色,通過(guò)加權(quán)平均算法得到需要繪制的像素顏色,與GL_NEAREST比較速度較慢。
視覺(jué)效果如下圖:
image
左面的圖為GL_LINEAR的效果,是放大模糊的效果。右面的圖是GL_NEAREST的效果,鋸齒比較明顯,但沒(méi)有模糊。
