1

我正在对一个framebuffer对象进行两次模糊处理。为了确保在 中FBO,整个场景都被我试图模糊的图像覆盖。这是过程。

  1. 我已经设置了FBO需要模糊的图像尺寸。
  2. 我正在Orthographic Projection使用以下函数(称为 as setupOrtho(FBO's dimensions) )设置一个:

    glViewport(0, 0, w, h) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0,1,0,1,-1,1) glMatrixMode(GL_MODELVIEW) glLoadIdentity()

  3. 使用此投影绘制到FBO。解除绑定FBO(回到屏幕)。
  4. Perspective View通过调用 setupPerspective(window's dimensions)并将glOrtho上面的内容替换为来切换到glFrustum

如果我绘制简单的白色四边形,则视图切换按预期工作。一个四边形正在绘制,Orthographic Projection另一个正在绘制中Perspective View。现在从FBO(let id be RENDEREDTEXTURE) 获取渲染纹理。

RENDEREDTEXTURE如果我在Orthographic Projection我的主场景中绑定,它会显示模糊的图像。如果我将它绑定到Perspective View我的主场景中,之前可见的白色四边形(在 中绘制Perspective View)就会消失。

解决方案:作为答案发布。

注意:使用纹理时永远不要忘记 MIPMAP 生成。

这里可能是什么问题?

请建议任何替代方法,以便在 中FBO,只有我要处理的图像可见(为此我进行了正交投影),并且在主场景中,处理后的图像就像从图像文件加载的任何其他纹理一样.

4

1 回答 1

0

对于framebuffer纹理,Mipmaps不会为纹理自动生成。framebuffer在您渲染了您想要的场景之后,它们必须手动触发。

在切换回默认帧缓冲区后立即使用以下代码段。

    glBindTexture(GL_TEXTURE_2D, YOUR_FINAL_RENDERED_TEXTURE_ID)
    glGenerateMipmap(GL_TEXTURE_2D)
    glBindTexture(GL_TEXTURE_2D, 0)

然后你可以YOUR_FINAL_RENDERED_TEXTURE_ID像往常一样在任何地方使用这个纹理。

于 2014-05-20T12:53:30.223 回答