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 对象添加到 SurfaceView 相机中?