5

我有一个深度缓冲区,正在屏幕上渲染一个圆锥。它有效,但后来我意识到我忘记了深度测试的标准启用,当我打开它时,现在什么都没有出现。

我的场景中只有一个物体,一个圆锥体,所以它前面没有其他东西。

深度缓冲区设置良好:

glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                              GL_DEPTH_ATTACHMENT,
                              GL_RENDERBUFFER,
                              m_depthRenderbuffer);

我绑定渲染缓冲区:

glBindRenderbuffer(GL_RENDERBUFFER, m_renderbuffer);

然后我渲染圆锥:

在此处输入图像描述

(我对这个凌乱的锥体的实验是我稍后将要问的另一个问题的主题)。

但是,一旦我在创建深度缓冲区并绑定渲染缓冲区后添加下一行:

glEnable(GL_DEPTH_TEST)

...然后我的锥体神奇地消失了。屏幕上什么都没有,甚至连一个小点都没有。

为什么会这样?

4

2 回答 2

7

使用GL_DEPTH_TEST时,

glClear(GL_DEPTH_BUFFER_BIT)必须在渲染之前调用,以便正确初始化深度缓冲区。

于 2013-03-11T08:44:28.720 回答
0

正如fuzzyTew 在评论中提到的(2017 年4 月26 日),有些人可能会遇到将近剪裁距离设置为0 的问题。我将其设置为0.01 * cam_distance,一切都很好。

[...] 我的近剪裁距离设置为 0。结果它需要是正的。——fuzzyTew 2017 年 4 月 26 日 20:25

于 2020-10-01T21:26:09.450 回答