美文网首页
OpenGL中的深度缓冲区和深度测试

OpenGL中的深度缓冲区和深度测试

作者: 天涯寻梦人 | 来源:发表于2020-07-15 00:00 被阅读0次

    深度是什么

           说到深度缓冲区,首先我们先来理解一下深度的含义,如果将一个立方体的游泳池比作一个3D图形,长为X轴,宽为Y轴,那深度就是Z轴,在我们所说的深度其实就是Z轴,对比于渲染,如果是一个2D图像,那我们可以不用考虑深度的问题,如果是3D图形或者多图层叠加,为了更好的让它给我们带来更好的视觉体验体验,那我们就需要区分渲染的层次,我们需要知道哪些图层距离我们眼睛远,哪些距离我们眼睛近,所以深度就是用来表示距离观察者的位置,用于区分图层的层次关系。

    深度缓冲区

            首先深度缓冲区其实就是一块内存区域,专门存储每个像素点(绘制在屏幕上的)深度值,深度值其实就是Z轴的坐标值,当|Z|越大(Z轴有正负轴),则离观察者(比如摄像机)越远,远近带给我们的视觉体验是不一样的,一般情况下距离观察者的位置越远,在我们眼睛中的成像越小,距离越近在我们眼睛中的成像越大,就好比为啥我们能看到太阳和月亮却无法看到完整的地球一样,角度不同。

    下面给大家带来一张图,可能更为直观点

    如图:如果把X,Y轴看成我们的手机屏幕,那么Z轴就是我们所说的深度,在不使用深度测试的时候,如果我们先绘制一个离我们比较近的物体,再绘制距离比较远的物体,那么因为距离比较远的这个后绘制,就会把距离近的物体覆盖掉。但是有了深度缓冲区之后,会植物体的顺序就不那么重要了,因为只要存在深度缓冲区,OpenGL都会把像素的深度值写到缓冲区中,除非调用glDepthMask(GL_FALSE).来禁⽌止写入。

    说到深度测试那深度测试又是什么呢?

    深度测试

            深度缓冲区(DepthBuffer)和颜色缓冲区(ColorBuffer)是对应的,颜色缓冲区是存储像素的颜色信息,而深度缓冲区存储像素的深度信息。在确定是否绘制一个物体表面的时候,首先要将表面对应的像素深度值与当前深度缓冲区中的值进行比较,如果大于深度缓冲区的值,则丢弃这部分。否则利用这个像素对应的深度值和颜色值分别更新深度缓冲区和颜色缓冲区,这个过程称为深度测试

    相关文章

      网友评论

          本文标题:OpenGL中的深度缓冲区和深度测试

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