【问题标题】:GLSL: Off screen texture samplingGLSL:离屏纹理采样
【发布时间】:2014-07-06 19:18:28
【问题描述】:

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

时会发生什么
color=texture2D(texture, vec2(texCoord.x+some_positive_value, texCoord.y));

在它的某个地方?我的意思是,color 在这样的调用中得到什么值,透明黑色(0,0,0,0)?这样做似乎没有错误,但我真的需要询问这是否可以安全使用,是否有任何可见的工件可以预期。我正在制作一个模糊着色器,我见过的所有教程都使用这种方法来访问相邻像素。

【问题讨论】:

    标签: glsl blur texture2d


    【解决方案1】:

    你定义会发生什么。你要的是"texture wrapping"

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

    可能的缺陷如下所示。在将它移动到边缘之前和之后,我在 gimp 中模糊了一个圆圈。然后填充中心,以便您可以更好地看到差异。注意由于模糊操作假设颜色如何在边界之外继续而导致的第四个圆圈变形。

    您知道texture2D 应用过滤,texelFetch 可以绕过过滤(请注意,这采用像素坐标而不是归一化的零到一纹理坐标)。

    【讨论】:

    • 谢谢,这正是我想知道的。由于这用于对拉伸以适应窗口的单个四边形进行后处理,因此我使用 1.0/ScreenWidth 来获取单位的宽度。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2018-03-02
    相关资源
    最近更新 更多