shader实现图片阴影

来源:互联网 发布:mac淘宝卖家 编辑:程序博客网 时间:2024/05/18 17:58

1.代码

auto sprite = Sprite::create("HelloWorld.png");sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));this->addChild(sprite, 0);    auto shader = GLProgram::createWithFilenames("shadow.vsh", "shadow.fsh");shader->use();shader->setUniformsForBuiltins();sprite->setGLProgram(shader);
2.shadow.vsh

attribute vec4 a_position;attribute vec2 a_texCoord;varying vec2 v_texCoord;void main(){    gl_Position = CC_PMatrix * a_position;    v_texCoord = a_texCoord;}
3.shadow.fsh

varying vec2 v_texCoord;vec4 composite(vec4 over, vec4 under){    return over + (1.0 - over.a) * under;} void main(){    vec2 shadowOffset = vec2(0.03, 0.03);    vec4 textureColor = texture2D(CC_Texture0, v_texCoord + shadowOffset);    float shadowMask = texture2D(CC_Texture0, v_texCoord).a;    const float shadowOpacity = 0.5;    vec4 shadowColor = vec4(0, 0, 0, shadowMask * shadowOpacity);    gl_FragColor = composite(textureColor, shadowColor);}

4.效果

原图:


shader后:




0 0
原创粉丝点击