我有一个深度缓冲区,正在屏幕上渲染一个圆锥体。它有效,但后来我意识到我忘记了深度测试的标准启用,当我打开它时,现在什么也没有出现。
我的场景中只有一个物体,一个圆锥体,所以它前面没有其他东西。
深度缓冲区设置良好:
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER,
m_depthRenderbuffer);
我绑定渲染缓冲区:
glBindRenderbuffer(GL_RENDERBUFFER, m_renderbuffer);
然后我渲染圆锥体:
(我对这个凌乱圆锥体的实验是我很快就会问的另一个问题的主题)。
但是,一旦我在创建深度缓冲区并绑定渲染缓冲区后添加下一行:
glEnable(GL_DEPTH_TEST)
...然后我的圆锥体神奇地消失了。屏幕上什么也没有,连一个小点都没有。
为什么会这样?
使用GL_DEPTH_TEST时,
glClear(GL_DEPTH_BUFFER_BIT) 必须在渲染之前调用,以便正确初始化深度缓冲区。
正如 fuzzyTew 在评论中提出的(2017 年 4 月 26 日),有些人可能会遇到近裁剪距离设置为 0 的问题。我将其设置为 0.01 * cam_distance,一切都很顺利。
[...] 我的近剪裁距离设置为 0。事实证明它需要为正值。 – fuzzyTew 2017 年 4 月 26 日 20:25
我也遇到过同样的问题,原因是在调用
glDepthMask
之前将 GL_FALSE
设置为 glClear(GL_DEPTH_BUFFER_BIT)
。
因此,除了上述评论/答案之外,请确保在清除深度缓冲区之前将 glDepthMask
设置为 GL_TRUE
。