php叠加纹理,OpenGL ES 纹理过滤模式-glTexParameteri

一个

有态度

的程序员

e483d56a1f46882e3d85f2c01d3a5715.png

Android中GLES20.glTexParameteri函数表示对纹理的设置,函数结构如下:

public static native void glTexParameteri(int target,int pname,int param);

参数说明如下:

target: 活动纹理单元的目标纹理,GLES20.GL_TEXTURE_2D表示2D纹理,还有其他纹理,比如GLES11Ext.GL_TEXTURE_EXTERNAL_OES,这是Android特有的OES纹理,预览相机或者视频使用此纹理。

pname:纹理参数的标记名,可以设置的值如下:GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_S 或 GL_TEXTURE_WRAP_T。

param:设置的值。

GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T

纹理的坐标系统叫做ST坐标系统,和xy坐标系统一样,s对应x,t对应y,因此GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T表示超出范围的纹理处理方式,可以设置的值如下:GL_CLAMP_TO_EDGE、GL_REPEAT、GL_MIRRORED_REPEAT。

将纹理的坐标值设置超出界限,纹理坐标如下:

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:采样纹理边缘,即剩余部分显示纹理临近的边缘颜色值。效果如下:

ae9c3d43a3698822256f93ad4f6b33db.png

后面的部分使用纹理的最后像素的颜色值。

GL_REPEAT:重复纹理。效果如下:

ebde1d63abbca36d963f5141f5576824.png

GL_MIRRORED_REPEAT:镜像重复,效果如下:

9fc67ee5d5c0a78aa881fbbd2d5c612c.png

GL_TEXTURE_WRAP_T和GL_TEXTURE_WRAP_S一样,T代表y轴。

GL_TEXTURE_MIN_FILTER和GL_TEXTURE_MAG_FILTER

当纹理的大小和渲染屏幕的大小不一致时会出现两种情况:

第一种情况:纹理大于渲染屏幕,将会有一部分像素无法映射到屏幕上,对应于GL_TEXTURE_MIN_FILTER。

第二种情况:纹理小于渲染屏幕,没有足够的像素映射到屏幕上,GL_TEXTURE_MAG_FILTER。

可设置的值为GL_NEAREST 、GL_LINEAR。

GL_NEAREST:使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色。

GL_LINEAR:使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色,与GL_NEAREST比较速度较慢。

视觉效果如下图:

12de3925508c96e25458f39c43cb53b2.png

左面的图为GL_LINEAR的效果,是放大模糊的效果。右面的图是GL_NEAREST的效果,锯齿比较明显,但没有模糊。

更多相关阅读:

关注我们

获得更多精彩内容

215d4abffbe59028765aa51e90e020f7.gif

戳原文,查看OpenGL ES for Android 总览

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值