首页 > 解决方案 > 如何修复此着色器以正确隐藏 Alpha 像素?

问题描述

我正在开发一个基本上为 2D 图像创建阴影投射效果的着色器,除了我尝试更改阴影的颜色时,几乎所有东西都可以工作,默认情况下颜色是黑色并且 alpha 像素是隐藏的,但是当我调整时颜色 ( modColor) alpha 像素被明亮的颜色填充

黑色的 有色

这是着色器代码

顶点

uniform mat4 modelViewProjection;
attribute vec4 position;
attribute vec2 texCoord;

uniform vec4 modColor;

varying lowp vec4 vColor;
varying highp vec2 vTexCoord;
void main() {
  vColor = modColor;
  vTexCoord = texCoord;
  gl_Position = modelViewProjection * position;
}

分段

precision highp float;
uniform lowp sampler2D texture;

varying lowp vec4 vColor;
varying highp vec2 vTexCoord;
uniform float shadowAlpha;
void main() {
  lowp vec4 bl = texture2D( texture, vTexCoord ) * vec4(0,0,0,1);
  lowp vec4 col = vec4(bl.rgb + vColor.rgb, bl.a * vColor.a);
  float useAlpha = shadowAlpha * col.a * (1.0 - vTexCoord.y);
  gl_FragColor = vec4(col.rgb, useAlpha);
}

标签: colorsglslshader

解决方案


由于纹理 ( bl.a) 的 alpha 通道在没有阴影的区域为 0,在有阴影的区域为 1,因此您可以将片段的颜色通道乘以bl.a

gl_FragColor = vec4(col.rgb, useAlpha);

gl_FragColor = vec4(col.rgb * bl.a, useAlpha);

推荐阅读