前言
之前写了cocos2dx中让图片变灰的原理。最近想要将Sprite改为自己想要的颜色。以为只需要调整rgb值即可:
1 | // 比如颜色变红 |
如果贴图是白色的情况下是没问题的如下:
但是如果图片是带有颜色的,就变成了下面的样子了…
所以上面方法是行不通的。
正确修改Sprite颜色
原理
- 计算原图的灰度
1
float grey = gl_FragColor.r * 0.299 + gl_FragColor.b * 0.587 + gl_FragColor.g * 0.114;
- 将目标颜色乘以灰度
1
2
3// 这里设置目标颜色为红色
vec3 targetColor = vec3(255, 0, 0);
gl_FragColor.rgb = targetColor * grey;
看下效果: