gpt4 book ai didi

OpenGL,如何像平常深度缓冲区一样使用帧缓冲区中的深度缓冲区

转载 作者:行者123 更新时间:2023-12-01 22:35:47 25 4
gpt4 key购买 nike

我有帧缓冲区,带有深度组件和 4 个带有 4 个纹理的颜色附件

我在其中绘制了一些内容,然后取消绑定(bind)缓冲区,使用 4 个纹理用于​​片段着色器(延迟光照)。稍后我想使用帧缓冲区中的深度缓冲区在屏幕上绘制更多内容,这可能吗?

我尝试再次绑定(bind)帧缓冲区并指定glDrawBuffer(GL_FRONT),但它不起作用。

最佳答案

就像 Nicol 已经说过的,您不能直接使用 FBO 深度缓冲区作为默认帧缓冲区的深度缓冲区。

但是您可以使用EXT_framebuffer_blit将FBO的深度缓冲区复制到默认帧缓冲区。扩展(自 GL 3 起应该是核心):

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height,
GL_DEPTH_BUFFER_BIT, GL_NEAREST);

如果不支持此扩展(我怀疑当您已经有 FBO 时),您可以为 FBO 的深度附件使用深度纹理,并使用纹理四边形和简单的通过片段着色器将其渲染到默认帧缓冲区写入gl_FragDepth。尽管这可能比直接将其传输慢。

关于OpenGL,如何像平常深度缓冲区一样使用帧缓冲区中的深度缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com