
之前一直在TestCpp中看到shader可以把图片变成灰色的,也没有自己手动写过,最近在网上找了些博客或者论坛了解了一些。
现在这个里面使图片变成灰色的,毕竟我也是对OpenGL了解的不是很多,只是在这边介绍他的一些实用方法。
具体代码:
bool GLSprite::init(){ auto spriteTest = Sprite::create("wall.png"); spriteTest->setposition(Point(400,240)); this->addChild(spriteTest,-1); auto spritenor = Sprite::create("Tag.png"); spritenor->setposition(Point(300,240)); this->addChild(spritenor,2); auto spriteGray = Sprite::create("Tag.png"); spriteGray->setposition(Point(500,240)); spriteGray->setTag(102); this->addChild(spriteGray,2); graySprite(spriteGray); auto spriteClose = Sprite::create("Closenormal.png"); auto spriteCloseSelect = Sprite::create("Closenormal.png"); spriteCloseSelect->setScale(1.2f); spriteCloseSelect->setposition(Point( spriteClose->getBoundingBox().size.wIDth / 2 - spriteCloseSelect->getBoundingBox().size.wIDth / 2,spriteClose->getBoundingBox().size.height / 2 - spriteCloseSelect->getBoundingBox().size.height / 2)); auto itemClose = MenuItemSprite::create(spriteClose,spriteCloseSelect,CC_CALLBACK_1(GLSprite::close,this)); itemClose->setposition(Point(780,460)); Menu* pMenu = Menu::create(itemClose,NulL); pMenu->setposition(Point::ANCHOR_BottOM_left); this->addChild(pMenu,2);// spriteGray->setGLProgramState(GLProgramState::getorCreateWithGLProgramname(GLProgram::SHADER_name_position_TEXTURE_color_NO_MVP)); return true;}voID GLSprite::graySprite(Sprite* sprite){ if(sprite) { GLProgram * p = new GLProgram(); p->initWithfilenames("Shader/gray.vsh","Shader/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); } }voID GLSprite::close(Ref* pSender){ auto sprite = (Sprite*)this->getChildByTag(102); sprite->setShaderProgram(shadercache::getInstance()->getProgram(GLProgram::SHADER_name_position_TEXTURE_color_NO_MVP));}
里面使用了两张相同的图片作为对比效果如图:
之前在写的过程中想到如果想把图片的颜色改变回来怎么办呢?
代码中的Close()方法中有实现了。
在资源文件中同样需要使用到的是 .vsh 和 .fsh 文件。具体在下面的代码中贴出来,就不需要在跑到其他位置下载了。
gray.fsh文件
varying vec4 v_fragmentcolor; varying vec2 v_texCoord; uniform sampler2D CC_Texture0; // gray.fshvoID 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,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_PMatrix * a_position; v_fragmentcolor = a_color; v_texCoord = a_texCoord;} 总结 以上是内存溢出为你收集整理的在Cocos2d-x 3.0中使用opengl shader全部内容,希望文章能够帮你解决在Cocos2d-x 3.0中使用opengl shader所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)