【问题标题】:OpenGL: Loading rendered texture from Framebuffer objectsOpenGL:从帧缓冲区对象加载渲染纹理
【发布时间】:2014-07-08 11:57:10
【问题描述】:

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

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

    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 获取渲染纹理(让id 为RENDEREDTEXTURE)。

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

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

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

这可能是什么问题?

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

【问题讨论】:

  • 定义“不起作用”。你的 GPU 着火了吗?它会崩溃吗?结果不正确吗?
  • @BartekBanachewicz 更新信息。
  • 我假设上面的代码块也被打包在像setupPerspective这样的函数中。无论如何,您可以通过 gDEBugger 运行您的程序,并在再次使用透视图渲染之前验证确实所有需要的状态(矩阵、FBO)都设置回了所需的值。
  • @BartekBanachewicz 是的,是的。好吧,我其实有新的发展。问题不在于View 矩阵。我用setupOrthosetupPerspective,画了两个四边形。他们按预期绘制。当我将渲染的纹理绑定到正交投影中的四边形时,它会以我预期的模糊显示。但是在切换到透视矩阵之后,没有绘制纹理四边形,但是如果我绑定纹理就会消失。这可能是什么问题?
  • @BartekBanachewicz 我正在使用正交投影绘制到 FBO 中,以便整个帧缓冲区都被我想要处理的图像覆盖,当我将其绑定到我的主场景中时,它只感觉像是一个简单的加载图像.我希望你能得到我想要做的事情。

标签: opengl framebuffer perspectivecamera projection-matrix


【解决方案1】:

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

在切换回默认帧缓冲区后立即使用以下 sn-p。

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

然后您可以像往常一样使用YOUR_FINAL_RENDERED_TEXTURE_ID 将此纹理绑定到任何地方。

【讨论】:

  • 从事物的声音(模糊帧缓冲区)来看,您首先不需要 mipmap。它们会增加 1/3 的存储大小,并花费不必要的处理时间来生成。更简单的解决方案是使用更合理的缩小过滤器,例如 GL_NEARESTGL_LINEAR,而不是默认的 GL_NEAREST_MIPMAP_LINEAR
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多