CocosCreator1.x使用自定义流光shader

1.x使用shader与2.x使用shader有所不同,2.x的使用例子很多,1.x少些,这里列出使用流光shader例子。

 

module.exports =

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

 

 

module.exports = 

`

#ifdef GL_ES

precision mediump float;

#endif

varying vec2 v_texCoord;

uniform float sys_time;

void main()

{

    vec4 src_color = texture2D(CC_Texture0, v_texCoord).rgba;

    float width = 0.2;

    float start = sys_time * 1.2;

    float strength = 0.02;

    float offset = 0.2;

    

    if( v_texCoord.x < (start - offset * v_texCoord.y) &&  v_texCoord.x > (start - offset * v_texCoord.y - width))

    {

        vec3 improve = strength * vec3(255, 255, 255);

        vec3 result = improve * vec3( src_color.r, src_color.g, src_color.b);

        gl_FragColor = vec4(result, src_color.a);

 

    } else {

        gl_FragColor = src_color;

    }

}

`

// ShaderUtils.js
var ShaderUtils = {
	shaderPrograms: {},

	setShader: function(sprite, shaderName) {
		var glProgram = this.shaderPrograms[shaderName];
		if (!glProgram) {
			glProgram = new cc.GLProgram();
			var vert = require(cc.js.formatStr("%s.vert", shaderName));
			var frag = require(cc.js.formatStr("%s.frag", shaderName));
			glProgram.initWithString(vert, frag);
			if (!cc.sys.isNative) {  
				glProgram.initWithVertexShaderByteArray(vert, frag);
				glProgram.addAttribute(cc.macro.ATTRIBUTE_NAME_POSITION, cc.macro.VERTEX_ATTRIB_POSITION);  
				glProgram.addAttribute(cc.macro.ATTRIBUTE_NAME_COLOR, cc.macro.VERTEX_ATTRIB_COLOR);  
				glProgram.addAttribute(cc.macro.ATTRIBUTE_NAME_TEX_COORD, cc.macro.VERTEX_ATTRIB_TEX_COORDS);  
			}
			glProgram.link();  
			glProgram.updateUniforms();
			this.shaderPrograms[shaderName] = glProgram;
		}
		sprite._sgNode.setShaderProgram(glProgram);
		return glProgram;
	},
};

module.exports = ShaderUtils;
 

var ShaderUtils = require("ShaderUtils");

 

cc.Class({

    extends: cc.Component,

 

    properties: {

        sp: cc.Sprite,

    },

 

    onLoad : function(){

        this._time = 0;

        this._sin = 0;

 

        this._program = ShaderUtils.setShader(this.sp, "Fluxay");

    },

 

    update (dt) {

        this._time += 2 * dt;

        this._program.use();

        this._sin = Math.sin(this._time);

        if(this._sin > 0.99){

            this._sin = 0;

            this._time = 0;

        }

        if(cc.sys.isNative){

            var glProgram_state = cc.GLProgramState.getOrCreateWithGLProgram(this._program);

            glProgram_state.setUniformFloat("sys_time", this._sin);

        } else {

            this._program.setUniformLocationWith1f(this._program.getUniformLocationForName("sys_time"), this._sin);

        }

    },

});

感谢关注个人博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值