OpenGL:从Framebuffer对象加载渲染纹理

时间:2014-05-20 09:37:40

标签: opengl framebuffer perspectivecamera projection-matrix

我正在对framebuffer对象进行两遍模糊。为了确保在FBO中,整个场景都覆盖着我想要模糊的图像。这是过程。

  1. 我设置了一个FBO,其中包含我需要模糊的图像尺寸。
  2. 我正在使用以下功能设置Orthographic Projection(称为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
  5. 如果我绘制简单的白色四边形,则视图切换按预期工作。一个四元组正在Orthographic Projection中绘制,而另一个四元组在Perspective View中绘制。现在从FBO获取渲染纹理(让id为RENDEREDTEXTURE)。

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

    解决方案:张贴为答案。

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

    这可能是什么问题?

    请建议任何替代方法,以便在FBO中,只有我要处理的图像是可见的(我做了正投影),而在主场景中,处理后的图像就像从图像文件加载的任何其他纹理。

1 个答案:

答案 0 :(得分: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将纹理绑定到任何地方。