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

对于第一个通行证(常规场景渲染),

  • 我将纹理附加为color_attachment_0,并将其渲染到纹理上。glframebuffertexture2d(gl_framebuffer,gl_color_attachment0,gl_texture_2d,textureBuffer,0)

对于第二次通过(后处理),

  • 我将颜色renderbuffer附加到color_attachment_0 glframebufferrenderbuffer(gl_framebuffer,gl_color_attachment0,gl_renderbuffer,colorrenderbuffer)
  • 然后,将第一张通过中的纹理渲染为屏幕上的四边形。
有帮助吗?

解决方案

不,FBO使用情况很好。原因很可能是您没有将纹理的最小/磁过滤器(TextureBuffer)设置为绑定后,将GL_MIN_FILTER和GL_MAG_FILTER设置为GL_NEAREST或GL_LINEAR,或使用GlTexParameter使用GL_LINEAR,并且您的纹理应起作用。

其他提示

正如Matias所说,您的设计看起来不错。我自己做了类似的事情,它运行良好。

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

否则,我做了一个更复杂的着色器样本应用程序 这里 在一个部分中,将场景呈现到立方体映射的纹理,然后将纹理馈入处理的第二阶段。这应该说明带有OpenGL ES 2.0着色器的纹理的渲染和使用。

也许这些可能会阐明您的实施失败的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top