cocos2d 3.X Shader 变暗和变灰
2024-10-16 06:32:19
转自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
最新文章
- sqlalchemy(一)基本操作
- Revolving Digits(hdu 4333)
- 深入理解JPEG图像格式Jphide隐写
- Android官方数据绑定框架DataBinding
- 查找Safari相关迹证
- Jquery 遍历表单 AJAX提交
- WIN7中因为服务进程是运行在session0下面的~~第一个登录的用户session为1(WTSGetActiveConsoleSessionId取得session的Id,OpenProcessToken取得进程的令牌)
- 工作经常使用的SQL整理,实战篇(二)
- 怎样把echarts图表做成响应式的
- 关于EasyUI中DataGrid控件的一些使用方法总结
- 【Unity3D与23种设计模式】工厂方法模式(Factory Method)
- bzoj4447[Scoi2015]小凸解密码
- 亲密接触Redis-第一天
- P3805 【模板】manacher算法
- spring cloud学习(五) 配置中心
- XmlSerializer的GenerateTempAssembly性能问题例外
- spring cloud kubernetes之serviceaccount permisson报错
- 关于html中的doctype的重要性的认知以及IE的浏览器模式与文档模式
- oracle日期合并 分别用逗号或者分号隔开
- VUE递归树形目录(vue递归组件)的使用