shader半透明、描边、圆形图片

vertex.glsl:

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoords;

uniform mat4 uProjection;
uniform mat4 uView;

out vec2 fTexCoords;

void main()
{
    fTexCoords = aTexCoords;
    gl_Position = uProjection * uView * vec4(aPos, 1.0);
} 

fragment.glsl:

#version 330 core
uniform sampler2D TEX_SAMPLER;

in vec2 fTexCoords;

const float lineWidth = 0.005;
const vec3  lineColor = vec3(1.0, 0.0, 1.0);
const float transparen = 0.7;

void main() 
{
    vec4 texColor = texture2D(TEX_SAMPLER,fTexCoords);
    //透明
    if (texColor.a != 0.0){
        texColor.a = transparen; 
    } 
    //描边
    if (texColor.a == 0.0){
        float a = 
            texture2D(TEX_SAMPLER, vec2(fTexCoords.x + lineWidth, fTexCoords.y)).a +
			texture2D(TEX_SAMPLER, vec2(fTexCoords.x, fTexCoords.y - lineWidth)).a +
			texture2D(TEX_SAMPLER, vec2(fTexCoords.x - lineWidth, fTexCoords.y)).a +
			texture2D(TEX_SAMPLER, vec2(fTexCoords.x, fTexCoords.y + lineWidth)).a;

		if (texColor.a < 1.0 && a > 0.0)
			texColor = vec4(lineColor,transparen);
        else 
            discard;
    }
    //圆形
    vec2 center = vec2(0.5,0.5);
    float radius = 0.4;
    float res = sqrt(pow((fTexCoords.x - center.x),2.0)+pow((fTexCoords.y - center.y),2.0));  
    if(res > radius) {
        discard;    
    } 
    gl_FragColor = texColor;
}   

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值