zoukankan      html  css  js  c++  java
  • (转)Cocos2d-js中使用Shader方法--以一个简单的波纹效果为例:

    以一个简单的波纹效果为例:

    一、引入shader脚本文件。

    1、vertex shader

    复制代码
    attribute vec4 a_position;
    attribute vec2 a_texCoord;
    attribute vec4 a_color;
    
    varying vec4 v_fragmentColor;
    varying vec2 v_texCoord;
    
    void main()
    {
        gl_Position = CC_PMatrix * a_position;
        v_fragmentColor = a_color;
        v_texCoord = a_texCoord;
    }
    复制代码

    2、fragment shader

    复制代码
    varying vec2 v_texCoord;
    
    #define M_PI 3.1415926535897932384626433832795
    
    void main() {
        vec2 coord = v_texCoord;
        coord.x += (sin(coord.y * 10.0 + CC_Time[1] * 10.0) / 30.0);
        gl_FragColor = texture2D(CC_Texture0, coord);
    }
    复制代码

    3、cocos2d-js code

    复制代码
    var sprite = this.sprite = new cc.Sprite("res/demo.png");
    sprite.attr({
            x: cc.winSize.width / 2,
            y: cc.winSize.height/ 2
    });
    this.addChild(sprite);
    
    var shader = this.shader = new cc.GLProgram('res/test.vsh', 'res/test.fsh');
    shader.link();
    shader.updateUniforms();
            
    sprite.shaderProgram = shader;
    复制代码

    二、直接嵌入shader脚本

    复制代码
          var vsh = "
    " +
                "attribute vec4 a_position;
    " +
                "attribute vec2 a_texCoord;
    " +
                "attribute vec4 a_color;
    " +
                "varying vec4 v_fragmentColor;
    " +
                "varying vec2 v_texCoord;
    " +
                "void main()
    " +
                "
    {
    " +
                "   gl_Position = CC_PMatrix * a_position;
    " +
                "   v_fragmentColor = a_color;
    " +
                "   v_texCoord = a_texCoord;
    " +
                "}";
    
           var fsh = "
    " +
                "varying vec2 v_texCoord;
    " +
                "void main()
    " +
                "
    {
    " +
                "   vec2 coord = v_texCoord;
    " +
                "   coord.x += (sin(coord.y * 10.0 + CC_Time[1] * 10.0) / 30.0);
    " +
                "   gl_FragColor = texture2D(CC_Texture0, coord);
    " +
                "}";
    
            var sprite = this.sprite = new cc.Sprite("res/grossini.png");
            var shader = new cc.GLProgram();
            if(shader.initWithString(vsh, fsh)){
                shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
                shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
                shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
                shader.link();
                shader.updateUniforms();
    
                sprite.shaderProgram = shader;
            }
            sprite.attr({
                x: cc.winSize.width / 2,
                y: cc.winSize.height/ 2
            });
            this.addChild(sprite);
    复制代码

    原文地址:https://www.cnblogs.com/fingerblog/p/5179853.html

  • 相关阅读:
    Turtlebot-导航
    Turtlebot-创建地图-Gmapping-Kinect
    Gflags
    Linux Driver 入门
    Linux Kernel 入门
    Linux Driver 入门
    Linux Driver 入门
    Linux Driver 入门
    Win10 复制文件路径
    vs2010 nuget 基础连接已经关闭:发送时发生错误
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/9455707.html
Copyright © 2011-2022 走看看