Я хочу реализовать следующую функцию смешивания в моей программе, которая не использует OpenGL.
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
В тестовом приложении OpenGL в реальном времени я смог смешать с этой функцией цвета на белом фоне. Смешанный результат должен выглядеть следующим образом http://postimg.org/image/lwr9ossen/.
У меня белый фон и я хочу наложить на него красные точки. высокая плотность красных точек должна быть непрозрачной / черной.
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
for(many many many times)
glColor4f(0.75, 0.0, 0.1, 0.85f);
DrawPoint(..)
Я пытался что-то, но у меня не было успеха.
Кто-нибудь уравнение для этой функции смешивания?
Функция смешивания должна транслироваться непосредственно в нужные вам операции, если вы хотите реализовать все это в своем собственном коде.
GL_DST_COLOR
соответствует цвету в пункте назначения, который является выходным изображением.
Значение GL_ONE_MINUS_SRC_ALPHA равно 1,0 минус альфа-компонент пикселя, который вы рендерите.
Соедини это все вместе, с (colR, colG, colB, colA)
цвет пикселя, который вы рендерите, и (imgR, imgG, imgB)
текущий цвет в выходном изображении в позиции пикселя:
GL_DST_COLOR = (imgR, imgG, imgB)
GL_ONE_MINUS_SRC_ALPHA = (1.0 - colA, 1.0 - colA, 1.0 - colA)
GL_DST_COLOR * (colR, colG, colB) + GL_ONE_MINUS_SRC_ALPHA * (imgR, imgG, imgB)
= (imgR, imgG, imgB) * (colR, colG, colB) +
(1.0 - colA, 1.0 - colA, 1.0 - colA) * (imgR, imgG, imgB)
= (imgR * colR + (1.0 - colA) * imgR,
imgG * colG + (1.0 - colA) * imgG,
imgB * colB + (1.0 - colA) * imgB)
Это цвет, который вы пишете на свое изображение в результате рендеринга пикселя.