【问题标题】:How to make a fragment shader replace white with alpha, opengl-es如何使片段着色器用alpha,opengl-es替换白色
【发布时间】:2014-11-12 04:01:49
【问题描述】:

我正在尝试提出一个 opengl-es 片段着色器,它将用 alpha 替换白色像素。带有方格背景的图像是我想要的。方格背景代表 alpha 转换后的图像。有小费吗?通常我不想在这里问这个,但我找不到任何东西。

【问题讨论】:

  • 位图纹理可能吗?

标签: opengl-es fragment-shader


【解决方案1】:

在您发布的图像中获取“白色像素”似乎正在获取灰度组件。那就是将 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);

【讨论】:

    【解决方案2】:

    按理说,灰度值为0.2126 * R + 0.7152 * G + 0.0722 * B http://en.wikipedia.org/wiki/Grayscale

    【讨论】:

    • 不幸的是,这值得商榷。虽然在处理实时拍摄的照片时这种方法很可能是最好的,但它可能不适用于大多数计算机生成的图像。简单地想象一下,您将尝试使用您发布的方程式制作仅使用蓝色分量的图像的灰度图像。结果会很暗,最亮的像素会转换为 7.2% 左右……这种颜色不自然,但在照片上并不常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2016-09-09
    相关资源
    最近更新 更多