美文网首页
OpenGL 深度测试

OpenGL 深度测试

作者: AndyGF | 来源:发表于2020-07-12 15:37 被阅读0次

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

问题场景, 问题产生原因, 解决方案及原理, 我们将通过绘制一个三维图形作为示例来讲解. 具体示例代码在本篇文章中:OpenGL 正背面剔除

旋转甜甜圈:

在上篇解决正背面显示错误问题时, 开启了正背面剔除, 解决了背面显示问题, 但是继续旋转, 会发现, 离我们较近的外侧和离我们较远的内侧, 都是正面, 发生了重叠, 按道理, 较远的应该被遮挡住了, 不应该被看到, 但是这些面都是存在的, 并没有被丢弃掉. 我们也没有 告诉 OpenGL 怎么处理这种情况, 所以 OpenGL 就把所有的面都绘制出来了, 就出现了这种问题.

  • 甜甜圈开启正背面剔除新问题.png

同样的, OpenGL 也有对应的解决方案, 就是开启深度测试.
深度测试就是检测三维图形的点与观察者的距离(相对Z值), 如果检测到新来的距离更近, 就丢弃原来较远的点, 使用最新的点. 这样, 如上图离观察者远的点, 即被遮挡的点就不会被绘制出来.

开启深度测试代码

glEnable(GL_DEPTH_TEST);

关闭深度测试代码

glDisable(GL_DEPTH_TEST);

开启深度测试后效果

  • 甜甜圈深度测试.png

相关文章

  • 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/ssogcktx.html