Как установить индивидуальный цвет для каждого треугольника WebGL?

У меня есть фрагмент шейдера:

uniform vec4 zz_color;
void main(void) {
    gl_FragColor = zz_color;
}

и я установил этот цвет в коде JS:

ccc = gl.getUniformLocation(this.program, "zz_color");  // 1 time
gl.uniform4f(ccc, r, g, b, 1);                          // on animation frame

Но я рисую 50000 прямоугольников, используя 100000 треугольников:

gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.my_vertices_data);
gl.drawArrays(gl.TRIANGLES, 0, 6 * number_of_vertices);

и хотелось бы, чтобы у каждого был свой цвет.

Мой вопрос: как фрагментный шейдер может (может ли он?) Получить какой-то индекс текущего фрагмента (над которым шейдер работает сейчас), чтобы можно было подобрать цвет из некоторого массива (этот массив будет содержать цвет для каждого фрагмента)

(100000 фрагментов (треугольников) - это слишком много памяти, чтобы иметь массив в шейдерном коде, но как насчет 100 фрагментов?)

1 ответ

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

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