首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fbo中使用默认的帧缓冲区深度缓冲区

在fbo中使用默认的帧缓冲区深度缓冲区
EN

Stack Overflow用户
提问于 2018-12-10 13:55:16
回答 2查看 1.2K关注 0票数 0

我想实现一个后处理的轮廓效果,在我的游戏中的一些演员,我希望大纲被其他演员更接近相机。为此,我计划在FBO和大纲着色器中呈现应该是大纲的元素。若要丢弃被遮挡的像素,我希望使用默认框架缓冲区的深度缓冲区。

我阅读和搜索,但我没有找到如何正确地使用默认的帧缓冲区深度缓冲区在另一个帧缓冲区,如何复制或无论如何使用默认深度缓冲区信息的fbo。

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 15:00:14

我阅读和搜索,但我没有找到如何正确地使用默认的帧缓冲区深度缓冲区在另一个帧缓冲区

不幸的是,在OpenGL中没有办法做到这一点。

或如何复制或无论如何使用fbo上的默认深度缓冲区信息。

这很容易。只需创建一个具有适当深度附件的FBO (无论是纹理还是渲染缓冲区),并将默认深度缓冲区布利特给它:

代码语言:javascript
复制
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, your_target_fbo);
glBlitFramebuffer(0,0,width,height,0,0,width,height,GL_DEPTH_BUFFER_BIT, GL_NEAREST);

然而,由于您做了一些后处理无论如何,它可能是一个很好的选择,将初始场景渲染为FBO,并重复使用相同的深度缓冲区在不同的FBO。

票数 2
EN

Stack Overflow用户

发布于 2018-12-10 14:59:38

不幸的是,不可能将默认的深度缓冲区附加到FBO或从着色器读取它。

您可以将默认的框架缓冲区复制到呈现缓冲区(或者附加文本的框架缓冲区,请参阅glBlitFramebuffer),但这可能比较慢。

另一种选择是先将整个场景呈现给FBO (颜色+深度),然后使用轮廓着色器从该FBO读取,将结果与大纲计算结合起来,并将最终结果写入默认的框架缓冲区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53707169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档