当着色器到达原始边缘并且有
时会发生什么color=texture2D(texture, vec2(texCoord.x+some_positive_value, texCoord.y));
在它的某个地方?我的意思是,color
在这样的通话中获得了什么价值,透明的黑色(0,0,0,0)?这样做似乎没有错误,但我真的需要问一下这是否安全,并且是否有任何可见的工件。我正在制作模糊着色器,我见过的所有教程都使用这种方法来访问相邻的像素。
答案 0 :(得分:2)
你定义会发生什么。你所追求的是"texture wrapping"
但是模糊本身仍然存在问题。纹理之外没有数据,因此要么应用包裹模式(GL_CLAMP_TO_EDGE
可能是您想要的)并接受将存在缺陷,或者将模糊的输入渲染得稍大。
可能的缺陷如下所示。我在gimp之前和之后模仿了一个圆圈。然后填充中心,这样你就可以更好地看到差异。注意由模糊操作假设颜色如何在边界外继续引起的畸形第四圆。
您知道texture2D
应用过滤,可以使用texelFetch
绕过过滤(请注意,这需要以像素为单位的坐标,而不是将归一化的零到一个纹理坐标)。