Принудительная проверка глубины на конкретное значение глубины вместо фактической глубины фрагмента - PullRequest
1 голос
/ 06 ноября 2019

Я хочу нарисовать некоторые примитивы за всем, что записывалось в буфер глубины, используя glDepthFunc(GL_EQUAL) и запись в каждый пиксель с глубиной 1.0 (самое высокое значение и значение по умолчанию)

Однако,чтобы это работало, я должен игнорировать вычисленную Z-глубину на моих примитивах, заставляя их проверять, как если бы это было 1.0 для всех из них.

Что было бы самым простым способом заставить все фрагменты вопределенная отрисовка для тестирования имеет z-глубину 1.0 независимо от фактической глубины z, вычисленной в вершинном шейдере?

1 Ответ

2 голосов
/ 06 ноября 2019

Если вы хотите, чтобы все фрагменты имели глубину 1,0, необходимо убедиться, что компонент z нормализованной координаты устройства равен 1,0.
Нормализованная координата устройства рассчитывается с помощью деления перспективы формирует координату клипа (думайте об этом как gl_Position.xyz / gl_Position.w).

Установите gl_Position.z равным gl_Position.w, после того как координата клипа установлена, что приводит к тому, что gl_Position.z / gl_Position.w равно 1,0:

gl_Position.z = gl_Position.w; 

Но обратите внимание, что глубина фрагмента также может быть установлена ​​в шейдере фрагмента, присваивая значение gl_FragDepth:
(Конечно, это предотвращает1017 * Ранний тест фрагмента может иметь место)

gl_FragDepth = 1.0;
...