我难以理解的第一个参数的含义glPolygonOffset
功能。
void glPolygonOffset(GLfloat factor, GLfloat units);
官方文件说,因素
指定用于创建一个可变深度为每个多边形偏移的比例因子。
然后
它是从相应的顶点的深度值插值之后的每个片段的深度值将被抵消。 偏移量的值是因子×DZ + R×单元,其中DZ是在相对于多边形的屏幕区域深度的变化的测量,和r是保证产生一个分辨对于给定的偏移量的值最小实现。
我明白了什么r
和unit
的。 我不明白的是什么DZ
的,即什么是由“深度价值的多边形的屏幕面积变化的测量”的意思,为什么我会永远需要系数设置为0以外的任何东西。
如果我要被抵消我的线框所有我需要的是添加/深度值substact几个单位/,不是吗? 有什么因素参数(和文件中提到的DZ)的意义,目的和用途的例子吗?
我要在这里承认有些无知,但我发现这篇文章这也解释了它。 他们说:
为了达到高亮固体物体的一个很好的渲染没有视觉假象,你可以添加一个正偏移到固体物体(推远离你)或负偏移到线框(向外拉出)。 最大的问题是:“多少偏移量是够吗?” 遗憾的是,所需的偏移量取决于多种因素,包括每个多边形的深度斜率和在线框的线的宽度。
然后,他们解释了深度坡度是这样的:
深度斜率是在由变化x或y坐标分割Z(深度)值的变化,作为在遍历的多边形。 深度值是在窗口坐标,夹持到范围[0,1]。 为了估计的多边形(偏移公式中M)的最大深度斜率,使用以下公式:M =最大{| delV / DELS |,| delV / DELT |}。 (其中德尔是偏导数)
因此,他们得出这样的结论:
对于平行于近端和远端剪切平面多边形,该深度斜率为零。 [...]对于多边形是在很大的角度裁剪平面,深度斜率可以比零显著更大,更大可能需要偏移。 小的非零为因子如0.75或1.0的值,可能是足够的,以产生不同的深度值,并消除不愉快的视觉伪影。