Opengl es Opengl着色器,什么';这是gl#U FragColor&x27;阿尔法分量?

Opengl es Opengl着色器,什么';这是gl#U FragColor&x27;阿尔法分量?,opengl-es,glsl,shader,cocos2d-x,Opengl Es,Glsl,Shader,Cocos2d X,我想这将是一个有点简单的答案。 但我无法通过谷歌搜索找到答案。 这是OpenGLES着色器的事情。我正在使用cocos2d-x引擎 这是我的片段着色器代码 precision lowp float; varying vec2 v_texCoord; uniform sampler2D u_texture; uniform vec4 u_lightPosition; void main() { vec4 col=texture2D(u_texture,v_texCoord);

我想这将是一个有点简单的答案。
但我无法通过谷歌搜索找到答案。
这是OpenGLES着色器的事情。我正在使用cocos2d-x引擎

这是我的片段着色器代码

precision lowp float;
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform vec4 u_lightPosition;

void main()
{
    vec4 col=texture2D(u_texture,v_texCoord);

    mediump float lightDistance = distance(gl_FragCoord, u_lightPosition);
    mediump float alpha = 100.0/lightDistance;
    alpha = min(alpha, 1.0);
    alpha = max(alpha, 0.0);
    col.w = alpha;
    //col.a = alpha;


    gl_FragColor=col;

}
我只想给一些圆形区域增加透明度。所以我改变了颜色的w值,因为我认为它是纹理的alpha值。但结果很奇怪。 恐怕不是阿尔法值。

即使我为测试将该值设置为1.0,整个精灵也会变为明亮和白色


它的顶点着色器是非常正常的,没有什么特殊的附加


有什么想法吗



更新:为了参考,我附上一些结果图像

案例1)

案例2)


在应用着色器之前,请选择“纹理”和“法线纹理”。)

定义:

变量
mediump vec4 gl_FragColor

说明
碎片颜色

单位或坐标系
RGBA颜色

它还指出:

矢量分量
除了数组数字下标语法, 向量组件的名称由一个字母表示。组件 可以旋转和复制,例如:pos.xx、pos.zy

{x,y,z,w}访问表示点或法线的向量时使用

{r,g,b,a}访问表示颜色的向量时使用

{s,t,p,q}访问表示纹理坐标的向量时使用

因此,当然,使用
.a
会更为惯用,但显然,存储到
.w
的是
gl\u FragColor
的输出alpha

要回答您设置为标题而不是正文中的问题,由
texture2D
返回的值将是该纹理的正确值。如果纹理为
GL\u RGBA
GL\u亮度\u ALPHA
或1.0,则为实际存储值

所以你正确地输出了alpha


如果输出alpha没有达到预期的混合效果,则必须将
glBlendFunc
设置为意外值,可能涉及
GL\u常量\u颜色

听起来像是在问,分配给GL\u FragColor的vec4的w分量的含义是什么。因此,你是对的,GL\u FragColor的w:)我把结果放在样品上。:)你的混合模式是什么?正如Tommy所说,你应该将你当前的混合模式添加到问题中。另一方面,您可以将最小/最大线替换为类似的:
clamp(alpha,0.0,1.0)
。谢谢。现在它工作得很好。vec4 col=纹理2d(u_纹理,v_texCoord);mediump float lightDistance=距离(gl_FragCoord,u_lightPosition);mediump float alpha=100.0/光距离;α=夹钳(α,0.0,1.0);gl_FragColor.a=1.0-α;
col.w = alpha;
col.w = 1.0