美文网首页
OpenGL深度测试理解

OpenGL深度测试理解

作者: 魔杰西 | 来源:发表于2020-07-14 12:24 被阅读0次

1.深度测试在什么情况下会用到

        我们在使用OpenGL绘制出一个甜甜圈样式的立体图形,在旋转时,会出现前后两个部分重叠,此时OpenGL分辨不出哪个图层在前,哪个图层在后,此时就会出现甜甜圈被啃了一口的现象,这时候我们就要使用深度测试来解决。另外深度测试还能用于解决隐藏面消除问题。

2.深度测试的一些概念

        深度:在OpenGL的坐标系中,像素点的Z坐标距离观察者的距离。

        深度缓冲区:用于存储屏幕上图形的每个像素点的深度值,它存储在显存中。

        深度缓存原理:将深度值与图形的每个像素点一一对应并将深度值存储到深度缓冲区中,缓存区的范围是0~1之间的浮点数值,默认深度为1.0,我们在绘制图形之前都会先清空深度缓存区。

        深度测试:深度缓冲区跟颜色缓冲区是对应的,深度缓冲区存储像素的深度信息,颜色缓冲区存储像素的颜色信息,在决定是否绘制一个图形的表面时,首先要将表面对应的像素的深度值与当前深度缓冲区中的值进行比较,如果大于深度缓冲区中的值,则丢弃这部分,否则将这个像素点对应的深度值和颜色值更新到对应的缓冲区内,这个过程我们称之为深度测试。深度测试是有规则的,我们可以通过glDepthFunc(GLenum func)这个函数修改他的测试规则。

3.深度测试的风险

        Z-fighting:开启深度测试后,由于深度缓冲区的精度限制,对于两个深度值相差非常小的情况下,OpenGL可能无法正确判断谁大谁小,这时绘制出的画面就有可能出现交错显示。

        针对Z冲突问题,OpenGL提供“多边形偏移”的方法来解决他。原理就是在产生Z-fighting的图层之间产生一个微妙的间隔,这样就能正确判断深度的大小。通常使用的深度缓冲区是24位的,现在一些硬件使用的是32或64位的缓冲区,精确度大大提高,这也是现在我们很少见到Z-fighting现象的原因。

             

相关文章

  • OpenGL深度测试理解

    1.什么是深度测试 深度 深度在OpenGL里面表示世界坐标系中像素点的Z轴距离观察者的距离。如下图所示观察者位置...

  • OpenGL深度测试理解

    1.深度测试在什么情况下会用到 我们在使用OpenGL绘制出一个甜甜圈样式的立体图形,在旋转时,会出现前后...

  • 13. opengl高级-深度测试

    1. opengl深度测试原理,“测试”理解为“检测规则”更容易懂 关闭深度测试,后绘制的团会覆盖先绘制的纹理: ...

  • OpenGL:背面剔除和深度测试

    OpenGL:背面剔除和深度测试

  • 五、OpenGL深度测试理解

    深度的相关概念 什么是深度? 像素点的深度其实就该像素点在3D世界中距离摄像机的距离,Z轴距离。 什么是深度缓冲(...

  • 六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合

    OpenGL + OpenGL ES +Metal 系列文章汇总 深度测试 在上一篇五、OpenGL 渲染技巧:正...

  • OpenGL -- 对深度测试的理解

    深度 深度,就是像素点在3D世界中距离摄像机的距离,即Z值。 深度缓冲区 深度缓存区,就是⼀块内存区域,专门存储每...

  • OpenGL 深度测试

    什么叫深度? 所谓深度,就在坐标系中,像素Z坐标距离观察者的距离.观察者,可以在任何位置.OpenGL 会有专门有...

  • OpenGL 深度测试

    正背面剔除遗留问题 进行了背面剔除之后,当旋转到侧边时,出现了缺口的现象. 当环旋转到侧边时观察者和环的关系如上图...

  • OpenGL深度测试

    一、概念 深度:深度其实就是该像素点在3D世界中距离摄像机的距离,Z值。 深度缓冲区:深度缓存区,就是一块内存区域...

网友评论

      本文标题:OpenGL深度测试理解

      本文链接:https://www.haomeiwen.com/subject/obdgcktx.html