【问题标题】:iPhone post-processing with a single FBO with Opengl ES 2.0?使用 Opengl ES 2.0 使用单个 FBO 进行 iPhone 后处理?
【发布时间】:2011-06-10 08:50:22
【问题描述】:

我正在尝试使用 OpenGL ES 2.0 在 iPhone 上实现后处理(模糊、光晕等)。我遇到了一些问题。在我的第二个渲染步骤中渲染时,我最终在屏幕上绘制了一个完全黑色的四边形而不是场景(看起来纹理数据丢失了)所以我想知道原因是否是使用单个 FBO。按以下方式使用单个 FBO 是否不正确?

对于第一遍(常规场景渲染),

  • 我将纹理附加为 COLOR_ATTACHMENT_0 并渲染到纹理。 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texturebuffer, 0)

对于第二遍(后处理),

  • 我将颜色渲染缓冲区附加到 COLOR_ATTACHMENT_0 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer)
  • 然后使用第一遍的纹理在屏幕上渲染为四边形。

【问题讨论】:

    标签: iphone opengl-es opengl-es-2.0 post-processing


    【解决方案1】:

    不,FBO 的使用很好。原因很可能是您没有设置纹理(纹理缓冲区)的 MIN/MAG 过滤器,绑定后,使用 glTexParameter 将 GL_MIN_FILTER 和 GL_MAG_FILTER 设置为 GL_NEAREST 或 GL_LINEAR,您的纹理应该可以工作了。

    【讨论】:

    • 感谢您的回答。您是否可以指出我可以确认这种用法的资源? (不是我不相信你,但它可能是一个很好的参考。)另外,我已经设置了 MIN/MAG 过滤器,所以它必须是别的东西。您还能想到其他常见的陷阱吗?
    • 正如下面评论的,问题很相似..我的纹理没有被调整到 2 的幂。你的回答让我找到了正确的地方,谢谢。
    【解决方案2】:

    正如 Matias 所说,您的设计看起来不错。我自己也做过类似的事情,并且效果很好。

    我编写了一个示例应用程序,它使用着色器来处理相机图像,可以从here 下载,但它使用glReadPixels() 将屏幕外的值提取到处理例程中,而不是直接将结果映射到屏幕上的纹理。你也许可以修改它来做到这一点。

    否则,我制作了一个更复杂的着色器示例应用程序here,其中一部分将场景渲染为立方体贴图纹理,然后将该纹理馈送到处理的第二阶段。这应该说明使用 OpenGL ES 2.0 着色器渲染和使用纹理。

    也许这些可以揭示您的实施失败的地方。

    【讨论】:

    • 问题是我的纹理被调整为 320x480 而不是 2 的幂 (512x512)。谢谢,代码很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多