2014-09-26 51 views
0

我正在Qt/openGL上工作,我有一些问题来激活我的深度缓冲区。Qt OpenGL:深度测试不起作用

在每一帧,我激活以下状态: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);

另外我检查了我的深度缓冲区的大小不是空(glGetIntegerv(GL_DEPTH_BITS)给我24,这是期望值) 但是深度测试不起作用,应该通过深度测试丢弃一些片段不是。

有什么想法?

+0

我想你可以确保你使用的Qt版本不使用ANGLE,因为这似乎导致深度测试问题相当多(只有当你在Windows上时)。 – PeterT 2014-09-26 19:20:47

+0

你提到启用深度测试并设置它的值,但忽略提及任何有关清除深度缓冲区的内容... – 2014-09-26 19:26:20

+0

嗨,谢谢你的答案。在我进行渲染之前,我在每一帧都使用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)命令。 – Zed 2014-09-26 19:29:24

回答

0

行,所以问题修复! 这是我使用的方法,如果有人得到相同的问题。

我安装了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); 

和一切工作!

编辑:其实,国家的激活必须在每帧进行正确渲染

+1

请注意,'DEPTH_WRITEMASK'的默认值是'TRUE'。所以如果你以前称之为'glDepthMask(GL_FALSE)',你只需要调用'glDepthMask(GL_TRUE)'。 – 2014-09-29 14:27:46

+0

在OpenGL中为True,但由于某些原因(可能与QML有关),初始化时该值为false。 – Zed 2014-11-25 14:33:36

0

我面临同样的问题,并设置GL_DEPTH_BUFFER_BIT在glClear函数解决我的问题。