Как реализовать собственную функцию смешивания?

Я хочу реализовать следующую функцию смешивания в моей программе, которая не использует 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(..)

Я пытался что-то, но у меня не было успеха.
Кто-нибудь уравнение для этой функции смешивания?

0

Решение

Функция смешивания должна транслироваться непосредственно в нужные вам операции, если вы хотите реализовать все это в своем собственном коде.

  • Первый аргумент задает коэффициент масштабирования для вашего исходного цвета, то есть цвета, которым вы рисуете пиксель.
  • Второй аргумент задает коэффициент масштабирования для целевого цвета, т. Е. Текущее значение цвета в позиции пикселя в выходном изображении.
  • Эти два условия затем добавляются, и результат записывается в выходное изображение.

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)

Это цвет, который вы пишете на свое изображение в результате рендеринга пикселя.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector