OpenGL ES Green Screen ......但我想用黑色

时间:2013-07-03 09:47:14

标签: ios opengl-es fragment-shader

这适用于绿色屏幕,我的背景为绿色,并使用此代码使绿色= alpha。

lowp vec4 textureColor = texture2D(u_samplers2D[0], vTextu);

lowp float rbAverage = textureColor.r * 0.5 + textureColor.b * 0.5;
lowp float gDelta = textureColor.g - rbAverage;
textureColor.a = 1.0 - smoothstep(0.0, 0.25, gDelta);
textureColor.a = textureColor.a * textureColor.a * textureColor.a;
gl_FragColor = textureColor;

如何更改代码以使其使用黑色背景而不是绿色?我想我可以获得暗红色,绿色,蓝色的值然后用它作为alpha?任何指针都会很友善。

2 个答案:

答案 0 :(得分:0)

您可以计算接近黑色值的方式,最简单的方法是取最大值rg和b值,然后在考虑颜色不透明时设置一些阈值,并在伪代码中将alpha值映射到[0..1] :

float brightness = max(textureColor.r, textureColor.g, textureColor.b);
float threshold = 0.1;
float alpha = brightness > threshold ? 1 : (threshold - brightness) / threshold;
gl_FragColor = vec4(textureColor.rgb, alpha);

答案 1 :(得分:0)

lowp vec4 textureColor = texture2D(u_samplers2D, vTextu);
lowp float gtemp =  smoothstep(0.0, 0.5, textureColor.r);
gl_FragColor = vec4(1.0, 1.0, 1.0, gtemp);

这适用于我的情况。我使用的是带有黑色背景的灰度图像,只需要白色元素。我遇到的问题是我将alpha应用于灰色像素,但现在我使用白色并应用alpha。我可以调整smoothstep值来改变效果。并添加另一个alpha来淡入或淡出图像。