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