微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cocos2d 3.X Shader 变暗和变灰


1.为了节约一张图引发的Shader使用


我们注意到这个游戏当中经常使用一些按钮,美术会给两张图,一张稍微暗点,表示按下的状态。但是这样的图一多起来,就比较占用资源。Sprite更改颜色无法表现出这样的效果。想起来Shader可以。


2.变灰是比较常见


Cocos2d 中有一个变灰的例子,这里就列出shader代码

#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,不同的调整会有不同的效果效果图:



第一张就是变灰的效果图,但是离第3张的效果还有距离啊。


3.变暗的原理


搞过图形学的应该会比较容易知道,我也是搜索了才知道,我们知道白色是1或者255,黑色是0. 当一个颜色越接近0表示越接近黑色。也就是说,只要把每个像素的颜色乘以一个比1小的数,就会有变暗的效果了!

#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

最终效果图:



已经非常接近第3张我们需要的目标图了。这样就可以省下一半的图片了。不知道渲染速度会不会慢。


http://www.waitingfy.com/archives/1741

原文地址:https://www.jb51.cc/cocos2dx/342182.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐