CAD图形渲染之深度(Depth)

本文探讨了图形渲染中的深度概念及其在CAD模型显示中的应用,特别是Z-Fighting现象。深度值计算涉及到OpenGL的深度缓冲区和非线性深度,导致面与边显示问题。为了解决这一问题,文章提出了包括避免重合、使用glPolygonOffset、调整深度缓冲区精度、缩小视锥体范围、采用log深度等方法。此外,还提到了深度在图形后处理中的重要性,如深度纹理在ShadowMap和AO计算中的应用。最后,介绍了作者正在开发的国产CAD图形引擎Base3,它支持多种着色模式和文件格式,以及与QT等图形界面的集成。
摘要由CSDN通过智能技术生成

大家好,今天我们来聊聊图形渲染中的深度。深度,咋一看,蛮抽象的一个概念,但实际却处处存在于我们生活中。比如现在很火的无人驾驶激光雷达的定位,深度相机感知,以及各种传感器深度测量等,都与深度相关。同样的,在图形渲染中,深度的应用也很广。首先,我们看看图形渲染中一个常见的现象,在我们显示CAD模型时,很多时候需要同时显示面和边。这个时候,我们经常会发现边的显示是断断续续的,显示不完整。如下图所示:

图片

       这种显示效果是很糟糕的,我们称这种现象叫着Z-Fighting。Z-Fighting顾名思义就是指边和面的z坐标之间互相冲突了,造成这种现象的主要原因是因为面和边离得很近,两者的深度值很接近,正常的深度剔除没办法保证绘制的前后顺序。接下来我们就来讲讲为什么会这样,以及在开发时,怎样避免这种问题。

       1. 深度值计算

        在讲深度值之前,我们先回顾一下深度值是怎么使用的。上一篇我们在讲透明渲染时也提到过。OpenGL渲染时有个深度缓冲区,在进行绘制每个对象时,对于光栅化后的对象像素,计算每个像素的深度,大于缓冲区深度的像素不绘制,小于深度缓冲区的像素才进行绘制,并把当前深度值写入到缓冲区中。

        世界坐标系中的点,经过模型变换,视图变换、投影变换等最终转换成NDC坐标中的点,NDC坐标系中点的z值就是我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值