Как сделать что-то вроде экрана Photoshop Blending с glBlendFunc (OpenGL ES 1.x)?

У меня есть простое одноканальное (8-битное) растровое изображение только с данными о яркости, и я хочу смешать его с существующим кадровым буфером, как это делает режим наложения экрана в Photoshop.

Таким образом, белые пиксели источника (255) должны давать белый цвет, 50% серых пикселей источника (128) должны давать пиксель кадрового буфера с подсветкой на 50%, а черные пиксели источника должны оставлять результат в покое. Должен ли я также установить glColor4f?

Может ли какой- нибудь эксперт из glBlendFunc помочь мне здесь?

2 ответа

Решение

Смешивание экрана C = S + (1 - S) × D, так что вы хотите, чтобы glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR), Если вы когда-нибудь введете альфа-канал, вы все равно сможете получить правильные результаты, если будете хранить данные изображения в предварительно умноженном формате.

Это сработало для меня на Straight alpha.

  • RGB источник = SRC_ALPHA
  • альфа-источник = SRC_ALPHA
  • RGB пункт назначения = ONE
  • альфа-адресат = ONE_MINUS_SRC_ALPHA
Другие вопросы по тегам