cocos2dx 图片变灰及正常显示实现(lua可以调用)
来源:互联网 发布:河南软件协会 编辑:程序博客网 时间:2024/05/07 08:31
图片变灰, 采用shader就可以实现,
有2中方法,
1, 像CCSprite一样create
2. 把CCSprite传进来, 并把图片要不要变灰的flag传进来, 具体实现看代码和后面的使用方法
-----------------------------------------
GraySprite.h
//// GraySprite.h// goddess//// Created by rekoo on 13-7-23.////#ifndef __goddess__GraySprite__#define __goddess__GraySprite__#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;class GraySprite : public CCSprite{public: GraySprite(); ~GraySprite(); bool initWithTexture(CCTexture2D* texture, const CCRect& rect); void draw(); void initProgram(); void listenBackToForeground(CCObject *obj); static GraySprite* create(const char *pszFileName); };#endif /* defined(__goddess__GraySprite__) */
GraySprite.cpp
//// GraySprite.cpp// goddess//// Created by rekoo on 13-7-23.////// 用shader创建灰度图, 用法跟sprite一样// lua用法: local sprite = GraySprite:create("pic.png")#include "GraySprite.h"GraySprite::GraySprite(){}GraySprite::~GraySprite(){}GraySprite* GraySprite::create(const char *pszFileName){ GraySprite* pRet = new GraySprite(); if (pRet && pRet->initWithFile(pszFileName)) { pRet->autorelease(); } else { CC_SAFE_DELETE(pRet); } return pRet;}void GraySprite::listenBackToForeground(CCObject *obj){ setShaderProgram(NULL); initProgram();}bool GraySprite::initWithTexture(CCTexture2D* texture, const CCRect& rect){ if( CCSprite::initWithTexture(texture, rect) ) { CCSize s = getTexture()->getContentSizeInPixels(); this->initProgram(); return true; } return false;}void GraySprite::initProgram(){// GLchar * fragSource = (GLchar*) CCString::createWithContentsOfFile(// CCFileUtils::sharedFileUtils()->fullPathForFilename("Shaders/example_Blur.fsh").c_str())->getCString(); const GLchar * pfrag = "#ifdef GL_ES \n \ precision mediump float; \n \ #endif \n\ uniform sampler2D u_texture; \n \ varying vec2 v_texCoord; \n \ varying vec4 v_fragmentColor; \n \ void main(void) \n \ { \n \ float alpha = texture2D(u_texture, v_texCoord).a; \n \ float grey = dot(texture2D(u_texture, v_texCoord).rgb, vec3(0.299,0.587,0.114)); \n \ gl_FragColor = vec4(grey, grey, grey,alpha); \n \ } "; CCGLProgram* pProgram = new CCGLProgram(); pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert, pfrag); setShaderProgram(pProgram); pProgram->release(); CHECK_GL_ERROR_DEBUG(); getShaderProgram()->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position); getShaderProgram()->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color); getShaderProgram()->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords); CHECK_GL_ERROR_DEBUG(); getShaderProgram()->link(); CHECK_GL_ERROR_DEBUG(); getShaderProgram()->updateUniforms(); }void GraySprite::draw(){ ccGLEnableVertexAttribs(kCCVertexAttribFlag_PosColorTex ); ccBlendFunc blend = getBlendFunc(); ccGLBlendFunc(blend.src, blend.dst); getShaderProgram()->use(); getShaderProgram()->setUniformsForBuiltins(); ccGLBindTexture2D( getTexture()->getName()); // // Attributes //#define kQuadSize sizeof(m_sQuad.bl) long offset = (long)&m_sQuad; // vertex int diff = offsetof( ccV3F_C4B_T2F, vertices); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff)); // texCoods diff = offsetof( ccV3F_C4B_T2F, texCoords); glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff)); // color diff = offsetof( ccV3F_C4B_T2F, colors); glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, kQuadSize, (void*)(offset + diff)); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); CC_INCREMENT_GL_DRAWS(1);}
--------------------------------
使用例子:
1. GraySprite * gs = GraySprite::create("01.png");
剩下跟CCSprite一样, 设置位置, addChild等等
2. CCSprite * cs = CCSprite::create("02.png");
GraySprite::setGray(cs, 1); //变灰
GraySprite::setGray(cs, 0); //原色
-----------------------------
把GraySprte暴露出去, lua就可以调用, 很方便
0 0
- cocos2dx 图片变灰及正常显示实现(lua可以调用)
- cocos2dx lua版本让图片变灰
- cocos2dx 3.2 图片以及按钮变灰
- Cocos2dx-- 图片置灰实现
- cocos2dx精灵变灰
- 用css3实现图片变灰
- AndEngine图片变灰效果实现
- Swing图片变灰
- WPF 图片变灰
- css 图片变灰
- 图片变灰
- cocos2dx lua中如何把按钮设成不可点击后 按钮变灰
- (表单重复提交)jquery验证 通过时,提交按钮变灰,不通过时正常显示
- css3 设置图片变灰(在微信端不能正常) 和透明
- CSS使图片变灰
- WM图片变灰处理
- cocos2d-x 图片变灰
- 图片变灰shader mark
- Ubuntu安装ssh服务器
- 新浪Sae 上使用ThinkPHP
- 强连通图的算法
- BitNami一键安装Redmine
- 数据库事务的4个特性
- cocos2dx 图片变灰及正常显示实现(lua可以调用)
- PLC总结
- 新blog地址
- 取数据集代码编辑器
- UVA - 839 Not so Mobile
- 工作小记——拉消息机制
- 成佩涛——由浅入深探究mysql索引结构原理、性能分析与优化
- 【重读设计模式】代理模式
- 杭电acm2033人见人爱A+B