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 ----------------------
浙公网安备 33010602011771号