Я хочу сделать много спрайтов, и я хочу подкрасить каждый спрайт в цвете (для эффекта радуги), используя шейдер. (Спрайт-текстура изначально в оттенках серого)Установить цвет за спрайт, используя SpriteBatch и цвет вершины?
Сначала я сделал это с однородной, где я прошел цвет, который я вычислил вне шейдера. Это работало нормально, но было слишком медленно.
Тогда я узнал, что это слишком медленно, потому что я устанавливал эту форму много раз за кадр. Я нашел следующий:
[...] колеровочный спрайт в OpenGL может легко быть сделан путем определения цвета вершин. Поскольку вершины в этом случае определяются SpriteBatch.draw(), вы должны установить оттенок с помощью SpriteBatch.setColor(). [...]
И я пытался сделать так:
в визуализации():
batch.setShader(shader);
batch.setColor(.5f, .3f, 1, 1);
sprite.draw(batch);
batch.setColor(1, 1, 1, 1);
batch.setShader(null);
вершинный шейдер:
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
пиксельный шейдер:
void main() {
v_color = a_color*gl_Color*2.0;
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
Хорошо, я не знаком с шейдерами GLSL, и, возможно, поэтому теперь ничего не рисует. Наверное, у меня что-то не хватает, и я не могу понять, что.
Как я могу направить спрайт в цвет? Чтобы он работал быстро?
Для этого не нужен специальный шейдер, по умолчанию шейдер SpriteBatch уже поддерживает тонирование. – Xoppa