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