0

这对绿屏非常有用,我的背景是绿色的,使用此代码可以使绿色 = 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?任何指针都会很友好。

4

2 回答 2

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);
于 2013-07-03T14:15:21.853 回答
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 应用于该像素。我可以调整平滑步长值来改变效果。并且还添加另一个 alpha 以淡入或淡出图像。

于 2013-07-05T12:21:00.933 回答