cocos2dx让图片或按钮变灰

本文介绍了如何在cocos2dx 3.4版本中使用顶点和片段着色器来使图片和按钮显示为灰色。通过添加自定义GLProgram到GLProgramCache,可以方便地应用到Sprite和Menu的按钮上,达到预期的变灰效果。同时,讨论了GLProgram的内存管理和命名规范,建议不释放GLProgram,避免与内置名称冲突。
摘要由CSDN通过智能技术生成

目的

有时候做需要让图片或者按钮变灰,效果比较好的是修改着色器程序。

环境

1、cocos2dx版本
cocos3.4
2、vs版本
vs2013

具体步骤

1、添加顶点着色器代码字符串。

GLchar my_vert[] = "\
attribute vec4 a_position;\n\
attribute vec2 a_texCoord;\n\
attribute vec4 a_color;\n\
\n\
#ifdef GL_ES    \n\
varying lowp vec4 v_fragmentColor;   \n\
varying mediump vec2 v_texCoord;   \n\
#else  \n\
varying vec4 v_fragmentColor;\n\
varying vec2 v_texCoord;  \n\
#endif  \n\
\n\
void main()  \n\
{  \n\
	gl_Position = CC_PMatrix * a_position;  \n\
	v_fragmentColor = a_color;  \n\
	v_texCoord = a_texCoord;  \n\
}";

2、添加片段着色器代码字符串

GLchar my_frag[] = "\
#ifdef GL_ES  \n\
precision lowp float; \n\
#endif  \n\
\n\
varying vec4 v_fragmentColor;  \n\
varying vec2 v_texCoord;  \n\
\n\
void main()  \n\
{\n\
	gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\n\
	float f=(gl_FragColor.r+gl_FragColor.g+gl_FragColor.b)/3.0f; \n\
	gl_FragColor=vec4(f,f,f,gl_FragColor.a);\n\
}";

3、创建新的GLProgram

	GLProgram *p = GLProgram::createWithByteArrays(my_vert, my_frag);
	

4、将GLProgram加入GLProgramCache

	GLProgramCache::getInstance()->addGLProgram(p, "my_pro");

5、替换掉目标的GLProgram
图片Sprite

    auto sprite = Sprite::create("HelloWorld.png");
	sprite->setGLProgram(p);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值