OpenGL -- 对深度测试的理解

 我来答
科创17
2022-06-15 · TA获得超过5872个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:170万
展开全部

例如上图中两个图形混合 混合部分会进行重新渲染

深度缓冲区和颜⾊缓存区是对应的。颜⾊缓存区存储像素的颜⾊信息,而深度缓冲区存储像素的深度信息。

在决定是否绘制⼀个物体表⾯时,首先要将表面对应的像素的深度值与当前深度缓冲区中的值进⾏⽐较。如果大于深度缓冲区中的值,则丢弃这部分;否则利⽤这个像素对应的深度值和颜⾊值,分别更新深度缓冲区和颜色缓存区。这个过程称为深度测试。

fa和near是提供到投影矩阵设置可见视图截锥的远近值。

非线性深度缓存
在实践中可以减少使用这样的线性深度缓冲区。正确的投影特性的非线性深度方程是和1/z成正比,由于非线性方程和1/z成正比,例如1.0和2.0之间的z值,将变为1.0到0.5之间,将z非常小的时候给了我们很高的精度。方程式如下图

在深度缓冲区的值不是线性的屏幕空间(它们在视图空间投影应用之间是线性)。值为0.5的深度缓冲区并不意味着该对象的z值投影上边的平头解体的中间;顶点的z值是实际上徐娘当接近平面!可以看到z值和产生深度缓冲区的值在下列图标中的线性关系

屏幕空间的深度值是非线性如他们在z很小的时候有很高的精度,较大的z值有较低的精度。该片段的深度值会迅速增加,几乎所有顶点的深度值接近1.0。如果我们⼩小⼼心的靠近物体,你最终可能会看到的色彩越来越暗,意味着它们的值越来越小,这清楚地表明深度值的非线性特性。近的物体相对远的物体对的深度值比对象较大的影响。只移动几英寸就能让暗色完全变亮。但是我们可以让深度值变换回线性。要实现这一⽬标我们需要让点应⽤用投影变换逆的逆变换,成为单独的深度值的过程。这意味着我 们必须⾸首先􏰁新变换范围 [0,1] 中的深度值为单位化的设备坐标(normalized device coordinates)范围内 [-1,1] (裁剪空间(clip space))。然后,我们想要反转⾮非线性⽅方程 。

开启深度测试

在绘制场景前,清除颜⾊缓存区,深度缓冲。清除深度缓冲区默认值为1.0。

指定深度测试判断模式

深度缓冲区写入开关

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
富港检测技术(东莞)有限公司_
2024-05-27 广告
ISTA3E程序是对相同产品的集合包装的综合模拟性能测试,集合包装件被定义为将一个产品、多个产品或包装件放置在滑板或托盘上,固定在一起或是作为一个单元运输。例如:一台机器由带瓦楞底托的托盘上、瓦楞侧围、顶盖包装,用缠绕膜缠绕在托盘上。用于评... 点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式