OpenGL 深度以及深度缓冲区

什么是深度

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

什么是深度缓冲区

深度缓冲区,就是一块内存区域,专门存储每个像素点(绘制在屏幕上的点)深度值、深度值(z值)越大,离摄像机就越远

为什么需要深度缓冲区

在不使用深度缓冲区测试的时候,如果我们先绘制一个距离比较近物体,再绘制一个距离比较远的物体,那么后绘制的物体就会挡住前面绘制的物体,但是有了深度缓冲区之后,物体的绘制顺序就不那么重要了

深度测试:

深度缓冲区和颜色缓冲区是一一对应的,颜色缓冲区存储像素的颜色信息。而深度缓冲区储存像素的深度信息,在决定是否绘制一个物体表面时,首先要将表面对应的像素的深度值与当前的深度缓冲区的值进行比较。如果大于深度缓冲区的值,说明是离得比较远的,则丢弃这部分,否则利用这个像素对应的深度只和颜色值,分别更新深度缓冲区和颜色缓冲区。这个过程叫深度测试


ZFighting 闪烁问题的原因

因为开启深度测试后,OpenGL就不会再去绘制模型被遮挡的部分,这样实现的显示更加真实,但是由于深度缓冲区精度的限制对于深度相差非常小的情况下(例如在同一平面上进行2次绘制),OpenGL就可能出现不能正确判断两者的深度值,会导致深度测试的结果不可预测,显示出来的现象是交错闪烁,也就是像个画面,交错出现
在这里插入图片描述

使用深度测试:

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

开启深度测试:

glEnable(GL_DEPTH, TEST);

在绘制场景时,清除颜色缓存区,深度缓冲

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR, BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值