美文网首页
OpenGL 深度测试

OpenGL 深度测试

作者: CC老师_HelloCoder | 来源:发表于2018-07-06 22:04 被阅读0次

什么叫深度?

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

每个像素的上的Z值!!!!!

深度缓冲区作用?

一般情况下,我们绘制图形时,后面绘制的会覆盖前面的图形.一般绘制的顺序先后面再前面.
产生一个性能问题!!就是遮盖部分,先绘制的会被覆盖.这没有任何意义的绘制!

深度测试就是用来解决这个问题的!!!

它是如何处理的?
有了深度缓冲区之后,绘制的时候会检查Z,靠近观察者的覆盖.而不是靠绘制顺序来决定的.

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

为什么要测试?一旦开启之后,就会先测试深度值在绘制

glEnable(GL_DEPTH_TEST);
默认情况下,Z值小的情况下回被覆盖.

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

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

  • 第一种方法:
    在第二次绘制时,稍微偏移一点点解决这个问题.注意:必须非常小心确保Z值的间隙.

    贴在飞机上的五角星会悬浮起来的风险~

  • 第二种方法:
    采样glPolygonOffset 函数.使得可以调节片段的深度值.使得深度值偏移而不产生悬浮.

转载请备注原文出处,不得用于商业传播--CC老师

相关文章

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

    OpenGL:背面剔除和深度测试

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

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

  • 13. opengl高级-深度测试

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

  • OpenGL 深度测试

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

  • OpenGL 深度测试

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

  • OpenGL深度测试

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

  • OpenGL深度测试

    在上一篇OpenGL正背面剔除中提到了正背面剔除的弊端:如果前后两个点都是正面或是背面,这时OpenGL无法区分哪...

  • OpenGL 深度测试

    OpenGL 在绘制三维立体图形时, 如果不做处理, 就会产生一些不符合常理或者逻辑问题, 本次讲述被遮挡面显示...

  • OpenGL中ZFighting、颜色混合

    接上篇OpenGL深度测试已经明白处理前后重叠造成缺口问题的解决方案是使用深度测试 glEnable(GL_DEP...

  • NDK OpenGLES3.0 开发(十):深度测试

    该原创文章首发于微信公众号:字节流动 深度测试 OpenGL 深度测试是指在片段着色器执行之后,利用深度缓冲所保存...

网友评论

      本文标题:OpenGL 深度测试

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