OpenGL(三)-深度测试

什么叫深度?

所谓深度,就是在坐标系中,像素Z坐标距离观察者的距离.
观察者可以在任何位置.
OpenGL会有专门一块缓存区来存放Z值, 即深度缓冲区.

深度缓冲区作用?

一般情况下,我们绘制图形时,后面绘制的会覆盖前面的图形.这样就会产生一个性能问题:就是遮盖部分,先绘制的会被覆盖,那么这块区域就是无意义的绘制.
深度测试就是用来解决这个问题的.
它是如何处理的呢?有了深度缓冲区之后,绘制的时候会检查Z值,靠近观察者的不覆盖, 远离观察者的被覆盖,而不是靠绘制顺序来决定.

如何使用深度缓冲区测试?

glEnable(GLDEPTHTEST);开启之后,就会先测试深度值再绘制
默认情况下, Z值小的会被覆盖

如果观察者,在Z轴的正方向,Z值大则靠近观察者
如果观察者,在Z轴的负方向,Z值小则靠近观察者

如何解决深度值相同,造成的冲突问题?

  • 第一种方法:
    在第二次绘制时, 稍微偏移一点点解决这个问题.注意:必须非常小心确保Z值的间隙.(比如贴在飞机上的五角星会悬浮起来的风险)
  • 第二种方法:
    采用glPolygonOffset函数,使得可以调节片段的深度值.使深度值偏移而不产生悬浮.

glDisable(GL_DEPTH_TEST).png

glEnable(GL_DEPTH_TEST).png

谢谢你赏我糖果吃