Cocos2dx - CCSprite使用 shader生成自己想要的颜色的图片

前端之家收集整理的这篇文章主要介绍了Cocos2dx - CCSprite使用 shader生成自己想要的颜色的图片前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

分类cocos2dx 6914人阅读 评论(1) 收藏 举报
  1. @H_403_29@classBYGraySprite:publicCCSprite{
  2. @H_403_29@
  3. public:
  4. @H_403_29@BYGraySprite();
  5. virtual~BYGraySprite();
  6. @H_403_29@staticBYGraySprite*create(constchar*pszFileName);
  7. @H_403_29@boolinitWithTexture(CCTexture2D*pTexture,constCCRect&tRect);
  8. virtualvoiddraw();
  9. @H_403_29@};
copy
    @H_403_29@#include"BYGraySprite.h"
  1. @H_403_29@BYGraySprite::BYGraySprite(){
  2. @H_403_29@
  3. @H_403_29@}
  4. @H_403_29@BYGraySprite::~BYGraySprite(){
  5. @H_403_29@BYGraySprite*BYGraySprite::create(char*pszFileName){
  6. @H_403_29@BYGraySprite*graySprite=newBYGraySprite;
  7. if(graySprite&&graySprite->initWithFile(pszFileName)){
  8. @H_403_29@graySprite->autorelease();
  9. returngraySprite;
  10. @H_403_29@}else{
  11. @H_403_29@CC_SAFE_RELEASE(graySprite);
  12. returnNULL;
  13. @H_403_29@}
  14. boolBYGraySprite::initWithTexture(CCTexture2D*pTexture,153); font-weight:bold; background-color:inherit">constCCRect&tRect){
  15. do{
  16. @H_403_29@CC_BREAK_IF(!CCSprite::initWithTexture(pTexture,tRect));
  17. @H_403_29@GLchar*pszFragSource=
  18. @H_403_29@"#ifdefGL_ES\n\
  19. @H_403_29@precisionmediumpfloat;\n\
  20. @H_403_29@#endif\n\
  21. @H_403_29@uniformsampler2Du_texture;\n\
  22. @H_403_29@varyingvec2v_texCoord;\n\
  23. @H_403_29@varyingvec4v_fragmentColor;\n\
  24. voidmain(void)\n\
  25. @H_403_29@{\n\
  26. @H_403_29@//ConverttogreyscaleusingNTSCweightings\n\
  27. floatgrey=dot(texture2D(u_texture,v_texCoord).rgba,vec4(0.5,0.0,0.7));\n\
  28. @H_403_29@gl_FragColor=vec4(grey,0.0);\n\
  29. @H_403_29@}";
  30. @H_403_29@CCGLProgram*pProgram=newCCGLProgram();
  31. @H_403_29@pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert,pszFragSource);
  32. this->setShaderProgram(pProgram);
  33. @H_403_29@pProgram->release();
  34. @H_403_29@CHECK_GL_ERROR_DEBUG();
  35. this->getShaderProgram()->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);
  36. this->getShaderProgram()->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);
  37. this->getShaderProgram()->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);
  38. @H_403_29@CHECK_GL_ERROR_DEBUG();
  39. this->getShaderProgram()->link();
  40. this->getShaderProgram()->updateUniforms();
  41. returntrue;
  42. while(0);
  43. false;
  44. voidBYGraySprite::draw(){
  45. @H_403_29@ccGLEnableVertexAttribs(kCCVertexAttribFlag_PosColorTex);
  46. @H_403_29@ccGLBlendFunc(m_sBlendFunc.src,m_sBlendFunc.dst);
  47. this->getShaderProgram()->use();
  48. this->getShaderProgram()->setUniformForModelViewProjectionMatrix();
  49. @H_403_29@ccGLBindTexture2D(this->getTexture()->getName());
  50. @H_403_29@#definekQuadSizesizeof(m_sQuad.bl)
  51. longoffset=(long)&m_sQuad;
  52. @H_403_29@//vertex
  53. @H_403_29@intdiff=offsetof(ccV3F_C4B_T2F,vertices);
  54. @H_403_29@glVertexAttribPointer(kCCVertexAttrib_Position,3,GL_FLOAT,GL_FALSE,kQuadSize,(void*)(offset+diff));
  55. //texCoods
  56. @H_403_29@diff=offsetof(ccV3F_C4B_T2F,texCoords);
  57. @H_403_29@glVertexAttribPointer(kCCVertexAttrib_TexCoords,2,0); background-color:inherit">//color
  58. @H_403_29@glVertexAttribPointer(kCCVertexAttrib_Color,4,GL_UNSIGNED_BYTE,GL_TRUE,248)"> @H_403_29@glDrawArrays(GL_TRIANGLE_STRIP,4);
  59. @H_403_29@CC_INCREMENT_GL_DRAWS(1);
  60. @H_403_29@}

使用

copy
    @H_403_29@BYGraySprite*graySprite=BYGraySprite::create("boss.png");
  1. @H_403_29@graySprite->setPosition(ccp(480,320));
  2. @H_403_29@addChild(graySprite);
原文链接:https://www.f2er.com/cocos2dx/345276.html

猜你在找的Cocos2d-x相关文章