0

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

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

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

对于第二遍(后处理),

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

2 回答 2

1

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

于 2011-01-17T11:46:56.727 回答
1

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

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

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

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

于 2011-01-17T19:01:27.023 回答