OpenGL没有将最近的片段绘制到相机

Posted

技术标签:

【中文标题】OpenGL没有将最近的片段绘制到相机【英文标题】:OpenGL not drawing nearest fragment to the camera 【发布时间】:2018-11-10 19:50:09 【问题描述】:

我有一个场景,里面有一个茶壶网。 我正在使用一个帧着色器来使用值等于 10 的光源来照亮它。

当场景渲染到默认帧缓冲区时,一切似乎都很好。

但是,如果它在自定义帧缓冲区中呈现,结果如下所示:

OpenGL 似乎更喜欢定义在网格“末端”的三角形。

我希望帧缓冲区包含16bits floats,这样我就可以存储大于1.0 的值。

对不起我的英语。

【问题讨论】:

可能您没有将深度缓冲区附加到帧缓冲区。 哦。你也许是对的。我没有想到。我马上就做。 @Rabbid76,我刚刚添加并附加了一个深度渲染缓冲区到我的帧缓冲区,现在我没有得到任何结果 好吧,我刚刚发现我做错了什么:我忘记使用 glClear(GL_COLOR_BUFFER_BIT | **GL_DEPTH_BUFFER_BIT**); 清除绘图调用中的深度缓冲区 如果您在问题中添加任何代码,可能有人会指出这一点。请阅读How to create a Minimal, Complete, and Verifiable example。 【参考方案1】:

我忘记添加深度渲染缓冲区并使用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 清除它

为此,请添加:

GLuint rboDepth;
glGenRenderbuffers(1, &rboDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rboDepth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width(), height());
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboDepth);

绑定到您的帧缓冲区实现。

【讨论】:

以上是关于OpenGL没有将最近的片段绘制到相机的主要内容,如果未能解决你的问题,请参考以下文章

在OpenGL中绘制一个相机对齐的圆

用于片段着色器的 OpenGL GLSL 绑定采样器

如何将 OpenGL 对象添加到 SurfaceView 相机中?

Android - 在相机顶部绘制 OpenGL 图像

OpenGL - C++:Opengl Development Cookbook 中的免费相机

OpenGL 片段着色器未写入 fbo 颜色缓冲区