(转)Cocos2dx-JS 在 Sprite 上使用 Shader

//例如如下一个简单的变色程序,蓝色变红色 ,js 代码:

  1. var url = "res/sb.jpg";

  2.  

    var sp = new cc.Sprite(url);

  3.  

    sp.setAnchorPoint(0,0);

  4.  

    this.addChild(sp);

  5.  

    this.shader = new cc.GLProgram("res/Shaders/example_Flower.vsh", "res/Shaders/example_Flower.fsh");

  6.  

    this.shader.retain();

  7.  

    this.shader.link();

  8.  

    this.shader.updateUniforms();

  9.  

    var program = this.shader.getProgram();

  10.  

    sp.shaderProgram = this.shader;

VertexShader

  1. attribute vec4 a_position;

  2.  

    attribute vec2 a_texCoord;

  3.  

    attribute vec4 a_color;

  4.  

  5.  

    #ifdef GL_ES

  6.  

    varying lowp vec4 v_fragmentColor;

  7.  

    varying mediump vec2 v_texCoord;

  8.  

    #else

  9.  

    varying vec4 v_fragmentColor;

  10.  

    varying vec2 v_texCoord;

  11.  

    #endif

  12.  

  13.  

    void main()

  14.  

    {

  15.  

    gl_Position = CC_PMatrix * a_position;

  16.  

    v_fragmentColor = a_color;

  17.  

    v_texCoord = a_texCoord;

  18.  

    }

FragmentShader

    1. #ifdef GL_ES

    2.  

      precision lowp float;

    3.  

      #endif

    4.  

    5.  

      varying vec4 v_fragmentColor;

    6.  

      varying vec2 v_texCoord;

    7.  

    8.  

      void main()

    9.  

      {

    10.  

      gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);

    11.  

      float r = gl_FragColor[0];

    12.  

      float g = gl_FragColor[1];

    13.  

      float b = gl_FragColor[2];

    14.  

      float a = gl_FragColor[3];

    15.  

      if(b > r && b > g && b > (r*0.5 + g*0.5)*1.5) {

    16.  

      gl_FragColor[0] = b;

    17.  

      gl_FragColor[2] = r;

    18.  

      }

    19.  

      }

      原文地址:https://blog.csdn.net/jiexiaopei_2004/article/details/50542860

原文地址:https://www.cnblogs.com/wodehao0808/p/9455697.html

时间: 2024-10-21 15:28:11

(转)Cocos2dx-JS 在 Sprite 上使用 Shader的相关文章

cocos2d-js Shader系列2:在cc.Sprite上使用Shader(黑白、灰度、造旧效果)

在Sprite中使用Shader做特殊的颜色处理比较简单,只需要把Shader程序绑定到Sprite上即可: sprite.shaderProgram = alphaTestShader; Cocos2d内置了一些Shader,详细可以看代码: 其中,CCShaderCache缓存了一些Shader实例,而GLProgram则对gl的api做了简单的封装让接口更友好. 需要注意的是,使用GLProgram编译shader程序时,cocos2d会自动加入了一些参数. _compileShader:

【原】cocos2d-x开发笔记:获取Sprite上某一个点的透明度,制作不规则按钮

本篇文章主要讲一下怎么做一个不规则的按钮,比如如下图的八卦,点击绿色和点击红色部分,需要执行不同的事件 一般情况下,如果要检测某一个精灵是否被点中,做法如下 bool HelloWorld::ccTouchBegan(cocos2d::CCTouch* pTouch, cocos2d::CCEvent* pEvent) { CCSize sprSize = pSpr->getContentSize(); CCPoint point = pSpr->convertTouchToNodeSpace

关于在cocos2dx中继承Sprite的分析与技巧

本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏. 在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Scene,Sprite最大的不同是它包含一个纹理,通过OpenGL的渲染,在游戏中呈现出来.游戏中的主角,怪物,背景,或是精灵的血条等都是通过Sprite来实现的. 在cocos2dx中,关于创建Sprite的类,根据输入参数的不同有以下几个工厂函数, static Sprite* create() static S

Cocos2dx+lua合适还是Cocos2dx+js合适?

问题: 开发cocos2dx手游Cocos2dx+lua合适还是Cocos2dx+js合适 百牛信息技术bainiu.ltd整理发布于博客园 回答: 作者:廖宇雷链接:https://www.zhihu.com/question/21130385/answer/18485625来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 2014.02更新:请放心选择 Lua 吧.触控已经收购了 quick-cocos2d-x,2014年肯定会大力强化 cocos2d-x 的

Cocos2d-x Lua中Sprite精灵类

Cocos2d-x Lua中Sprite精灵类 精灵类是Sprite,它的类图如下图所示. Sprite类图 Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的子类有:PhysicsSprite和Skin.PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画.创建Sprite精灵对象创建精灵对象有多种方式,其中常用的函数如下:cc.Sprite:create ().创建一个精灵对象,纹理[ 纹理(texture),表示物体表面细

【转】cocos2d-x游戏开发(十四)用shader使图片背景透明

转自:http://blog.csdn.net/dawn_moon/article/details/8631783 好吧,终于抽时间写这篇文章了. 手头上有很多人物行走图,技能特效图等,但这些图都有个纯黑色背景,怎么样将内容显示出来,让背景透明呢?前段时间搞了一下,感谢群里的童鞋们,提供了思路和方法. 这里用shader处理了像素,使黑色背景透明,直接上代码 ShaderSprite.h 1 #ifndef __TestShader__ShaderSprite__ 2 #define __Tes

Js 跨域上传文件

代码在github上( https://github.com/andygithubchen/jsUpload ),请结合github上的文件阅读. 主要实现js跨域上传文件,这里的跨域目前只在两个域名所指向的服务器在同一局域网内. 当然,这两种方案都可以做同域名上传. 例如: 192.168.1.60 www.test.cn 192.168.1.61 www.video.cn 如果要在www.test.com域名下上传文件到www.video.com域名下,可以使用下面这两个方案: 方案一(在s

用js在网页上完成倒计时3秒后自动跳转到另一个页面

<body> <div id="time"></div> <a href="#" onclick="stop()">停止</a> <script type="text/javascript"> var i=3; function changeTime(){ document.getElementById("time").innerHTM

cocos2dx Scene,Layer,Sprite的理解

layer,scene,sprite的默认锚点都是0.5,0.5 三者都继承自Node节点,暂时没看出有什么区别,或者下面的话是对的吧. 在cocos2d-x中,一个应用可以有多个scene,但任何时刻只能有一个是acitve的. 一个CCScene由多个CCNode组成,一般是包含若干个CCLayer,而CCLayer又包含多个CCSprite. 需要注意的是,CCScene,CCLayer和CCSprite都继承了CCNode,只不过后者还有其他的父类,使用多继承进行实现. 可以得知coco