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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-29 04:37:50

cocos2d 3.X Shader 变暗和变灰的相关文章

[原]quick2.25精灵变灰

由于quick2.25没有导出shader相应的接口,所以2.25无法直接使用shader. 本文简单介绍如何导出相应接口,同时教大家使用shader 实现精灵变灰 一.编写静态函数,以供导出使用(直接参考3.2版本的) 2.25的GLProgram是对应操作shader的类. 在GLProgram.h声明以下两个函数 static CCGLProgram* createWithByteArrays(const char* vShaderByteArray, const char* fShade

Quick-cocos(3.2) 将对象(包括子对象)变灰的方法

先上效果图: 借鉴了[Cocos2d-x 让精灵图像变灰的方法]. 但这个方法在Quick-Cocos3.2下不能完美实现变灰效果-变灰了的对象的位置会跳到屏幕右上角. 百思不得其解,搜一下有没有人发现这个问题,果然有: [关于Sprite的setShaderProgram后坐标改变的问题] 发现4楼的仁兄的回复有亮点: [如何在Cocos2d-x 3.0中使用opengl shader?] 点进去一看,内容是这样的: "坐标变化的解决了,将附件gray.vsh 中的CC_MVPMatrix 改

cocos2d-x 保持屏幕点亮及自动变灰

很早之前遇到的问题,现在记录一下.有一家Android渠道(抱歉,时间太长了已经记不大清楚是哪一家了 oppo/联想/酷派?)在我们提交新版本时拒绝了,理由是:手机背光状态下,屏幕不会自动变灰. 这里为了测试,我将它改为30秒,这样做有什么影响呢?就是开启任何一个应用,在30秒之内,我如果没有任何的操作,就自动锁屏了.你可以拿你的手机试一下,比如打开微信然后放在那里不动,30之后它表现出来的的效果跟按了电源键锁屏类似.但还是有区别滴: 1)它有一个过渡阶段:屏幕由亮变暗,几秒之后屏幕才黑掉,需要

NGUI 图片变灰

效果图 1.先准备好一个变灰shader.代码如下 Shader "Custom/Gray" { Properties { _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} } SubShader { LOD 200 Tags { "Queue" = "Transparent" "IgnoreProjector" = "Tr

【CSS Demo】网站页面变灰

让网站所有元素变成灰色调,全浏览器支持,使用了滤镜,比较吃性能,建议作临时方案使用. 实现效果(点击下面的按钮): 这里放一张图片作为效果展示: 其CSS代码如下: body{ -webkit-filter:grayscale(100%); -moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%); filter:grayscale(100%); filter:progid:DXImage

css+js整站变灰(兼容IE7+)

历年大型地震等自然灾害来临过后,各大网站整站都变成灰色以悼念逝去的生命,那么这种整站变灰的效果是怎么做到的? 重写一套css?NO,即便你有这个时间重写,那网站内的图片怎么办?难道重做一遍?很明显工作量巨大不符合实际. 火狐和chrome浏览器比较简单,直接用css3搞定: <style type="text/css"> .demo{color: red;} body { filter: grayscale(100%);/*火狐*/ -webkit-filter:grays

转载网易博客:整理各大网站让网站变灰的css代码

2013-07-21 15:06:47 北京时间2013年4月20日8时02分四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震.震源深度13公里.各大网站将其网站变灰,本人整理了下部分网站变灰的css代码. 1.将网站全部变灰 html { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-

Ubuntu上安装火狐浏览器无法固定到启动器上,火狐图标显示异常 文件夹右键重命名选项变灰时重命名方法

http://blog.csdn.net/pipisorry/article/details/39483361 Ubuntu自带火狐浏览器,可是使用起来不好,并且版本还可能过旧,因此将其卸载(不卸载的话总是指向旧版本的firefox),于是从火狐官网上下载firefox并解压到/opt文件夹下. 不过下载的火狐无法固定到启动器上(可能看到固定上了,但是无法运行),并且图标似乎分辨率比较低,看起来比较模糊.),删除了:/home/qiyo/.mozilla/目录,然后才能固定上. 找到/opt文件

eclipse 代码区变灰,无法显示代码

法一:点击window->new window,看看新的窗口是否能够显示代码区,可以就把旧的那个窗口关闭,成功 法二:http://juhbgf.blog.163.com/blog/static/598317682013455118751/ eclipse 代码区变灰,无法显示代码,布布扣,bubuko.com