Я пишу простой просмотрщик изображений для отображения изображений на пару треугольников в OpenGL ES 2.0 на Android. В этих изображениях есть определенный цвет, который каким-то образом должен быть заменен черным. Проблема заключается в том, что если GL_LINEAR используется для моих фильтров min и maxifying, контур цвета, который необходимо заменить, остается видимым. Если я использую GL_NEAREST для своих фильтров, шейдер может заменить цвет без особых трудностей, однако он не делает изображения плавно и, конечно же, выглядит неравномерным при масштабировании и выходе.Как заменить цвет в текстуре из моего шейдерного кода?
Интересно, есть ли лучший способ выполнить этот тип задачи. Некоторые идеи у меня были:
- Создайте еще один шейдер, который работает только один раз на пикселях текстуры и заменяет цвета до фактического использования текстуры во время моего шейдера фрагмента?
- Перепишите мой шейдер так, чтобы он работал даже при использовании GL_LINEAR.
Может ли кто-нибудь дать мне какие-либо сведения о том, как это обычно делается? Причина, по которой я предпочел бы выполнить эту операцию в шейдере, заключается в том, что я могу гарантировать, что цвет пикселя маски всегда остается черным.
Я совершенно новый для OpenGL ES 2.0, но я стараюсь узнать, как все работает. Пожалуйста, имейте это в виду и помогите мне учиться. Заранее спасибо.
Вы используете альфа-канал и редактируете исходные изображения? Возможно, было бы более целесообразно делать это с альфа-каналом, чем с цветовой клавиатурой. В противном случае я не могу придумать лучшего способа, я думаю, что вы достаточно четко обозначили ограничения. – Tim
Редактирование исходных изображений занимает много времени в Дальвике, и я бы предпочел не иметь этих накладных расходов. В настоящее время код ничего не делает с альфа-каналом, но изображения, которые мы показываем, на самом деле представляют собой 16-битные оттенки серого, которые я кодирую как RGB_565 и декодирую бит в шейдере. Это немного уродливо, но, похоже, работает. Лучшие результаты, которые мы, по-видимому, предварительно обработали нашими изображениями на сервере, а также не пытались сделать цветную настройку на клиенте вообще. Возможно, нам придется прибегнуть к этому решению. – Thorinside
Я также могу добавить, что пиксели маски не перемещаются в изображениях. Они все в одном месте. Полагаю, я мог бы также попробовать создать альфа-текстуру и использовать ее для установки альфы выходных пикселей? Или я также увижу эту проблему в этом случае? – Thorinside