Значение и использование факторного параметра в 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, вероятно, достаточно для генерации различных значений глубины и устранения неприятных визуальных артефактов.