我正在对framebuffer
对象进行两遍模糊。为了确保在FBO
中,整个场景都覆盖着我想要模糊的图像。这是过程。
FBO
,其中包含我需要模糊的图像尺寸。我正在使用以下功能设置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()
FBO
。取消绑定FBO
(返回屏幕)。Perspective View
setupPerspective(window's dimensions)
并将上面的glOrtho
替换为glFrustum
。如果我绘制简单的白色四边形,则视图切换按预期工作。一个四元组正在Orthographic Projection
中绘制,而另一个四元组在Perspective View
中绘制。现在从FBO
获取渲染纹理(让id为RENDEREDTEXTURE
)。
如果我将RENDEREDTEXTURE
绑定在主场景中的Orthographic Projection
,则会显示模糊的图像。如果我将其绑定到主场景中的Perspective View
,之前可见的白色四边形(在Perspective View
中绘制)将消失。
解决方案:张贴为答案。
注意:使用纹理时永远不要忘记MIPMAP生成。
这可能是什么问题?
请建议任何替代方法,以便在FBO
中,只有我要处理的图像是可见的(我做了正投影),而在主场景中,处理后的图像就像从图像文件加载的任何其他纹理。
答案 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
将纹理绑定到任何地方。