2014-09-17 3 views
0

Я пытаюсь создать шейдер фрагмента opengl-es, который заменит белые пиксели альфа. Изображение с клетчатым фоном - это то, что я хочу. Модифицированный фон представляет изображение после альфа-преобразования. Какие-нибудь советы? Обычно мне не хотелось бы спрашивать об этом здесь, но я ничего не могу найти.Как сделать фрагментарный шейдер заменить белый на alpha, opengl-es

Before fragment shader

After fragment shader

+0

Возможно, текстура растрового изображения может быть? – Nooble

ответ

1

Получение «белых пикселей», как в изображении вы публикуемую, кажется, становится черно-белую составляющую. То, что подытоживает значения RGB делящиеся на 3. Затем выход RGB все +0,0 в вашем случае и альфа равен полутонового пикселя ...

vec4 textureSample = texture2D(uniformTexture, textureCoordinate); 
    lowp float grayscaleComponent = textureSample.x*(1.0/3.0) + textureSample.y*(1.0/3.0) + textureSample.z*(1.0/3.0); 
    gl_FragColor = lowp vec4(.0, .0, .0, grayscaleComponent); 
1

Собственно говоря, значение полутоновой является 0,2126 * R + 0,7152 * G + 0.0722 * B http://en.wikipedia.org/wiki/Grayscale

+0

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

Смежные вопросы