Android 打开如何将黑色像素更改为透明像素

Android 打开如何将黑色像素更改为透明像素,android,opengl-es,shader,Android,Opengl Es,Shader,我的代码是 vec4 textureColor = texture2D(uTextureSampler, vTextureCoord); if(textureColor.r* 0.299 + textureColor.g * 0.587 + textureColor.b * 0.114 < 0.1) { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); } else { gl_FragColor = vec4(textureColor.r,

我的代码是

vec4 textureColor = texture2D(uTextureSampler, vTextureCoord);
if(textureColor.r* 0.299 + textureColor.g * 0.587 + textureColor.b * 0.114 < 0.1) {
    gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
} else {
    gl_FragColor = vec4(textureColor.r, textureColor.g, textureColor.b, textureColor.w);
}
vec4 textureColor=texture2D(uTextureSampler,vTextureCoord);
如果(textureColor.r*0.299+textureColor.g*0.587+textureColor.b*0.114<0.1){
gl_FragColor=vec4(0.0,0.0,0.0,0.0);
}否则{
gl_FragColor=vec4(textureColor.r,textureColor.g,textureColor.b,textureColor.w);
}
我的问题是如何判断像素是黑色的?我该怎么做呢?我应该把rgb换成hsv吗

        return "precision mediump float; \n"+
            "   varying highp vec2 " + VARYING_TEXTURE_COORD + ";\n" +
            "   \n" +
            "   uniform sampler2D " + TEXTURE_SAMPLER_UNIFORM + ";\n" +
            "   \n" +
            " void main()\n" +
            " {\n" +
            " vec3 keying_color = vec3(0.0, 0.0, 0.0);\n" +
            " float thresh = 0.45; // [0, 1.732]\n" +
            " float slope = 0.1; // [0, 1]\n" +
            " vec3 input_color = texture2D(" + TEXTURE_SAMPLER_UNIFORM + ", " + VARYING_TEXTURE_COORD + ").rgb;\n" +
            " float d = abs(length(abs(keying_color.rgb - input_color.rgb)));\n" +
            " float edge0 = thresh * (1.0 - slope);\n" +
            " float alpha = smoothstep(edge0, thresh, d);\n" +
            " gl_FragColor = vec4(input_color,alpha);\n" +
            " }";
在keying_颜色变量中存储了我们要替换的实际颜色。它使用经典的RGB模型,但强度不表示为0-255整数。它是0-1范围内的浮点值。(因此0=0,255=0,122=0.478…)在我们的例子中,绿色有值(0.647,0.941,0.29),但如果您使用不同的视频,请自己测量颜色。
注意:确保颜色正确。一些颜色测量软件会自动将颜色转换为稍有不同的格式,例如AdobeRGB。
那么魔法在哪里呢?
我们在输入颜色中加载当前像素颜色,然后计算输入颜色和关键帧颜色之间的差异。基于此差异,计算alpha值并用于特定像素。
可以使用坡度和阈值控制比较的严格程度。这有点复杂,但最基本的规则是:门槛越高,容忍度越大。
那么,我们结束了,对吗?没有


您可以查看此链接:

@BDL是的,请原谅我的蹩脚英语。我不明白为什么它不应该使用该代码。如果
textureColor
为[0,0,0],那么最终肯定会得到一个透明像素。(假设OpenGL应用程序的其余部分没有问题)。如果无条件输出
gl_FragColor=vec4(0.0,0.0,0.0,0.0),会发生什么情况
如果(textureColor.r*0.299+textureColor.g*0.587+textureColor.b*0.114<0.1)
是判断黑色像素,如果是黑色像素,我将此像素更改为透明,因此
gl_FragColor=vec4(0.0,0.0,0.0,0.0)
是将像素更改为透明。判断像素颜色不正确的方法,一些深蓝色可以判断为黑色