【问题标题】:Meaning and usage of the factor parameter in glPolygonOffsetglPolygonOffset中factor参数的含义和用法
【发布时间】:2012-11-06 00:56:35
【问题描述】:

我很难理解glPolygonOffset 函数中第一个参数的含义。

void glPolygonOffset(GLfloat  factor, GLfloat units);

The official documentation 说这个因素

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

还有那个

每个片段的深度值将在从相应顶点的深度值插值后偏移。 offset 的值是 factor × DZ + r × units ,其中 DZ 是相对于多边形屏幕区域的深度变化的度量,而 r 是保证在给定的情况下产生可解析偏移的最小值实施。

我了解 runit 是什么。我不明白DZ 是什么,即“测量多边形屏幕区域的深度值变化”是什么意思,为什么我需要将因子设置为 0 以外的任何值。

如果我想让我的线框偏移,我只需要在深度值上添加/减去几个单位,不是吗? factor参数(以及文档中提到的DZ)的含义、用途和使用示例是什么?

【问题讨论】:

    标签: c opengl graphics depth-buffer depth-testing


    【解决方案1】:

    我不得不承认这里有些无知,但我发现this article 解释了它。他们说:

    要在没有视觉伪影的情况下实现高亮显示的实体对象的良好渲染,您可以向实体对象添加正偏移(将其推离您)或向线框添加负偏移(将其拉向您)。最大的问题是:“多少偏移量才足够?”不幸的是,所需的偏移量取决于各种因素,包括每个多边形的深度斜率和线框中线条的宽度。

    然后他们这样解释深度斜率:

    深度斜率是当您遍历多边形时,z(深度)值的变化除以 x 或 y 坐标的变化。深度值在窗口坐标中,限制在 [0, 1] 范围内。要估计多边形的最大深度斜率(偏移方程中的 m),请使用以下公式:m = max {|delV / delS|,|delV / delT|}。 (其中 del 是偏导数)

    因此他们得出结论:

    对于平行于近剪裁平面和远剪裁平面的多边形,深度斜率为零。 [...] 对于与剪裁平面成很大角度的多边形,深度斜率可能显着大于零,并且可能需要更大的偏移量。较小的非零值(例如 0.75 或 1.0)可能足以生成不同的深度值并消除令人不快的视觉伪影。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      相关资源
      最近更新 更多