Значение и использование факторного параметра в glPolygonOffset

У меня возникают трудности с пониманием значения первого параметра в glPolygonOffset функция.

void glPolygonOffset(GLfloat  factor, GLfloat units);

Официальная документация говорит, что фактор

Определяет масштабный коэффициент, который используется для создания переменного смещения глубины для каждого многоугольника.

и это

значение глубины каждого фрагмента будет смещено после его интерполяции из значений глубины соответствующих вершин. Значением смещения является коэффициент × DZ + r × единиц, где DZ - это измерение изменения глубины относительно площади экрана многоугольника, а r - это наименьшее значение, гарантирующее создание разрешаемого смещения для заданного значения. реализация.

Я понимаю что r а также unit являются. То, что я не понимаю, это то, что DZ то есть, что подразумевается под "измерением изменения значения глубины в области экрана многоугольника" и зачем мне когда-либо нужно устанавливать коэффициент, отличный от 0.

Если я хочу, чтобы мой каркас был смещен, все, что мне нужно, это добавить / подкрутить пару единиц к / от значения глубины, не так ли? Каково значение, цель и пример использования параметра factor (и DZ, упомянутых в документе)?

1 ответ

Решение

Я должен признать некоторое невежество здесь, но я нашел эту статью, которая объясняет это. Они говорят:

Чтобы добиться хорошей визуализации выделенного твердого объекта без визуальных артефактов, вы можете либо добавить положительное смещение к твердому объекту (оттолкнуть его от себя), либо отрицательное смещение к каркасу (потяните его к себе). Большой вопрос: "Сколько смещения достаточно?" К сожалению, требуемое смещение зависит от различных факторов, включая наклон глубины каждого многоугольника и ширину линий в каркасе.

Затем они объясняют наклон глубины следующим образом:

Наклон глубины - это изменение значений z (глубины), деленное на изменение координат x или y при прохождении полигона. Значения глубины указаны в координатах окна, ограниченных диапазоном [0, 1]. Чтобы оценить максимальный наклон глубины многоугольника (m в уравнении смещения), используйте следующую формулу: m = max {|delV / delS|,|delV / delT|}. (где del является частной производной)

Поэтому они пришли к выводу, что:

Для многоугольников, которые параллельны ближнему и дальнему плоскостям отсечения, наклон глубины равен нулю. [...] Для многоугольников, которые находятся под большим углом к ​​плоскостям отсечения, наклон глубины может быть значительно больше нуля, и может потребоваться большее смещение. Небольших ненулевых значений для коэффициента, таких как 0,75 или 1,0, вероятно, достаточно для генерации различных значений глубины и устранения неприятных визуальных артефактов.

Другие вопросы по тегам