我有一个纹理 4x300(半 npot),我想将它用于 500x300 的精灵。我将 wrapS 设置为 GL_REPEAT 并将 wrapT 设置为 GL_CLAMP_TO_EDGE 因为我只需要一侧重复。但是,我得到的只是一个黑色方块。当我将纹理的尺寸更改为 4x512(罐)时,图像被正确绘制。
iOS上有什么方法可以使用仅一侧重复的修剪图像(4x300)还是我必须将其扩展为完全具有二维功能?
在 OpenGL ES 中,NPOT 纹理不能有 REPEAT 模式。看:
在 OpenGL ES 2.0 中,纹理可以具有非二次方 (npot) 维度。换言之,宽度和高度不需要是2的幂。但是,如果纹理尺寸不是 2 的幂,OpenGL ES 2.0 确实对可以使用的环绕模式有限制。也就是说,对于 npot 纹理,包裹模式只能是 GL_CLAMP_TO_EDGE,而缩小过滤器只能是 GL_NEAREST 或 GL_LINEAR(换句话说,不是 mipmapped)。扩展 GL_OES_texture_npot 放宽了这些限制并允许 GL_REPEAT 和 GL_MIRRORED_REPEAT 的包装模式,还允许使用完整的缩小过滤器集对 npot 纹理进行 mipmap。
此外,没有半 NPOT 纹理这样的东西。纹理可以是 POT 也可以不是,始终考虑两个维度。