AKever

导航

cocos2dx setGrayPng

cocos2dx 3.5版本,vs2012

 辅助文件:gray.fsh, gray.vsh

gray.fsh

varying vec4 v_fragmentColor;    
varying vec2 v_texCoord;    
        
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));
    gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
}                

gray.vsh

attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
                    
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
                                
void main()    
{                            
    gl_Position = CC_MVPMatrix * a_position;
    v_fragmentColor = a_color;
    v_texCoord = a_texCoord;
}

-- 1.将这两个文件(gray.fsh & gray.vsh)放在资源目录下

-- 2.设置逻辑:

void GrayUtil::setGray(Sprite* sprite)
{
    if(sprite)
    {
        GLProgram * p = new GLProgram();
        p->initWithFilenames("gray/gray.vsh", "gray/gray.fsh");
        p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
        p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
        p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);
        p->link();
        p->updateUniforms();
        sprite->setShaderProgram(p);
    }
}

-- 3.调用逻辑

    //setGray(灰化)
    auto sprite2 = Sprite::create("gray/hero.png");
    sprite2->setAnchorPoint(Point(0.5, 0.5));
    sprite2->setPosition(Point(visibleSize.width / 3, visibleSize.height / 3));
    this->addChild(sprite2);
    GrayUtil::setGray(sprite2);

 

----------  end  ----------------------

posted on 2015-05-06 11:22  AKever  阅读(697)  评论(0)    收藏  举报