Я создаю 2D-игру с использованием OpenGL ES 2 в Android и включаю в нее панель здоровья. Бар здоровья меняется на 5 цветов по мере уменьшения здоровья (зеленый, желто-зеленый, желтый, оранжевый, красный). Текстура для панели здоровья исходит из атласа текстуры, и я предпочел бы не загромождать атлас текстуры полосой для каждого цвета (в будущем было бы легче изменить эти цвета).Изменение цвета текстуры бара здоровья в GLSL ES
Это оригинальный зеленый цвет, который я хотел бы воспроизвести с использованием GLSL. Основной цвет для этого - # 77ee9a.
То, что я пытался это создать черно-белую версию текстуры. Базовый зеленый цвет здесь #aeaeae.
Затем я умножать цвет я хочу с этим черно-белым изображением. Я понял, что это не сработает правильно, поэтому я взял зеленый, который я хотел (# 77ee9a), и разделил его на черно-белый эквивалент (#aeaeae) до умножения. Это привело к:
я понял, что деление на сером вызвало зеленую часть стоимости RGB для исходных зеленого до более 255, создавая артефакты вокруг ярких участков изображения.
Я не уверен, есть ли лучший способ достичь этого эффекта окраски, но я надеюсь, что есть решение, которое позволит мне это сделать.
Если нет, я бы мог создать две текстуры: 1 чистый белый в форме бара, а другой с прозрачными эффектами. Я мог бы затем наложить их, но для игры потребуется еще одна текстура и другой спрайт.
Спасибо!