基本知识:
首先废话说一说“纹理映射的方式”,一个128*128的图片,在渲染的时候,很可能会被放到一个256*256的方形区域显示,也有可能放到64*64的方形区域显示。所以,图片在缩小时,一些相象就丢失了,在放大时,就需要填充一些像素。
GL_TEXTURE_MIN_FILTER 指的是缩小的情况,而GL_TEXTURE_MAG_FILTER 指的是放大的情况。那OpenGL在这种情况下怎么处理呢?我们称之为纹理过滤方式:
- 最近点采样 GL_NEAREST-效果最差,速度快
- 线性纹理过滤(双线性过滤)GL_LINEAR-效果较好,计算量较大
- mipmap纹理过滤(三线性过滤) GL_LINEAR_MIPMAP_LINEAR-效果最好,计算量最大
- 各向异性过滤
更多关于这三种渲染方式的讲解看这里吧,http://blog.csdn.net/kkk328/article/details/7055934,我这只管怎么用就好了,要说一下,Libgdx所实现的OpenGL ES里,只支持前面三种。可以看一下Libgdx中关于TextureFilter的定义:
public enum TextureFilter { Nearest(GL10.GL_NEAREST), Linear(GL10.GL_LINEAR), MipMap(GL10.GL_LINEAR_MIPMAP_LINEAR), MipMapNearestNearest( GL10.GL_NEAREST_MIPMAP_NEAREST), MipMapLinearNearest(GL10.GL_LINEAR_MIPMAP_NEAREST), MipMapNearestLinear( GL10.GL_NEAREST_MIPMAP_LINEAR), MipMapLinearLinear(GL10.GL_LINEAR_MIPMAP_LINEAR); final int glEnum; TextureFilter (int glEnum) { this.glEnum = glEnum; } public boolean isMipMap () { return glEnum != GL10.GL_NEAREST && glEnum != GL10.GL_LINEAR; } public int getGLEnum () { return glEnum; } }
未完待续--