2014-03-06 140 views
0

当着色器到达原始的边缘,有一个GLSL:关屏幕纹理采样

color=texture2D(texture, vec2(texCoord.x+some_positive_value, texCoord.y)); 

某处它会发生什么?我的意思是,color在这样的通话中有什么价值,透明的黑色(0,0,0,0)?这样做似乎没有错误,但我真的需要问这是否安全使用,并有任何可见的文物预期。我正在制作一个模糊着色器,我看过的所有教程都使用这种方法来访问相邻的像素。

回答

2

您可以定义发生了什么。你之后的是"texture wrapping"

但模糊本身仍然存在问题。纹理之外没有数据,因此要么应用换行模式(GL_CLAMP_TO_EDGE可能就是您想要的),并且接受将存在不完善的情况,或者将模糊的输入渲染得稍大。

可能的缺陷如下所示。在它移过边缘之前和之后,我已经在g blurred中模糊了一圈。然后填充中心,以便更好地看到差异。请注意由模糊操作假设颜色如何在边界外延续而引起的畸形第四个圆圈。

Blur imperfections at image borders. Using clamp to edge.

只要你知道texture2D应用滤波,可与texelFetch旁路(注意,这需要坐标像素,而不是归零到一个纹理坐标)。

+0

谢谢,这正是我想知道的。由于这是用于后续处理的一个四倍拉伸适合窗口,我使用1.0/ScreenWidth获得单位的宽度。 – Vladivarius