Opengl es 如何使片段着色器用alpha替换白色,opengl es

Opengl es 如何使片段着色器用alpha替换白色,opengl es,opengl-es,fragment-shader,Opengl Es,Fragment Shader,我正试图想出一个opengl es片段着色器,它将用alpha替换白色像素。背景为棋盘格的图像就是我想要的。棋盘格背景表示alpha转换后的图像。有什么建议吗?通常我不想在这里问这个,但我找不到任何东西 获取您发布的图像中的“白色像素”似乎是在获取灰度分量。也就是将RGB值除以3求和。然后输出RGB在你的例子中都是.0,alpha等于灰度像素 vec4 textureSample = texture2D(uniformTexture, textureCoordinate); l

我正试图想出一个opengl es片段着色器,它将用alpha替换白色像素。背景为棋盘格的图像就是我想要的。棋盘格背景表示alpha转换后的图像。有什么建议吗?通常我不想在这里问这个,但我找不到任何东西

获取您发布的图像中的“白色像素”似乎是在获取灰度分量。也就是将RGB值除以3求和。然后输出RGB在你的例子中都是.0,alpha等于灰度像素

    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);

正确地说,灰度值是0.2126*R+0.7152*G+0.0722*B

可能是位图纹理吗?不幸的是,这是一个很有争议的问题。虽然这种方法在处理现场拍摄的照片时可能是最好的,但它可能不适用于大多数计算机生成的图像。简单地想象一下,您将尝试使用您发布的公式制作一个仅使用蓝色分量的图像灰度图像。结果将相当暗,最亮的像素将转换为约7.2%。。。这种颜色不是自然的,在照片上也不常见。