-->

含义和glPolygonOffset因子参数的用法(Meaning and usage of the

2019-08-02 20:43发布

我难以理解的第一个参数的含义glPolygonOffset功能。

void glPolygonOffset(GLfloat  factor, GLfloat units);

官方文件说,因素

指定用于创建一个可变深度为每个多边形偏移的比例因子。

然后

它是从相应的顶点的深度值插值之后的每个片段的深度值将被抵消。 偏移量的值是因子×DZ + R×单元,其中DZ是在相对于多边形的屏幕区域深度的变化的测量,和r是保证产生一个分辨对于给定的偏移量的值最小实现。

我明白了什么runit的。 我不明白的是什么DZ的,即什么是由“深度价值的多边形的屏幕面积变化的测量”的意思,为什么我会永远需要系数设置为0以外的任何东西。

如果我要被抵消我的线框所有我需要的是添加/深度值substact几个单位/,不是吗? 有什么因素参数(和文件中提到的DZ)的意义,目的和用途的例子吗?

Answer 1:

我要在这里承认有些无知,但我发现这篇文章这也解释了它。 他们说:

为了达到高亮固体物体的一个很好的渲染没有视觉假象,你可以添加一个正偏移到固体物体(推远离你)或负偏移到线框(向外拉出)。 最大的问题是:“多少偏移量是够吗?” 遗憾的是,所需的偏移量取决于多种因素,包括每个多边形的深度斜率和在线框的线的宽度。

然后,他们解释了深度坡度是这样的:

深度斜率是在由变化x或y坐标分割Z(深度)值的变化,作为在遍历的多边形。 深度值是在窗口坐标,夹持到范围[0,1]。 为了估计的多边形(偏移公式中M)的最大深度斜率,使用以下公式:M =最大{| delV / DELS |,| delV / DELT |}。 (其中德尔是偏导数)

因此,他们得出这样的结论:

对于平行于近端和远端剪切平面多边形,该深度斜率为零。 [...]对于多边形是在很大的角度裁剪平面,深度斜率可以比零显著更大,更大可能需要偏移。 小的非零为因子如0.75或1.0的值,可能是足够的,以产生不同的深度值,并消除不愉快的视觉伪影。



文章来源: Meaning and usage of the factor parameter in glPolygonOffset