本文主要是介绍OpenGL ES 3. 纹理采样 详述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
大家好,接下来将为大家介绍OpenGL ES 3. 纹理采样。
1、纹理采样概念
纹理采样就是根据片元的纹理坐标到纹理图中取对应位置颜色的过程。但由于被渲染图元中的片元数量与其对应纹理区域中像素的数量并不一定相同,也 就是说图元中的片元与纹理图中的像素并不总是一一对应的。
例如,将较小的纹理图映射到较大的图元或将较大的纹理图映射到较小的图元时这种情况就 会产生。因此,通过纹理坐标在纹理图中并不一定能得到与之完全对应的像素,这时就需要采用一些策略使得纹理采样可以顺序进行下去。通常采用的策略有最近点采样、线性采样两种,下面将一一进行详细介绍。
2、最近点采样 GL_NEAREST
最近点采样是最简单的一种采样算法,其速度在各种采样算法中也是最快的。
其实际效果如下图所示:
从前面原理的介绍中可以看出,最近点采样很简单,计算量也小。但最近点采样也有一个明显的缺点,那就是若把较小的纹理图映射到较大的图元上时容易产生很明显的锯齿。
GL_NEAREST的设置方式:
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 MIN 时为最点采样
GLES30.GL_TEXTURE_MIN_FILTER,GLES30.GL_NEAREST);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 MAG 时为最点采样
GLES30.GL_TEXTURE_MAG_FILTER,GLES30.GL_NEAREST);
3、线性采样 GL_LINEAR
线性采样算法的原理如图所示。
线性采样时的结果颜色并不一定仅来自于纹理图中的一个像素,其在采样时会考虑到片元 对应的纹理坐标点附近的几个像素。
其实际效果如下图所示:
由于采样时对采样范围内的多个像素进行了加权平均,因此,在将较小的纹理图映射到较大的图元上时,不再会有锯齿的现象,而是平滑。
GL_LINEAR的设置方式:
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 MIN 时为线性采样
GLES30.GL_TEXTURE_MIN_FILTER,GLES30. GL_LINEAR);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 MAG 时为线性采样
GLES30.GL_TEXTURE_MAG_FILTER,GLES30. GL_LINEAR);
最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。
这篇关于OpenGL ES 3. 纹理采样 详述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!