shader实现遮罩效果
来源:互联网 发布:ubuntu 删除非空目录 编辑:程序博客网 时间:2024/05/16 05:40
工作需要实现遮罩效果,之前quick-cocos2dx 2.0的实现版本(纯象素在cpu中的操作所以效率低),升级到quick cocos2dx 3.3版本后,shader功能有有强,所以利用shader实现遮罩效果。
quick coco2dx 2.2.6实现方法:
function BasicMovie:buildMasked(__mask,__pic)local __mb = ccBlendFunc()__mb.src = GL_ONE__mb.dst = GL_ZEROlocal __pb = ccBlendFunc()__pb.src = GL_DST_ALPHA__pb.dst = GL_ZEROlocal __maskSprite = display.newSprite(__mask):align(display.LEFT_BOTTOM, 0, 0)__maskSprite:setBlendFunc(__mb)local __picSprite = display.newSprite(__pic):align(display.LEFT_BOTTOM, 0, 0)__picSprite:setBlendFunc(__pb)local __maskSize = __maskSprite:getContentSize()local __canva = CCRenderTexture:create(__maskSize.width,__maskSize.height)__canva:begin()__maskSprite:visit()__picSprite:visit()__canva:endToLua() -- self:setScaleX(-1) self:setDirc(self.dirc,false) self:setFlipY(true) self:setTexture(__canva:getSprite():getTexture()) end
该方法是官方提供的方法,是通过调用node的visit进行绘图的,自然效率低。
网上资料实现方法:
#ifdef GL_ESprecision mediump float;#endifvarying vec4 v_fragmentColor;varying vec2 v_texCoord;uniform sampler2D u_mask_texture;void main() {vec4 mask_FragColor = texture2D(u_mask_texture, v_texCoord); gl_FragColor = v_fragmentColor*texture2D(CC_Texture0, v_texCoord); gl_FragColor.a = mask_FragColor.r;}
直接拿来用是有问题,并没有处理透明部分,自已改进方法如下:
#ifdef GL_ESprecision mediump float;#endifvarying vec4 v_fragmentColor;varying vec2 v_texCoord;uniform sampler2D u_mask_texture;void main() { vec4 mask_FragColor = texture2D(u_mask_texture, v_texCoord); if (mask_FragColor.a <= 0) { mask_FragColor.a=0; gl_FragColor = mask_FragColor; return; } gl_FragColor = v_fragmentColor*texture2D(CC_Texture0, v_texCoord);}
0 0
- 【Shader】Shader实现头像遮罩效果
- shader实现遮罩效果
- Shader实现头像遮罩效果
- unity shader 遮罩效果
- unity shader-遮罩效果
- shader实现凹凸效果
- 【Unity&Shader】遮罩效果黑暗
- shader实现描边效果
- Unity喷墨效果Shader实现
- 【Shader】通过Shader实现森林树木随风摆动效果
- Unity Shader——Shader实现大海的波涛效果
- android中使用shader实现渐变效果
- Untiy Shader电流效果的实现。吼吼。。。
- Unity3D 通过 shader 实现流光效果
- 使用OpenGL Shader实现放大镜效果
- WebGL+shader实现素描效果渲染
- 使用OpenGL Shader实现放大镜效果
- Unity用Shader实现波浪效果
- Get与Post区别与范例讲解
- linux下搭建 ipsec vpn服务器(centos+ubuntu)
- input搜索框
- 响应式布局所使用的的尺寸
- HDU-2795-Billboard
- shader实现遮罩效果
- java回调函数
- [51nod1167]计算递推
- 什么是原子操作
- C#IDisposable 接口&资源释放
- JS之DOM
- 10、使用双重循环打印图形
- js节点和无缝滚动
- Go指南练习之《map》