我正在处理Qt/openGL,在激活深度缓冲区时遇到了一些问题。
在每一帧中,我都会激活以下状态:glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);
另外,我检查了深度缓冲区的大小是否为空(glGetIntegrv(GL_depth_BITS)给了我24,这是预期值)然而,深度测试不起作用,一些应该通过深度测试丢弃的碎片也不起作用。
知道吗?
好的,所以问题解决了!如果有人遇到同样的问题,下面是我使用的方法。
我安装了GDebugger,并检查深度缓冲区确实没有被写入。我导出了openGL的当前状态,以下是与深度测试相关的状态:
GL_DEPTH_BIAS=0
GL_DEPTH_BITS=24
GL_DEPTH_CLEAR_VALUE=2147482496
GL_DEPTH_FUNC=GL_LESS
GL_DEPTH_RANGE={0, 1}
GL_DEPTH_SCALE=1
GL_DEPTH_TEST=TRUE
GL_DEPTH_WRITEMASK=FALSE
除了GL_DEPTH_WRITEMASK为假之外,一切似乎都很好。我用激活了它
glDepthMask(GL_TRUE);
一切都在运转!
EDIT:实际上,必须在每一帧上激活状态,才能正确渲染
我也遇到了同样的问题,在glClear函数中设置GL_DEPTH_BUFFER_BIT解决了我的问题。