OpenGL学习笔记十二(深度测试)
需要深度测试的原因
当我们渲染多个物体时,这多个物体之间存在互相遮挡的关系,被遮挡的物体的部分将不可见,也就是它离相机更远,为了告诉计算机被遮挡的物体不需要渲染,我们就需要对物体上的点做深度测试,检测它是否需要渲染。
为了实现上述的检测,就需要深度缓冲,简单而言就是存储物体上点深度值的数组,这个数组一开始值为0,当目前渲染的物体的深度值大于缓冲区中存储的深度值时,就将这个值写入缓冲区,同时通过深度测试,如果与此相反,深度值小于缓冲区中的深度值,就是未通过深度测试,且不写入缓冲区,淘汰掉这个点(不做渲染)。
当然,比较函数可以自己定义,接下来会做介绍。
深度测试函数
深度测试主要有两个步骤,
- 对比缓冲区中的值,判断是否通过测试(Z Test)
- 是否将该值写入缓冲区(Z Write)
深度测试函数默认关闭,开启深度测试函数的方法:
glEnable(GL_DEPTH_TEST);
深度写入函数的控制开关:
glDepthMask(GL_FALSE

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

被折叠的 条评论
为什么被折叠?



