已着色像素上的Webgl片段着色器透明度

已着色像素上的Webgl片段着色器透明度,webgl,alpha,fragment-shader,Webgl,Alpha,Fragment Shader,我几天前刚刚了解了Webgl,但我仍然对透明度行为有点困惑。我正在尝试使用片段着色器在三角形内绘制一些圆。在我有两个三角形重叠之前,一切看起来都正常。“我的片段着色器”确定该点是否在圆中,然后将颜色设置为(1,0,0,1.)(如果它在圆内),或者(1,0,0,0.)(如果它不在圆内) 我期望的行为是,当片段着色器将已着色(1,0,0,0,1.)的像素设置为(1,0,0,0.)时,它将显示为(1,0,0,1.)。但是,它的颜色与背景颜色相同。 我已尝试通过以下方式打开混合模式,但它似乎仍然不起作用

我几天前刚刚了解了Webgl,但我仍然对透明度行为有点困惑。我正在尝试使用片段着色器在三角形内绘制一些圆。在我有两个三角形重叠之前,一切看起来都正常。“我的片段着色器”确定该点是否在圆中,然后将颜色设置为(1,0,0,1.)(如果它在圆内),或者(1,0,0,0.)(如果它不在圆内)

我期望的行为是,当片段着色器将已着色(1,0,0,0,1.)的像素设置为(1,0,0,0.)时,它将显示为(1,0,0,1.)。但是,它的颜色与背景颜色相同。
我已尝试通过以下方式打开混合模式,但它似乎仍然不起作用:

gl.enable( gl.BLEND );
gl.blendEquation( gl.FUNC_ADD );
gl.blendFunc( gl.ONE_MINUS_CONSTANT_ALPHA, gl.ONE_MINUS_SRC_ALPHA );
我在下面附上了我的代码

const vertexShader=`
属性向量4定位;
属性向量4中心;
可变vec4位;
可变vec4中心;
void main(){
中心=中心;
位置=位置;
gl_位置=位置;
}
`;
常量碎片着色器=`
精密中泵浮子;
可变vec4位;
可变vec4中心;
void main(){
内部浮动=功率(位置x-中心x,2.0)+功率(位置y-中心y,2.0);
浮动值=最大值(符号(功率(中心z,2.0)-内部),0);
vec4颜色=vec4(1,0,0,val);
gl_FragColor=颜色;
}
`;
const DEG_至_RAD=0.0174532925;
常数TRI_HEIGHT_MOD=2;
//建立简单的循环
var点=[];
var中心=[];
函数构建圆(中心,r){
设角度=[0120240];
for(设k=0;k仅在未启用的情况下才能工作:

gl.enable(gl.DEPTH_TEST);

当启用深度测试时,深度测试可能会丢弃片段,然后才能将其混合