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()
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()
相关文章推荐
- quick使用之通过filter来给精灵描边
- quick使用之通过filter来给精灵描边
- quick-lua shader 的使用
- HTMLParser使用详解(3)- 通过Filter访问内容
- Quick-Cocos2d-x 3.3绑定自定义类至Lua(四)使用绑定C++至Lua的自定义类
- quick3.3final精灵使用shader心得记录
- lua中通过require使用C/C++动态库
- Unity使用C#通过自定义Loader加载指定目录的Lua脚本
- Odoo(OpenERP)应用实践: 使用db-filter参数实现通过域名指定访问哪个数据库
- 使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
- quick-3.5 绑定自定义C++类到Lua并使用cocos code ide 调式
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- cocos2d lua使用 shader
- 使用lua更新脚本后,xcode下游戏资源没有更新的问题[quick-cocos2d-x]
- cocos2d-quick-lua 中使用百度翻译
- 通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控
- 在quick-cocos2d-x中添加自定义的类给lua使用
- 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)
- Cocos2d-x 3.2 Lua项目通过LuaSQLite3使用Sqlite3问题总结
- HTMLParser使用详解(3)- 通过Filter访问内容