cocos-lua 马赛克效果记录

我不太懂shader和glsl,下面代码是我参考网上然后写出来的,线上项目使用中,大家可以直接cpoy拿去用,其中最关键的代码是:texCoord = floor(texCoord * u_count) / u_count; 这行。感谢各路大神的无私奉献。

 

-------------------------------------------------------------------------------------------------------

--

--  马赛克效果

--

 

local EffectMosaic = class("mosaic")

 

function EffectMosaic:ctor()

    wwlog("EffectMosaic:ctor()")

end

 

--[[

    param = {

        ["attachToSprite"] = sprite, -- 效果要附着的图片

        ["mosiacCount"] = mosiacCount, -- 图片里每行的马赛克方块个数,浮点数,值越大,颗粒越小

    }

--]]

function EffectMosaic:attachToSprite(param)

    -- 顶点着色器

    local vert = [[

        // 这三个是cocos内置的变量

        attribute vec4 a_position;

        attribute vec2 a_texCoord;

        attribute vec4 a_color;

        // 自己定义的用于交换的变量,传入值给片段着色器使用

        varying lowp vec4 v_fragmentColor;

        varying highp vec2 v_texCoord;

        void main(void)

        {

            gl_Position = CC_PMatrix * a_position;

            // 将值通过 varying 变量传给片段着色器使用

            v_fragmentColor = a_color;

            v_texCoord = a_texCoord;

        }

    ]]

    -- 片段着色器

    local frag = [[

        // 自己定义的用于程序传入shader中的变量

        uniform float u_count;

        // 自己定义的用于交换的变量,接收顶点着色器传过来的值

        varying lowp vec4 v_fragmentColor;

        varying highp vec2 v_texCoord;

        void main(void)

        {

            // 因为不能对 varying 变量进行直接操作,这里重新定义一个局部变量用于操作

            vec2 texCoord = v_texCoord;

            texCoord = floor(texCoord * u_count) / u_count;

            gl_FragColor = texture2D(CC_Texture0, texCoord) * v_fragmentColor;

        }

    ]]

 

    -- 1.创建glProgram

    local glProgram = cc.GLProgram:createWithByteArrays(vert, frag)

    -- 注意下面的2和3这两步,如果不需要外部设置值给shader,那么可以不用

    -- 2.获取glProgramState

    local glProgramState = cc.GLProgramState:getOrCreateWithGLProgram(glProgram)

    -- 3.设置属性值

    glProgramState:setUniformFloat("u_count", param.mosiacCount or 10)

    -- 4,最终设置

    local sprite = param.attachToSprite

    if (nil ~= sprite) then

        sprite:setGLProgram(glProgram)

    end

end

return EffectMosaic

-------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值