OpenGL(三)-深度测试

什么叫深度?

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

深度缓冲区作用?

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

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

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

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

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

  • 第一种方法:
    在第二次绘制时, 稍微偏移一点点解决这个问题.注意:必须非常小心确保Z值的间隙.(比如贴在飞机上的五角星会悬浮起来的风险)
  • 第二种方法:
    采用glPolygonOffset函数,使得可以调节片段的深度值.使深度值偏移而不产生悬浮.
glDisable(GL_DEPTH_TEST).png
glEnable(GL_DEPTH_TEST).png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容