转自:http://www.waitingfy.com/archives/1741
变灰较常见
Cocos2d 中有一个变灰的例子,这里就列出shader代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #ifdef GL_ES precision mediump float; #endif varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main(void) { vec4 c = texture2D(CC_Texture0, v_texCoord); gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b); gl_FragColor.w = c.w; } |
那几个系数相加会等于1,不同的调整会有不同的效果。效果图:

第一张就是变灰的效果图
变暗的原理
搞过图形学的应该会比较容易知道,我也是搜索了才知道,我们知道白色是1或者255,黑色是0. 当一个颜色越接近0表示越接近黑色。也就是说,只要把每个像素的颜色乘以一个比1小的数,就会有变暗的效果了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #ifdef GL_ES precision mediump float; #endif varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main(void) { vec4 c = texture2D(CC_Texture0, v_texCoord); float greyNum = 0.75; vec4 final = c; final.r = c.r * greyNum; final.g = c.g * greyNum; final.b = c.b * greyNum; gl_FragColor = final; } |
我这里设置的是0.75
最终效果图:
