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

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

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

2.变灰是比较常见

Cocos2d-x中有一个变灰的例子,这里就列出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,不同的调整会有不同的效果。效果图:

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

3.变暗的原理

搞过图形学的应该会比较容易知道,我也是搜索了才知道,我们知道白色是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

最终效果图:

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

来源网址:http://www.waitingfy.com/archives/1741

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

  1. opengl之vsh、fsh简易介绍+cocos2dx 3.0 shader 变灰

    认识着色器 理解OpenGL渲染管线,对于学习OpenGL非常重要.下面是OpenGL渲染管线的示意图:(图中淡蓝色区域是可以编程的阶段) 此图是从wiki中拿过来的,OpenGL的渲染管线主要包括: ...

  2. [原]quick2.25精灵变灰

    由于quick2.25没有导出shader相应的接口,所以2.25无法直接使用shader. 本文简单介绍如何导出相应接口,同时教大家使用shader 实现精灵变灰 一.编写静态函数,以供导出使用(直 ...

  3. NGUI 图片变灰

    效果图 1.先准备好一个变灰shader.代码如下 Shader "Custom/Gray" { Properties { _MainTex ("Base (RGB), ...

  4. 【全面完美方案】iPhone 4S WiFi变灰 DIY修复方式

    这是我在一位台湾网友usaretama发表的一篇帖子中看到的,原帖我发表在维维网 如果你有WiFi开关变灰不能切换.WiFi遇到搜不到AP或搜到了连不上,那您就要注意这篇了. 家人的 iPhone 4 ...

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

    很早之前遇到的问题,现在记录一下.有一家Android渠道(抱歉,时间太长了已经记不大清楚是哪一家了 oppo/联想/酷派?)在我们提交新版本时拒绝了,理由是:手机背光状态下,屏幕不会自动变灰. 这里 ...

  6. 怎么让让整个HTML页面变灰

    怎么让让整个HTML页面变灰 其实很简单,我们只需要一句话. html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1 ...

  7. CSS使图片变灰

    为了悼念,各大网站都纷纷将自己的站点颜色调灰,就连图片也一样,到底如何实现的呢,请看下面的代码. 〈img src="http://hovertree.com/hvtimg/201512/f ...

  8. UIImageView变灰

    1.UIImageView圆角 CALayer *l = [cell.imgAvatarImage layer]; [l setMasksToBounds:YES]; [l setCornerRadi ...

  9. UIButton 点击后变灰

    +(UIButton *)getBlueButtonWithTitle:(NSString *)aTitle{ UIButton *button = [UIButton buttonWithType: ...

随机推荐

  1. mysql 存储过程 游标的使用

    BEGINDECLARE id long;DECLARE Done INT DEFAULT 0;DECLARE userids CURSOR FOR SELECT userid from info_u ...

  2. SECD machine简介

    secd machine是一种比较基础的虚拟机设计.一般是作为函数式语言的底层虚拟机. secd machine的"secd"四个字母分别指的是这种虚拟机的核心Stack, Env ...

  3. 无法连接 MKS: Login(username/password)incorrect

    升级到Vmware Workstation 12之后,客户端能连上虚拟机服务器,但却打不开共享的虚拟机,提示报错"无法连接 MKS: Login(username/password)inco ...

  4. SVN服务器与测试服务器代码同步

    在本地做测试项目的时候,想svn提交和服务器上的代码一步到位,不想再手动更新一次了,所以就研究了下同步, 要实现svn提交后自动更新到测试服务器,在你的版本库下的hooks文件夹下添加post-com ...

  5. 'autocomplete="off"'在Chrome 中不起作用

    大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为&q ...

  6. JS之模块模式应用

    之前做过一些简单的单页面应用项目,是对模块模式很好的应用,我决定动手做一个简单的Demo出来. 基本思想是设计一个加载器,当用户点击菜单时,获取不同选项的按钮id,根据不同id实现对页面内容的替换. ...

  7. laravel之缓存配置文件

    清除之前配置文件缓存,并生成新的配置文件缓存, get bash: php artisan config:cache 如下图,以上命令会将config文件夹下所有的文件内容缓存到bootstrap/c ...

  8. TreeMap的使用

    Map<Integer, String> map = new TreeMap<Integer, String>();//TreeMap本身具有排序功能(默认按键升序排序) ma ...

  9. .net 控件

    DevComponents.DotNetBar11.8.0.0:百度网盘里 DevExpress13.2.8:百度网盘里

  10. M2事后分析汇报总结

    学霸网站项目Postmortem结果 M2之于M1的改进 文档和问答的整合 完成webservice 完成数据库触发器设计与完整性约束依赖(大规模) 优化学霸UI 资源的搜索 外部问题的搜索 文档的上 ...