OpenGL ES 2.0 -读取纹理值(像texelFetch)



我有一个查找纹理作为红色通道(R8)。我把它上传到像素着色器,在那里我想读取像素值(范围0 - 255),并使用值来索引颜色数组。纹理是非2的幂次。如果我做

float v = texture2D(s, c).r;
int index = int(v * 255);

结果并不总是正确的。首先,存在线性滤波器,导致结果混乱(对于NPT纹理,ES 2.0中只支持线性滤波器),有时也会出现舍入误差(在texcoord插值中)

这是不正确的,只有线性过滤器在ES 2.0中支持NPOT纹理。也支持最近过滤。但是,您通常必须为NPOT设置CLAMP_TO_EDGE。(新硬件对NPOT没有任何限制)

创建纹理时设置:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );

如果出现舍入错误,可能还需要声明精度。例如使用' highp float '代替'float'

最新更新