当前位置: 首页 > 知识库问答 >
问题:

Qt OpenGL:深度测试不工作

甘祺
2023-03-14

我正在使用Qt/openGL,激活深度缓冲区时遇到了一些问题。

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

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

知道吗?

共有2个答案

万知
2023-03-14

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

靳举
2023-03-14

好的,问题解决了!如果有人遇到同样的问题,这是我使用的方法。

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

一切正常!

编辑:实际上,状态的激活必须在每一帧完成才能正确渲染

 类似资料:
  • 在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了

  • 大家都知道立方体的顶点数据经过顶点着色器、光栅、片元着色器等渲染管线单元处理后会得到立方体每个面的片元数据, 每个片元不仅包含RGB像素值,还有透明度分量A,片元的深度值Z,屏幕坐标(X,Y)等数据。 屏幕坐标(X,Y) 屏幕坐标指的是每一个片元的像素值在显示器canvas画布上的显示位置,如果一个网页上有多个canvas画布,或者打开多个包含canvas画布的网页窗口, 每一个引入WebGL的c

  • 我试图做深度链接,这样当有人从移动浏览器打开链接时,它要么打开应用程序,如果安装了,要么打开播放商店链接下载应用程序。 以下是我的URI: 当我在Android系统上的Mozilla Firefox应用程序中输入这个时,如果安装了我的应用程序,它会打开该应用程序;如果未安装,它会打开play store链接。但是,当我在Chrome中输入相同的内容时,它只会进行谷歌搜索,而不是打开应用程序或pla

  • 嗨,当我运行我的测试通过一个计划的java代码,并使用WebDriver的关闭()方法它是关闭各自的浏览器实例。但是,当我在testNG类中使用driver.close()时,在任何@后注释中,如 然后它不会关闭浏览器实例。请尝试以下两个代码段:TestNGSnippet: 简单片段: 它是一个bug在testNG。注意:driver.quit()正在工作,但我不能使用它,因为当我并行运行我的测试

  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依

  • 我有一些问题与我写的一个opengl应用程序。 上面的代码将未知错误打印到控制台,当我单步执行时,我得到1280代码。我已经在khronos页面上查看了glEnable,并且有enum,那么这为什么会引起问题呢?我查过错误代码,它是一个无效的枚举,但这怎么可能呢?