Opengl GLSL片段着色器不处理alpha通道

Opengl GLSL片段着色器不处理alpha通道,opengl,glsl,gradient,fragment-shader,alphablending,Opengl,Glsl,Gradient,Fragment Shader,Alphablending,我正在尝试为一个程序制作一些简单的渐变片段着色器。没有什么特别的,只需指定开始和停止颜色,并在两者之间进行插值。除了alpha通道,其他一切似乎都正常工作。看起来,除非颜色为透明黑色(黑色,alpha为0),否则alpha通道要么被忽略,要么被设置为1 片段着色器: uniform mediump vec4 TopColor; uniform mediump vec4 BottomColor; uniform mediump float ViewHeight; uniform medium

我正在尝试为一个程序制作一些简单的渐变片段着色器。没有什么特别的,只需指定开始和停止颜色,并在两者之间进行插值。除了alpha通道,其他一切似乎都正常工作。看起来,除非颜色为透明黑色(黑色,alpha为0),否则alpha通道要么被忽略,要么被设置为1

片段着色器:

uniform mediump vec4 TopColor;
uniform mediump vec4 BottomColor;
uniform mediump float ViewHeight;
uniform mediump vec4 kzViewport;

void main()
{
    precision mediump float;

    float centerY = ViewHeight / 2.0;
    float r = abs(gl_FragCoord.y - centerY) / centerY;

    gl_FragColor = mix(TopColor, BottomColor, r);
}
attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
    precision mediump float;
    gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0);
}
顶点着色器:

uniform mediump vec4 TopColor;
uniform mediump vec4 BottomColor;
uniform mediump float ViewHeight;
uniform mediump vec4 kzViewport;

void main()
{
    precision mediump float;

    float centerY = ViewHeight / 2.0;
    float r = abs(gl_FragCoord.y - centerY) / centerY;

    gl_FragColor = mix(TopColor, BottomColor, r);
}
attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
    precision mediump float;
    gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0);
}

如果说颜色插值正确,则着色器没有问题。也许你忘了在引擎中启用混合,或者类似的东西?你肯定忘了设置glEnable(GL_混合);glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA) > HyyBrAcCAT,我会考虑不尊重alpha的“错误”的改变,但问题可能不是着色器本身。我的意思是,着色器以完全相同的方式处理RGB和组件。因此,如果RGB输出同时是正确的,那么输出就不可能是错误的。你的像素格式中有Alpha缓冲区吗?如果没有,设置混合将没有帮助