Arm*_*yan 9 c opengl graphics depth-buffer depth-testing
我很难理解glPolygonOffset函数中第一个参数的含义.
void glPolygonOffset(GLfloat factor, GLfloat units);
Run Code Online (Sandbox Code Playgroud)
官方文件说明了这个因素
指定用于为每个多边形创建变量深度偏移的比例因子.
然后
在从适当顶点的深度值插值后,每个片段的深度值将被偏移.偏移的值是因子×DZ + r×单位,其中DZ是相对于多边形的屏幕区域的深度变化的度量,并且r是保证给定给定的可解析偏移的最小值实现.
我明白了什么r和unit是.我不明白的是什么DZ,即"测量多边形屏幕区域的深度值变化"是什么意思,为什么我需要将因子设置为0以外的任何值.
如果我想让我的线框偏移,我只需要在深度值上添加/减少几个单位,不是吗?factor参数(以及文档中提到的DZ)的含义,用途和用法示例是什么?
use*_*321 10
我不得不在这里承认一些无知,但我发现这篇文章解释了它.他们说:
为了在没有视觉瑕疵的情况下实现突出显示的实体对象的良好渲染,您可以向实体对象添加正偏移(将其推离您)或向线框添加负偏移(将其拉向您).最大的问题是:"抵消多少就足够了?" 不幸的是,所需的偏移取决于各种因素,包括每个多边形的深度斜率和线框中线的宽度.
然后他们用这种方式解释深度斜率:
当您遍历多边形时,深度斜率是z(深度)值的变化除以x或y坐标的变化.深度值在窗口坐标中,夹在[0,1]范围内.要估计多边形的最大深度斜率(偏移方程中的m),请使用以下公式:m = max {| delV/delS |,| delV/delT |}.(其中del是偏导数)
所以他们得出结论:
对于与近剪裁平面和远剪裁平面平行的多边形,深度斜率为零.[...]对于与剪裁平面成大角度的多边形,深度斜率可能明显大于零,并且可能需要更大的偏移.因子的小的非零值(例如0.75或1.0)可能足以生成不同的深度值并消除令人不快的视觉伪像.