cocos中如何让背景模糊_cocos2dx-js Shader的使用(高斯模糊)
编程之家收集整理的这篇文章主要介绍了cocos2dx-js Shader的使用(高斯模糊),编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以参考http://blog.csdn.net/afei198409/article/details/50594665了解必须的shader使用知识。
首先.vsh文件(这里有两个,一个test_noMVP.vsh用于本地,一个test.vsh用于浏览器)
test_noMVP.vsh描述如下:
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
#ifdef GL_ES
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
#else
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
#endif
void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
test.vsh文件描述如下:
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
#ifdef GL_ES
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
#else
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
#endif
void main()
{
gl_Position = CC_PMatrix * CC_MVMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
然后是.fsh文件
test.fsh文件描述如下:
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform vec2 blurSize;
void main() {
vec4 sum = vec4(0.0);
sum += texture2D(CC_Texture0,v_texCoord - 0.0004 * blurSize) * 0.05;
sum += texture2D(CC_Texture0,v_texCoord - 0.0003 * blurSize) * 0.09;
sum += texture2D(CC_Texture0,v_texCoord - 0.0002 * blurSize) * 0.12;
sum += texture2D(CC_Texture0,v_texCoord - 0.0001 * blurSize) * 0.15;
sum += texture2D(CC_Texture0,v_texCoord) * 0.16;
sum += texture2D(CC_Texture0,v_texCoord + 0.0001 * blurSize) * 0.15;
sum += texture2D(CC_Texture0,v_texCoord + 0.0002 * blurSize) * 0.12;
sum += texture2D(CC_Texture0,v_texCoord + 0.0003 * blurSize) * 0.09;
sum += texture2D(CC_Texture0,v_texCoord + 0.0004 * blurSize) * 0.05;
gl_FragColor = sum * v_fragmentColor;
}
使用如下:
首先创建一个cocos2dx-js的hello world项目,打开app.js进行修改
var HelloWorldLayer = cc.Layer.extend({
ctor:function () {
this._super();
var size = cc.winSize;
var png = new cc.Sprite("res/HelloWorld.png");
png.setPosition(size.width * 0.5,size.height * 0.5);
this.addChild(png,10);
this.blurSprite(png);
return true;
},
blurSprite:function(sprite)
{
var blurSize = cc.size(40,40);
if( 'opengl' in cc.sys.capabilities ) {
cc.log("support opengl shader");
//the renderers of webgl and opengl is quite different now,so we have to use different shader and different js code
if (cc.sys.isNative) {
var shader = new cc.GLProgram("res/test_noMVP.vsh","res/test.fsh");
shader.link();
shader.updateUniforms();
var glProgram_state = cc.GLProgramState.getOrCreateWithGLProgram(shader);
//设置参数值(blurSize对应test.fsh里面的blurSize)
glProgram_state.setUniformVec2("blurSize",blurSize);
//添加shader
sprite.setGLProgramState(glProgram_state);
} else {
var shader = new cc.GLProgram("res/test.vsh","res/test.fsh");
shader.retain();
shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION,cc.VERTEX_ATTRIB_POSITION);
shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR,cc.VERTEX_ATTRIB_COLOR);
shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD,cc.VERTEX_ATTRIB_TEX_COORDS);
shader.link();
shader.updateUniforms();
shader.use();
//设置参数值
shader.setUniformLocationWith2f(shader.getUniformLocationForName('blurSize'),blurSize.width,blurSize.height);
//添加shader
sprite.shaderProgram = shader;
}
} else {
cc.log("no support opengl shader");
}
}
});
......
运行效果图如下:
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
cocos中如何让背景模糊_cocos2dx-js Shader的使用(高斯模糊)相关推荐
- cocos中如何让背景模糊_Cocos2d-x shader学习2: 模糊(Blur)
模糊效果在游戏中经常会用到,有的为了突出前景会把背景给模糊化,有的是因为一些技能需要模糊效果.模糊是shader中较为简单的一种应用.cocos2dx 3.x给的demo中,就有sprite的模糊的效 ...
- cocos中如何让背景模糊_Cocos Creator Shader Effect 系列 - 8 - 高斯模糊
本章为大家带来高斯模糊的实现 2d-sprite-gaussian-blur-v1 首先,来点简单的,比如:高斯模糊的英文名叫 Gaussian Blur. 关于高斯模糊的原理,在我学习过程中,下面两 ...
- pwa js_如何在互联网信息亭中实现PWA和Barba.js
pwa js by Nino Mihovilić 由NinoMihovilić 如何在互联网信息亭中实现PWA和Barba.js (How to Implement a PWA and Barba.j ...
- 总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程
总结Vue中index.html.main.js.App.vue.index.js之间关系以及Vue项目加载流程 文章目录 总结Vue中index.html.main.js.App.vue.index ...
- 前台为html后台是asp在vs2012中建立什么,Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得...
Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得 < type="text/javascript"> < type="text/java ...
- php 热点图,JavaScript_javascript如何写热点图,在gis中,你如果用js来写热点 - phpStudy...
javascript如何写热点图 在gis中,你如果用js来写热点图 不借助后台怎么搞,as的话比较容易有相应的类库甚至官方都有.而且用js不借助arcgis发布rest服务,(注:热点图可以借助服务 ...
- 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...
- Web项目中前端页面引用外部Js和Css的路径问题
公众号:南宫一梦 Web项目中前端页面引用外部Js和Css的路径问题 一般我们在做Web项目时,通常会将多个页面引入的公共js和css文件抽取出来,单独写成一个公共文件,以期方便各个页面单独引入,达到 ...
- cocos中的Box2d物理引擎
原文地址:http://wwk.iteye.com/blog/1722124 一些Box2d的基本概念,一些cocos中使用box2d需要注意的地方 1. cocos2d 自带了两套物理引擎:Box2 ...
最新文章
- Mono 把 .NET 应用程序移植到 Linux
- iOS 与OS X多线程和内存管理 笔记 ARC与所有权修饰符
- windows目录内打开CMD的几种方法
- OS / Linux / Inode 详解
- TensorFlow 教程——手写数字识别
- linux磁盘高,CentOS 7.2中磁盘iowait过高解决
- 初探SQL Server 2017 on Docker@macOS
- Java 10的10个新特性,将彻底改变你写代码的方式
- (转)open gl 实例 demo ---vs2005 环境
- php面向对象精要(1)
- 立即更新 Chrome 浏览器!这个 0day 已遭在野利用
- 百度文库文字下载(python原码)
- 蒲公英智能云TARA X—永远属于自己的NAS(网络附属存储)
- 工控安全入门常用逻辑编程
- Java新版本的控制台不在控制面板里面显示而是躲在这
- js:nodejs通过async异步提交事务数据
- 留言赠书|GitHub收获1W星标《迁移学习导论》重新整理升级
- 外边距+内边距+边框详解
- Open Images Dataset V6 简介
- 推特开发者账号 获取推文的视频链接
热门文章
- java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...
- shell取mysql数据_通过shell读取mysql数据——20120417
- qq传文件 udp_软考网络工程师备考-10:网络互连与互联网3-TCPUDP
- php microtime true输出说明,php使用microtime(true)查看代码执行时间
- mysql转达梦7_从mysql换成达梦7后,查询语句报错,这个是druid的问题吗
- linux分区个数,Linux分区个数限制
- matlab设计激光腔,激光原理课程设计
- mysql单实例多数据库_MySQL单台服务器跑多个实例子详解
- 使用Maven构建Struts2项目
- 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代拿系统