什么叫深度?
所谓深度,就是在坐标系中,像素Z坐标距离观察者的距离.
观察者可以在任何位置.
OpenGL会有专门一块缓存区来存放Z值, 即深度缓冲区.
深度缓冲区作用?
一般情况下,我们绘制图形时,后面绘制的会覆盖前面的图形.这样就会产生一个性能问题:就是遮盖部分,先绘制的会被覆盖,那么这块区域就是无意义的绘制.
深度测试就是用来解决这个问题的.
它是如何处理的呢?有了深度缓冲区之后,绘制的时候会检查Z值,靠近观察者的不覆盖, 远离观察者的被覆盖,而不是靠绘制顺序来决定.
如何使用深度缓冲区测试?
glEnable(GLDEPTHTEST);开启之后,就会先测试深度值再绘制
默认情况下, Z值小的会被覆盖
如果观察者,在Z轴的正方向,Z值大则靠近观察者
如果观察者,在Z轴的负方向,Z值小则靠近观察者
如何解决深度值相同,造成的冲突问题?
- 第一种方法:
在第二次绘制时, 稍微偏移一点点解决这个问题.注意:必须非常小心确保Z值的间隙.(比如贴在飞机上的五角星会悬浮起来的风险) - 第二种方法:
采用glPolygonOffset函数,使得可以调节片段的深度值.使深度值偏移而不产生悬浮.