cocos2dx 3.x版本 Sprite 灰度和彩色切换,无偏移
2015-04-12 14:56
429 查看
我从cocos2dx 3.x开始研究的,发现网上有很多在2.x变灰的例子,甚至需要改源码,而我个人偏向于静态方法的封装的用法,所以整合总结并测试了如下方法。在cocos2dx 3.4版本通过,关于偏移问题确实恶心,查阅很多博文已解决,有了这个方法我就准备在下一篇实现一个技能CD效果的通用方案。
static void SwitchGray (Sprite *sp, bool isGray) { GLchar* grayvsh = "attribute vec4 a_position; \n \ attribute vec2 a_texCoord; \n \ attribute vec4 a_color; \n \ varying vec4 v_fragmentColor;\n \ varying vec2 v_texCoord;\n \ void main(void) \n \ { \n \ gl_Position = CC_PMatrix * a_position;\n \ v_fragmentColor = a_color;\n \ v_texCoord = a_texCoord;\n \ }"; if(isGray) { GLchar* grayfsh= "varying vec4 v_fragmentColor;\n \ varying vec2 v_texCoord;\n \ void main()\n \ {\n \ vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\n \ float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));\n \ gl_FragColor = vec4(gray, gray, gray, v_orColor.a);\n \ }"; GLProgram* pProgram = new GLProgram(); pProgram->initWithVertexShaderByteArray(grayvsh, grayfsh); sp->setShaderProgram(pProgram); pProgram->release(); CHECK_GL_ERROR_DEBUG(); } else { GLProgram* pProgram = new GLProgram(); //pProgram->initWithFilenames("gray.vsh", "color.fsh"); pProgram->initWithVertexShaderByteArray(grayvsh, ccPositionTextureColor_frag); sp->setShaderProgram(pProgram); pProgram->release(); CHECK_GL_ERROR_DEBUG(); } sp->getShaderProgram()->addAttribute(GLProgram::ATTRIBUTE_NAME_POSITION,kCCVertexAttribFlag_Position); sp->getShaderProgram()->addAttribute(GLProgram::ATTRIBUTE_NAME_POSITION, kCCVertexAttrib_Position); sp->getShaderProgram()->addAttribute(GLProgram::ATTRIBUTE_NAME_COLOR, kCCVertexAttrib_Color); sp->getShaderProgram()->addAttribute(GLProgram::ATTRIBUTE_NAME_TEX_COORD, kCCVertexAttrib_TexCoords); CHECK_GL_ERROR_DEBUG(); sp->getShaderProgram()->link(); CHECK_GL_ERROR_DEBUG(); sp->getShaderProgram()->updateUniforms(); CHECK_GL_ERROR_DEBUG(); }
相关文章推荐
- Cocos2dx杂记:Cocos2d 3.x版本 MeshSprite Cocos的网格变换(非原创)
- cocos2dx 3.x以上版本 lua中使用protobuf
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- 在cocos2dx 3.x 中实现带颜色滤镜的Sprite
- Cocos2dx-3.x中常用切换场景特效和方式
- 为cocos2dx-3.x以上版本工程指定统一通用的引擎路径
- cocos2dx-3.0以上版本之 创建Sprite精灵的6种形式
- cocos2dx 3.x版本多边形刚体
- Lua_Cocos2dx 3.x版本中Lua注册事件函数
- 探cocos2dx对游戏精灵(sprite_nodes)的实现。(源码版本2.2.3)
- Cocos2dx:Sprite切换图片
- Cocos2dx 3.x版本Cocos2dxDownloader.java文件报错
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- mac环境下cocos2dx引擎3.x版本的创建工程步骤
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
- cocos2dx 3.x中灰度精灵的用法
- cocos2dx 3.x版本 openssl 更新的问题 最后又3.x版本最新的libs下载地址
- cocos2dx 3.x版本搭建Mac环境工程(创建一个新的工程)百分百可行
- cocos2dx3.2版本利用shader实现sprite灰态图的正确方法
- cocos2dx 3.x以上(Sprite精灵类的相关属性与创建)