OpenGL ES 2.0 - 读取纹理值(与texelFetch一样)

时间:2014-03-09 16:19:00

标签: opengl-es textures

我查找纹理为红色通道(R8)。我将它上传到Pixel Shader并在那里我想读取像素值(范围0 - 255)并使用值来索引颜色数组。纹理是两个非幂。如果我做

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

结果并不总是正确的。首先,存在线性滤波器,即混乱结果(对于NPT纹理,ES 2.0中仅支持线性滤波器),有时也会发生圆误差(在texcoord的插值中)

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

在带有NPOT纹理的ES 2.0中只支持线性过滤器,这是不正确的。也支持最近的过滤。但是,您必须为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'