加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx-lua实现遮罩效果

发布时间:2020-12-14 17:17:27 所属栏目:百科 来源:网络整理
导读:工作需要实现遮罩效果,之前quick-cocos2dx 2.0的实现版本(纯象素在cpu中的操作所以效率低),升级到quick cocos2dx 3.3版本后,shader功能有有强,所以利用shader实现遮罩效果。 quick coco2dx 2.2.6实现方法: function BasicMovie:buildMasked(__mask,__

工作需要实现遮罩效果,之前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_ZERO
 local __pb = ccBlendFunc()
 __pb.src = GL_DST_ALPHA
 __pb.dst = GL_ZERO
 local __maskSprite = display.newSprite(__mask):align(display.LEFT_BOTTOM,0)
 __maskSprite:setBlendFunc(__mb)
 local __picSprite = display.newSprite(__pic):align(display.LEFT_BOTTOM,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_ES
precision mediump float;
#endif

varying 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_ES
precision mediump float;
#endif

varying 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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读