您的位置:首页 > 编程语言 > Lua

quick lua 使用之通过filter来给精灵描边 (shader的使用)

2018-03-02 16:08 656 查看
shader文件内容如下:
varying vec2 v_texCoord;
varying vec4 v_fragmentColor;

uniform vec3 u_outlineColor;
uniform float u_threshold;
uniform float u_radius;

void main()
{
    float radius = u_radius;
    vec4 accum = vec4(0.0);
    vec4 normal = vec4(0.0);

    normal = texture2D(CC_Texture0, vec2(v_texCoord.x, v_texCoord.y));

    accum += texture2D(CC_Texture0, vec2(v_texCoord.x - radius, v_texCoord.y - radius));
    accum += texture2D(CC_Texture0, vec2(v_texCoord.x + radius, v_texCoord.y - radius));
    accum += texture2D(CC_Texture0, vec2(v_texCoord.x + radius, v_texCoord.y + radius));
    accum += texture2D(CC_Texture0, vec2(v_texCoord.x - radius, v_texCoord.y + radius));

    accum *= u_threshold;
    accum.rgb =  u_outlineColor * accum.a;
    accum.a = 0.0;

    normal = ( accum * (1.0 - normal.a)) + (normal * normal.a);

    gl_FragColor = v_fragmentColor * normal;
}
fsh文件搞好后,保存到你项目能够读到的地方,比如,res目录下
第一种方法方法如下(其实完全可以参考sample中得filter代码):

?
这种方法会直接生成一个带描边的精灵,那么你可能要问,如果不想一开始就描边而是后面需要的时候才描边呢?那么就需要第二种方法了
newFilteredSprite创建的精灵跟普通精灵操作一样,不用担心

第二种使用方法的代码如下:

?
点击按钮就可以看到精灵图片被描边了
第二种方法要注意的是上面创建精灵的代码

移除效果:self.sp:clearFilter()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shader quick