美文网首页
shader外发光 -简易版

shader外发光 -简易版

作者: 园Flora | 来源:发表于2021-04-07 11:13 被阅读0次
function __Class:setWaiFaGuang( spr,color)
    local vertSource1 = [[
        attribute vec4 a_position; 
        attribute vec2 a_texCoord; 
        attribute vec4 a_color; 
        #ifdef GL_ES  
        varying lowp vec4 v_fragmentColor;
        varying mediump vec2 v_texCoord;
        #else                      
        varying vec4 v_fragmentColor; 
        varying vec2 v_texCoord;  
        #endif    
        void main() 
        {
            gl_Position = CC_PMatrix * a_position; 
            v_fragmentColor = a_color;
            v_texCoord = a_texCoord;
        }
    ]]


    local fragSource1 =  [[
    #ifdef GL_ES 
        precision mediump float; 
    #endif  

    varying vec4 v_fragmentColor; 
    varying vec2 v_texCoord; 
    uniform float TouM;
    uniform float Add;
    uniform vec4 Lightcolor;


    void main(void)
    {
          vec4 o = vec4(1, 1, 1, 1);
          vec4 o1 = vec4(1, 1, 1, 1);
          vec4 o2 = vec4(1, 1, 1, 1);
          vec4 o3 = vec4(1, 1, 1, 1);
          vec4 o4 = vec4(1, 1, 1, 1);
          float add = Add;
          o *= texture2D(CC_Texture0, v_texCoord);
          o1 *= texture2D(CC_Texture0, vec2(v_texCoord.x-add, v_texCoord.y));
          o2 *= texture2D(CC_Texture0, vec2(v_texCoord.x-add, v_texCoord.y-add));
          o3 *= texture2D(CC_Texture0, vec2(v_texCoord.x+add, v_texCoord.y));
          o4 *= texture2D(CC_Texture0, vec2(v_texCoord.x-add, v_texCoord.y+add));
          float alp = (o.a+o1.a+o3.a+o2.a+o4.a)/5;
          float a = alp;
          a*=step(alp,TouM);
          a*=step(0,alp);
          a*=abs(sin(CC_Time[1]));

        gl_FragColor = Lightcolor*a;
    }

    ]]
    local Add = 1/math.max(spr:getContentSize().width,spr:getContentSize().height)*10
    dump(Add)
   local pProgram = cc.GLProgram:createWithByteArrays(vertSource1,fragSource1)
    local glProgramState = cc.GLProgramState:getOrCreateWithGLProgram(pProgram)
    glProgramState:setUniformVec4("Lightcolor",color);
    glProgramState:setUniformFloat("TouM", 0.9);
    glProgramState:setUniformFloat("Add", Add);

    
    -- local spr = spr:getVirtualRenderer():getSprite();

    spr:setGLProgram(pProgram)
    spr:setGLProgramState(glProgramState)
  
end

相关文章

网友评论

      本文标题:shader外发光 -简易版

      本文链接:https://www.haomeiwen.com/subject/jjoykltx.html