glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GL_TEXTURE_MAG_FILTER 和 GL_TEXTURE_MIN_FILTER分别为放大和缩小时使用的过滤算法,如果使用GL_NEAREST,速度会更快一些,使用LINEAR会使用四个像素均值来计算像素点,因此画面会更平滑,但是会稍暗,不加分辨看不出来。 如下左图为GL_LINEAR,显然平滑度比较高
首先产生纹理后必须要告诉GPU进行层次化纹理生成
glGenerateMipmap(GL_Texture_2D);
使用mipmaps也很简单,设置过滤参数为以下4种中的任意一种:
GL_NEAREST_MIPMAP_NEAREST: 最邻近的mip层,并使用最邻近过滤。
GL_NEAREST_MIPMAP_LINEAR: 对两个mip层使用最邻近过滤后的采样结果进行加权平均。
GL_LINEAR_MIPMAP_NEAREST: 选择最邻近的mip层,使用线性插值算法进行过滤。
GL_LINEAR_MIPMAP_LINEAR: 对两个mip层使用线性插值过滤后的采样结果进行加权平均,又称三线性mipmap。
在实际不断地变化movie纹理产生的情况下,三线性纹理不可取,会使得亮度降低。 使用硬件 产生层次纹理
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
对于是动态的变化纹理和经常拉伸的图像来说,可以使用Mipmap,最好的方式为:
GL_LINEAR_MIPMAP_NEAREST
有人可能会问为什么不是GL_LINEAR_MIPMAP_LINEAR,这里给出原因, 1 、GL_LINEAR已经对图像进行了线性加权平均,在选择层次的时候NEAREST时最快的,而且图像不会发暗太多。兼顾了效率和效果,但是在高分辨率图像显示时,没有必要使用GL_LINEAR,反而是GL_NEARST 更为实际,因为GL_NEARST 速度更快,这时几乎没有损失,所以参数都是要灵活选择的。 2、 动态图像播放使用GL_LINEAR_MIPMAP_LINEAR是不合适的,会产生图像上的错误和滞留。
3、层级指定指定需要加载0到4层级的纹理: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4); 另外,GL_TEXTURE_MIN_LOD和GL_TEXTURE_MAX_LOD 可以来限制纹理的使用范围。