GLSL — фрагментный шейдер — каждый треугольник имеет свой цвет

Я хочу написать шейдерную программу, которая будет отображать каждый треугольник сетки в определенном цвете (чтобы я мог выбрать один треугольник). Я пытался использовать gl_PrimitiveID, но он всегда возвращает 0, например:

#version 330

out uvec3 FragColor;

void main()
{
    FragColor = uvec3(0.0, 0.0, gl_PrimitiveID);
}

Этот шейдер всегда отображает черный цвет.


person user1784182    schedule 05.01.2014    source источник
comment
Почему вы используете константы с плавающей запятой для целого числа без знака vec3? Разве ваш компилятор GLSL не должен жаловаться хотя бы на это? (например, нет перегрузки uvec3 (...), которая принимает 2 компонента с плавающей запятой и одно целое число). И если на то пошло, вы действительно рисуете в целочисленный цветовой буфер? Или это то, что вы пытались сделать как хак, чтобы заставить gl_PrimitiveID работать?   -  person Andon M. Coleman    schedule 05.01.2014
comment
Извините, моя ошибка, gl_PrimitiveID работает нормально, проблема с моим фреймбуфером.   -  person user1784182    schedule 05.01.2014


Ответы (1)


Чтобы добиться того, что вы хотите, самым простым способом я бы передал дополнительный массив вершин в качестве атрибута цвета, содержащего цвета для треугольника, в вершинный шейдер. Затем передайте его как переменный вывод в ваш шейдер фрагментов. Вот и все. Таким образом, вы можете указать точные цвета для каждой вершины .

person Michael IV    schedule 05.01.2014