2dx-lua图片局部置灰

--1.置灰方法

function fw.graySprite(sprite,isGray)
    if isGray==nil or isGray then
        if not GrayProgram then
            fw.log("ai ya wo qu")
            local program = cc.GLProgram:create("gray.vsh", "gray.fsh")
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION) 
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
            program:link()
            program:updateUniforms()
            GrayProgram = program
        end
        
        sprite:setGLProgram(GrayProgram)
    else
        if not PtcProgram then
            local program = cc.GLProgram:create("ptc.vsh", "ptc.fsh")
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION) 
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
            program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
            program:link()
            program:updateUniforms()
            PtcProgram = program
        end
        
        sprite:setGLProgram(PtcProgram)
    end
end

--2.新建gray.sh文件,并添加代码:

attribute vec4 a_position;

attribute vec2 a_texCoord;

attribute vec4 a_color;

attribute float a_path;


varying vec4 v_fragmentColor;

varying vec2 v_texCoord;

varying vec4 v_position;

varying float v_path;


void main()

{

    gl_Position = CC_PMatrix * a_position;

    v_position = gl_Position;

    v_fragmentColor = a_color;

    v_texCoord = a_texCoord;

    v_path = a_path;

}

--3.新建gray.sh文件,并添加代码:

varying vec4 v_fragmentColor;

varying vec2 v_texCoord;

varying vec4 v_position;

varying float v_path;

//uniform sampler2D CC_Texture0;


void main()

{

    vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);

    float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));

    float colorg = dot(v_orColor.rgb, vec3(v_fragmentColor.r, v_fragmentColor.g, v_fragmentColor.b));

//    gl_FragColor = vec4(gray, gray, gray, v_orColor.a);

   

if (v_position.x < -350.0 && v_position.y < -200.0)

    {

        gl_FragColor = vec4(gray, gray, gray, v_orColor.a);

//       gl_FragColor = vec4(v_orColor.r, v_orColor.g, v_orColor.b, v_orColor.a);

    }

    else

    {

//        gl_FragColor = vec4(gray, gray, gray, v_orColor.a);

        gl_FragColor = vec4(v_orColor.r, v_orColor.g, v_orColor.b, v_orColor.a);

    }

}

--4.使用:

local sprite = cc.Sprite:create("other/ditu/road_01_kaitong.png")
sprite:setPosition(600, 300)
self:addChild(sprite)

fw.graySprite(sprite)

--5.说明:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值