Как значения цвета интерполируются в шейдскрипте Гуро?

Шейдер Гуро вычисляет освещение в углах каждого треугольника и линейно интерполирует результирующие цвета для каждого пикселя, охватываемого треугольником.

Как бы вы запрограммировали эту определенную интерполяцию (в GLSL-коде)?

Вам даже нужно кодировать это самостоятельно или OpenGL интерполирует (внутренне) в одиночку?

1 ответ

Решение

С https://www.opengl.org/wiki/Type_Qualifier_(GLSL):

Интерполяционные классификаторы

Определенные входы и выходы могут использовать интерполяционные квалификаторы. Они предназначены для любых значений, которые могут быть интерполированы в результате растеризации. Они включают:

  • Выводы вершинного шейдера
  • Входы шейдеров управления тесселяцией (для соответствия с выходами от VS)
  • Тесселяция оценки шейдерных выходов
  • Геометрические шейдерные входы (для соответствия с выходами из TES/VS) и выходы
  • Фрагмент шейдерных входов

Спецификаторы интерполяции управляют тем, как происходит интерполяция значений по треугольнику или другому примитиву. Существует три основных квалификатора интерполяции.

квартира

Значение не будет интерполировано. Значение, данное фрагментному шейдеру, является значением из Provoking Vertex для этого примитива.

noperspective

Значение будет линейно интерполировано в пространстве окна. Обычно это не то, что вы хотите, но оно может иметь свое применение.

гладкий

Значение будет интерполировано в правильной перспективе. Это значение по умолчанию, если классификатор отсутствует.


Так как по умолчанию используется smooth, OpenGL интерполирует его для вас. Если вы не хотите интерполяции, вы должны определить свой цвет в ваших шейдерах с ключевым словом flat, что-то вроде этого:

flat vec3 color;
Другие вопросы по тегам