Как сделать что-то вроде экрана Photoshop Blending с glBlendFunc (OpenGL ES 1.x)? - PullRequest
2 голосов
/ 15 июля 2010

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

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

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

Ответы [ 2 ]

5 голосов
/ 15 июля 2010

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

0 голосов
/ 26 апреля 2014

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

  • Источник RGB = SRC_ALPHA
  • Источник альфа = SRC_ALPHA
  • Назначение RGB = ONE
  • альфа-адресат = ONE_MINUS_SRC_ALPHA
...