编程之家收集整理的这篇文章主要介绍了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的使用(高斯模糊)相关推荐

  1. cocos中如何让背景模糊_Cocos2d-x shader学习2: 模糊(Blur)

    模糊效果在游戏中经常会用到,有的为了突出前景会把背景给模糊化,有的是因为一些技能需要模糊效果.模糊是shader中较为简单的一种应用.cocos2dx 3.x给的demo中,就有sprite的模糊的效 ...

  2. cocos中如何让背景模糊_Cocos Creator Shader Effect 系列 - 8 - 高斯模糊

    本章为大家带来高斯模糊的实现 2d-sprite-gaussian-blur-v1 首先,来点简单的,比如:高斯模糊的英文名叫 Gaussian Blur. 关于高斯模糊的原理,在我学习过程中,下面两 ...

  3. pwa js_如何在互联网信息亭中实现PWA和Barba.js

    pwa js by Nino Mihovilić 由NinoMihovilić 如何在互联网信息亭中实现PWA和Barba.js (How to Implement a PWA and Barba.j ...

  4. 总结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 ...

  5. 前台为html后台是asp在vs2012中建立什么,Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得...

    Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得 < type="text/javascript"> < type="text/java ...

  6. php 热点图,JavaScript_javascript如何写热点图,在gis中,你如果用js来写热点 - phpStudy...

    javascript如何写热点图 在gis中,你如果用js来写热点图 不借助后台怎么搞,as的话比较容易有相应的类库甚至官方都有.而且用js不借助arcgis发布rest服务,(注:热点图可以借助服务 ...

  7. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

  8. Web项目中前端页面引用外部Js和Css的路径问题

    公众号:南宫一梦 Web项目中前端页面引用外部Js和Css的路径问题 一般我们在做Web项目时,通常会将多个页面引入的公共js和css文件抽取出来,单独写成一个公共文件,以期方便各个页面单独引入,达到 ...

  9. cocos中的Box2d物理引擎

    原文地址:http://wwk.iteye.com/blog/1722124 一些Box2d的基本概念,一些cocos中使用box2d需要注意的地方 1. cocos2d 自带了两套物理引擎:Box2 ...

最新文章

  1. Mono 把 .NET 应用程序移植到 Linux
  2. iOS 与OS X多线程和内存管理 笔记 ARC与所有权修饰符
  3. windows目录内打开CMD的几种方法
  4. OS / Linux / Inode 详解
  5. TensorFlow 教程——手写数字识别
  6. linux磁盘高,CentOS 7.2中磁盘iowait过高解决
  7. 初探SQL Server 2017 on Docker@macOS
  8. Java 10的10个新特性,将彻底改变你写代码的方式
  9. (转)open gl 实例 demo ---vs2005 环境
  10. php面向对象精要(1)
  11. 立即更新 Chrome 浏览器!这个 0day 已遭在野利用
  12. 百度文库文字下载(python原码)
  13. 蒲公英智能云TARA X—永远属于自己的NAS(网络附属存储)
  14. 工控安全入门常用逻辑编程
  15. Java新版本的控制台不在控制面板里面显示而是躲在这
  16. js:nodejs通过async异步提交事务数据
  17. 留言赠书|GitHub收获1W星标《迁移学习导论》重新整理升级
  18. 外边距+内边距+边框详解
  19. Open Images Dataset V6 简介
  20. 推特开发者账号 获取推文的视频链接

热门文章

  1. java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...
  2. shell取mysql数据_通过shell读取mysql数据——20120417
  3. qq传文件 udp_软考网络工程师备考-10:网络互连与互联网3-TCPUDP
  4. php microtime true输出说明,php使用microtime(true)查看代码执行时间
  5. mysql转达梦7_从mysql换成达梦7后,查询语句报错,这个是druid的问题吗
  6. linux分区个数,Linux分区个数限制
  7. matlab设计激光腔,激光原理课程设计
  8. mysql单实例多数据库_MySQL单台服务器跑多个实例子详解
  9. 使用Maven构建Struts2项目
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代拿系统