大家好,接下来将为大家介绍OpenGL ES 3. 纹理环绕。
纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?
无论是 S 轴还是 T 轴的纹理坐标都是在 0.0~1.0 的范围内,这满足了大多数情况。但在特定的情况下,也可以设置大于 1 的纹理坐标。当纹理坐标大于 1 以后,设置的 方式就会起作用了。
1、重复纹理环绕
当顶点纹理坐标大于 1 时,则实际起作用的纹理坐标为纹理坐标的小数部分。也就是若纹理坐标为 3.3,则起作用的纹理坐标为 0.3。
4 个顶点的纹理坐标改为了(0,0)、(4,0)、(0,2)、(4,2)。 因此,矩形中各片元的纹理坐标范围为 S 轴方向 0~4,T 轴方向 0~2,应该在 S 轴方向重复 4 次,T 轴方向重复 2 次。
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_REPEAT); //设置 S 轴的方式为重复环绕
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_REPEAT); //设置 T 轴的方式为重复环绕
2、镜像重复环绕
当顶点纹理坐标大于 1 时,则实际起作用的纹理坐标为纹理坐标 的小数部分。也就是若纹理坐标为 3.3,则起作用的纹理坐标为 0.3。
4 个顶 点(两个三角形)组成,顶点纹理坐标分别为(0,0)、(4,0)、(0,4)、(4,4)。因此,可以看出矩形 中各片元的纹理坐标范围为 S 轴方向 0~4,T 轴方向 0~4,由于镜像重复是左右对称和上下对称, 所以,S、T 轴均重复对称两次。
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 S 轴的方式为镜像重复
GLES30.GL_TEXTURE_WRAP_S, GLES30. GL_MIRRORED_REPEAT);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, //设置 T 轴的方式为镜像重复
GLES30.GL_TEXTURE_WRAP_T, GLES30. GL_MIRRORED_REPEAT);
3、截取环绕
截取环绕方式中当纹理坐标的值大于 1 时都看作 1,因此,会产生边缘被拉伸的效果。
4 个顶点纹理坐标分别为(0,0)、(4,0)、(0,4)、(4,4),因此,矩形中的各片元纹理坐标范围为 S 轴方向 0~4,T 轴方 向 0~4。由于在此种环绕方式下,大于 1 的纹理坐标都看作 1,因此,产生了纹理的边缘被拉伸截取的效果。
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE); //设置 S 轴的方式为截取环绕
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE); //设置 T 轴的方式为截取环绕
最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。