转自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. 集合的概念 Stack和Queue Dictionary ArrayList和List<T>方法及用法

    Stack和stack<T>方法一样// 管理方式: 后进先出 LIFO 栈// Stack<string> s=new Stack<string>();//(放一 ...

  2. Node.js intro

    1. require() load module http://stackoverflow.com/questions/9901082/what-is-this-javascript-require ...

  3. JSP开发模式2_JSP/Servlet/JavaBean(简单注册功能)

    import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegisterBean {    privat ...

  4. quartz学习

    quartz是一个作业调度框架,用于指定工作(作业)在指定时间执行——定时工作. quartz的核心接口有: Scheduler接口:Scheduler是job的执行对象,用于工作的执行. Job接口 ...

  5. JSP中的 HttpSession、pageContext对象

    pageContext 隐含对象对应javax.servlet.jsp.PageContext,都自动的被加入至pageContext中, 您可以由它来取得与JSP相关的对应之Servlet对象,像是 ...

  6. TOMCAT的安装部署配置(配图解)

    TOMCAT的安装部署配置 前提已经成功搭建配置JDK 下载好压缩包后,直接解压至某一目录下,目录中不能包含中文 双击安装文件,出现如下界面 点击[NEXT],出现如下界面 点击[I AGREE],出 ...

  7. A*搜索

    1,从点A开始,并且把它作为待处理点存入一个"开启列表".开启列表就像一张购物清单.尽管现在列表里只有一个元素,但以后就会多起来.你的路径可能会通过它包含的方格,也可能不会.基本上 ...

  8. android studio中断开SVN连接,并彻底清理项目中的.svn文件

    首先,断开SVN连接: 在使用SVN过程中,我们会发现当我们第一次share到subversion的时候,下次就无法重新share了,也无法断开连接,就算我们将工程目录下的.svn目录删除它还是会无法 ...

  9. 02 Apache Solr: 概览 Solr在信息系统架构中的位置

    概述:      Apache Solr是一个用JAVA语言构建在Apache Lucene项目上的开源的企业级搜索平台.主要特性包含:全文搜索.命中高亮.片段式搜索.实时索引.动态集群.数据库集成. ...

  10. NGUI 灰化按钮或图标

    在游戏中某些地方可能需要对按钮进行灰化显示,从而表示不能点击!在网上找了一下有些方法是直接用UITexture+灰化shader去做这件事!另外有些方案写的不太清楚,看不懂!不过也基本都是要使用灰化s ...