Разрабатываю простую 2D-игру на OpenGL ES для iPhone. Моя проблема в том, что я хочу визуализировать текстуру, используя разные оттенки. В основном я хочу изменить оттенок цветов текстуры, которую я визуализирую. Простое изменение glColor не работает, поскольку оно также влияет на части изображения без цвета. Любые идеи?
OpenGL ES - изменение оттенка цветов в текстуре
Ответы (1)
Спасибо за разъяснение, это было далеко от моего первоначального понимания. Обратите внимание, что текстура, которую вы предоставляете OpenGL ES, уже имеет оттенок, поэтому вы просите изменить существующий оттенок.
Во-первых, позвольте мне ответить на поставленный вопрос:
Начнем с того, что должно произойти с текселями. Поскольку текстуры OpenGL хранятся как RGB, чтобы преобразовать оттенок текселя, вам нужно выбрать RGB-> HSL-> применить новый оттенок-> RGB. Вы можете найти математические вычисления для преобразования RGB-> HSL и обратного преобразования здесь. Как вы хотите выбрать новый оттенок, я полагаю, вам придется это заполнить.
Самый большой вопрос - когда должно произойти преобразование. Что ж, конвейер OpenGL не позволит вам выполнить такое сложное преобразование при чтении текстуры (в любом случае, не в ES 1.1 - ES 2.0 fragment shaders
поможет, но за высокую цену). Таким образом, вам придется выполнять все преобразования за пределами конвейера текстурирования GL ES. В зависимости от того, как часто вам нужно менять оттенки, я советую либо делать это в автономном режиме (и хранить различные тематические текстуры), либо вычислять новые текстуры для новых оттенков по запросу непосредственно перед их загрузкой в OpenGL ES.
Насколько мне известно, GL ES 1.1 не имеет встроенных средств, которые помогли бы сделать это напрямую.
Теперь, сделав шаг назад, я не уверен, что мешает вам разделиться на 2 текстуры, если вы можете жить с 2 текстурами для применения во время выполнения. Математика, на которую я указал, отделяет насыщенность от яркости независимо от того, как была сгенерирована текстура (и теоретически оттенок должен быть постоянным, если я правильно понимаю ваш случай). Выполнение вычислений в автономном режиме должно быть довольно простым для любой входной текстуры?