【发布时间】:2014-07-08 11:57:10
【问题描述】:
我正在对framebuffer 对象进行两次模糊处理。为了确保在FBO 中,整个场景都被我试图模糊的图像所覆盖。这是过程。
- 我已经设置了一个
FBO,其中包含我需要模糊的图像尺寸。 -
我正在使用以下函数(称为
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()
- 使用此投影绘制到
FBO。取消绑定FBO(返回屏幕)。 - 通过调用切换到
Perspective ViewsetupPerspective(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矩阵。我用setupOrtho和setupPerspective,画了两个四边形。他们按预期绘制。当我将渲染的纹理绑定到正交投影中的四边形时,它会以我预期的模糊显示。但是在切换到透视矩阵之后,没有绘制纹理四边形,但是如果我绑定纹理就会消失。这可能是什么问题? -
@BartekBanachewicz 我正在使用正交投影绘制到 FBO 中,以便整个帧缓冲区都被我想要处理的图像覆盖,当我将其绑定到我的主场景中时,它只感觉像是一个简单的加载图像.我希望你能得到我想要做的事情。
标签: opengl framebuffer perspectivecamera projection-matrix