OpenGL学习笔记十二(深度测试)

本文深入解析OpenGL中的深度测试原理,包括深度缓冲的概念、深度测试函数的使用、比较函数的自定义,以及如何清除深度缓存。同时,探讨了深度测试的精确度问题和深度冲突的解决方案。

需要深度测试的原因

当我们渲染多个物体时,这多个物体之间存在互相遮挡的关系,被遮挡的物体的部分将不可见,也就是它离相机更远,为了告诉计算机被遮挡的物体不需要渲染,我们就需要对物体上的点做深度测试,检测它是否需要渲染。
为了实现上述的检测,就需要深度缓冲,简单而言就是存储物体上点深度值的数组,这个数组一开始值为0,当目前渲染的物体的深度值大于缓冲区中存储的深度值时,就将这个值写入缓冲区,同时通过深度测试,如果与此相反,深度值小于缓冲区中的深度值,就是未通过深度测试,且不写入缓冲区,淘汰掉这个点(不做渲染)。
当然,比较函数可以自己定义,接下来会做介绍。

深度测试函数

深度测试主要有两个步骤,

  1. 对比缓冲区中的值,判断是否通过测试(Z Test)
  2. 是否将该值写入缓冲区(Z Write)

深度测试函数默认关闭,开启深度测试函数的方法:

glEnable(GL_DEPTH_TEST);

深度写入函数的控制开关:

glDepthMask(GL_FALSE
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值