美文网首页
深度测试

深度测试

作者: hie | 来源:发表于2018-12-04 13:59 被阅读0次

1、深度

        深度其实就是该像素点在3D世界中距离摄像机的距离,Z值

2、深度缓冲区

        深度缓存区,就是一块内存区域,专⻔存储着每个像素点(绘制在屏幕上的)深度值.深度值(Z值)越大,则离摄像机就越远.

3、深度缓冲区

        在不使⽤用深度测试的时候,如果我们先绘制一个距离比较近的物体,再绘制距离较远的物体,则距离远的位图因为后绘制,会把距离近的物体覆盖掉. 有了深度缓冲区后,绘制物体的顺序就不那么􏰁 要的. 实际上,只要存在深度缓冲区,OpenGL 都会把像素的深度值写⼊到缓冲区中. 除非调用glDepthMask(GL_FALSE).来禁止写入.

4、深度测试

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

5、使用深度测试

        深度缓冲区,一般由窗口管理理系统,GLFW创建.深度值一般由16位,24位,32位值表示. 通常是24位,数位越高,深度精确度更好.

5.1、开启深度测试:

         glEnable(GL_DEPTH_TEST);

5.2、在绘制场景前,清除颜色缓存区、深度缓冲:                

          glClearColor(0.0f,0.0f,0.0f,1.0f);        

          glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

         清除深度缓冲区默认值为1.0,表示最大的深度值,深度值的范围为(0,1)之间. 值越小表示越靠近观察者,值越大表示越远离观察者

5.3、指定深度测试判断式

        //指定深度测试判断模式

        void glDepthFunc(GLEnum mode);

        默认 GL_LESS 模式。

5.3、打开/阻断 深度缓存区写入

        void glDepthMask(GLBool value);

        value : GL_TURE 开启深度缓冲区写入; 

        GL_FALSE 关闭深度缓冲区写⼊

demo

相关文章

网友评论

      本文标题:深度测试

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