【问题标题】:Changing the alpha property of gl color更改 gl 颜色的 alpha 属性
【发布时间】:2020-01-28 12:30:30
【问题描述】:

我使用下面的代码来降低或提高gl_FragColor的亮度。

 void main()
 {
     #ifdef SHADER_API_GLES3
     vec2 uvTop = mix(_UvTopLeftRight.xy, _UvTopLeftRight.zw, gl_MultiTexCoord0.x);
     vec2 uvBottom = mix(_UvBottomLeftRight.xy, _UvBottomLeftRight.zw, gl_MultiTexCoord0.x);
     textureCoord = mix(uvTop, uvBottom, gl_MultiTexCoord0.y);

      gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
      #endif
 }

但是,如何更改 gl_color 的 alpha 属性?

我尝试将其更改为 gl_FragColor.a = 100,但由于某种原因,它只是创建了奇怪的线条。

我错过了什么吗?

【问题讨论】:

    标签: unity3d opengl glsl shader fragment-shader


    【解决方案1】:

    颜色通道和 Alpha 通道的值是 [0.0, 1.0] 范围内的归一化浮点值。
    alpha 通道可以通过设置gl_FragColor.a 来改变。例如:
    (另见Swizzling

    gl_FragColor.a = 0.6;
    

    gl_FragColor = vec4(pow(texture(_MainTex, textureCoord).rgb, vec3(2.2)), 0.6);
    

    进一步查看The OpenGL Shading Language specification:

    5.5 矢量和标量分量和长度

    向量或标量的分量名称用一个字母表示。为方便起见,基于位置、颜色或纹理坐标向量的常用用法,每个组件都关联了几个字母。可以通过在变量名称后面加上句点 (.) 和组件名称来选择各个组件。

    支持的组件名称有:

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

    • {r, g, b, a} 在访问表示颜色的向量时很有用

    • {s, t, p, q} 在访问表示纹理坐标的向量时很有用/>

    【讨论】:

    • 这工作正常.. 但你能告诉我为什么显示有一些小故障吗?
    • @user1241241 我不知道。您提供的代码要少得多。可能这是一个新问题,完全不同的问题。
    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2019-02-16
    • 2018-11-26
    • 2019-01-30
    • 2011-10-21
    • 2016-10-15
    相关资源
    最近更新 更多