GLSL:离屏纹理采样

时间:2014-03-06 00:34:34

标签: glsl blur texture2d

当着色器到达原始边缘并且有

时会发生什么
color=texture2D(texture, vec2(texCoord.x+some_positive_value, texCoord.y));
在它的某个地方?我的意思是,color在这样的通话中获得了什么价值,透明的黑色(0,0,0,0)?这样做似乎没有错误,但我真的需要问一下这是否安全,并且是否有任何可见的工件。我正在制作模糊着色器,我见过的所有教程都使用这种方法来访问相邻的像素。

1 个答案:

答案 0 :(得分:2)

你定义会发生什么。你所追求的是"texture wrapping"

但是模糊本身仍然存在问题。纹理之外没有数据,因此要么应用包裹模式(GL_CLAMP_TO_EDGE可能是您想要的)并接受将存在缺陷,或者将模糊的输入渲染得稍大。

可能的缺陷如下所示。我在gimp之前和之后模仿了一个圆圈。然后填充中心,这样你就可以更好地看到差异。注意由模糊操作假设颜色如何在边界外继续引起的畸形第四圆。

Blur imperfections at image borders. Using clamp to edge.

您知道texture2D应用过滤,可以使用texelFetch绕过过滤(请注意,这需要以像素为单位的坐标,而不是将归一化的零到一个纹理坐标)。