【问题标题】:glsl update an specific row of a 2D textureglsl 更新 2D 纹理的特定行
【发布时间】:2012-06-09 11:39:30
【问题描述】:

我正在使用 FBO 和附加的纹理来处理“渲染到纹理”功能。

我的问题是在片段着色器中我不知道如何写入 2D 纹理的特定行。我确实有哪一行的信息(由一个统一的浮点变量表示),但我不知道如何在那里绘制。

这可能吗?或者有什么好方法可以知道我在片段着色器中的位置?

我的全局想法是从上到下将 1D 纹理的演变渲染为 2D 纹理。每个进化步骤由片段着色器计算(使用渲染到纹理乒乓球方法,具有 2 个 FBO)

【问题讨论】:

    标签: opengl glsl shader textures


    【解决方案1】:

    您可以在片段着色器中使用discard; 来丢弃您不想要的片段。类似的东西

    if (gl_FragCoord.y != row_to_keep)
        discard;
    

    然后正常渲染你的场景,最后你只会写一行输出。

    【讨论】:

      【解决方案2】:

      我认为片段着色器不适合这样做。

      如果你只想写入 FBO 的单行,你不能将你的绘制调用的顶点设置为只与你想要绘制的像素重叠吗?

      【讨论】:

      • 我不确定你的意思。在绘制每个进化步骤时继续移动一个小矩形?
      • 如果您有一个 1 像素高的 1D 纹理要绘制到帧缓冲区,请生成一个 1 像素高、全屏宽度的四边形,将其转换为您要绘制的行的高度, 并绘制。然后它只会对该行中的像素执行片段着色器。
      • 我明白了。此外,我还需要在旧行中绘制旧状态,这是不断积累的东西。让我回答最后一部分:如果我删除 glClear 指令,我最终会得到一个在每个渲染过程中累积的帧,对吗?如果这是真的,我认为您的想法可以解决问题。
      • 我认为我需要一个累积缓冲区
      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多