Как смешать пиксели в фотошоп-подобном режиме экрана в OpenGL? - PullRequest
6 голосов
/ 18 мая 2011

Я знаю, что glBlendFunc - это вызов функции для определения режима наложения пикселей.

Я могу сделать Режим умножения , как в Photoshop, формула которого

C = A * B

где A - исходный пиксель, B - целевой пиксель, а C - конечный результат.

Использование glBlendFunc (GL_DST_COLOR, GL_ZERO) Я получуэтот эффект.

Итак, теперь мой вопрос, как использовать Режим экрана ?Формула этого:

C = 1 - (1 - A) * (1 - B)

1 Ответ

7 голосов
/ 18 мая 2011

Не проверял, но путь заключается в следующем.

Встроенные вычисления, которые делает OpenGL, выглядят так:

C = A*s + B*d

Где вы можете выбрать s ид.

Некоторая алгебра дает нам

C = 1 - (1 - A) * (1 - B) = 
  = 1 - (1 - B) + A*(1 - B) = 
  = A*(1 - B) + B

Пусть

s = 1 - B
d = 1

и мы получаем желаемое значение.Так что это должно работать:

glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...