cocos2d-x之字体描边效果shader实现

#ifdef GL_ES
precision highp float;
#endif 
 
uniform sampler2D u_texture;
varying vec2 v_texCoord;
varying vec4 v_fragmentColor;

//模糊blur的步长,这里只是demo,正式使用由外部传入(uniform类型)
const vec2 step = vec2(0.003, 0.002);

void main(void)
{ 
	//获得当前点的颜色
    vec3 color = texture2D(u_texture, v_texCoord).rgb;
    //该权值用于自身对结果的影响
    float weight = 30.0;
    //加入alpha权重,alpha越大,权值assess越小
    float assess = pow(texture2D(u_texture, v_texCoord).a, 3)*weight;
    //开始计算平均alpha值
    float alpha = assess;
    //以下为高斯模糊(仅对alpha)
    alpha += texture2D( u_texture, v_texCoord.st + vec2( -3.0*step.x, -3.0*step.y ) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( -2.0*step.x, -2.0*step.y ) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( -1.0*step.x, -1.0*step.y ) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( 0.0 , 0.0) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( 1.0*step.x,  1.0*step.y ) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( 2.0*step.x,  2.0*step.y ) ).a;
	alpha += texture2D( u_texture, v_texCoord.st + vec2( 3.0*step.x, -3.0*step.y ) ).a;
	alpha /= 7.0+assess;
	//alpha越大,对颜色影响越小
    color = clamp(color + (alpha - 1.0), 0, 1.0);
    //进一步加强颜色的区分
    color = pow(color, vec3(3.0, 3.0, 3.0)); 
    //输出
    gl_FragColor = vec4(color.r, color.g, color.b, alpha);
} 

算法公众号:acm-clan


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值