zhuguoqing 62d8fb825e update
2022-05-28 11:15:04 +08:00

72 lines
1.9 KiB
JavaScript

const renderEngine = cc.renderer.renderEngine;
const renderer = renderEngine.renderer;
let ShaderMaterial = require('ShaderMaterial');
const shader = {
name: 'Grass',
params: [
{ name: 'u_cPos', type: renderer.PARAM_FLOAT2 },
// { name: 'u_mPos', type: renderer.PARAM_FLOAT2 },
// { name: 'u_width', type: renderer.PARAM_FLOAT },
// { name: 'u_height', type: renderer.PARAM_FLOAT },
{ name: 'u_dis', type: renderer.PARAM_FLOAT },
{ name: 'u_plus', type: renderer.PARAM_FLOAT },
],
start(material,params) {
material.setParamValue('u_cPos', cc.v2(0,0));
material.setParamValue('u_dis', params.distance);
material.setParamValue('u_plus', params.plus);
// material.setParamValue('u_mPos', cc.v2(params.pos.x,params.pos.y));//
// material.setParamValue('u_width', params.width);
// material.setParamValue('u_height', params.height);
},
defines:[],
frag:
`uniform sampler2D texture;
uniform vec4 color;
varying vec2 uv0;
varying vec2 uv1;
varying vec2 uv2;
varying vec2 uv3;
uniform vec2 u_cPos;
uniform float u_dis;
uniform float u_plus;
void main()
{
vec4 src_color = texture2D(texture, uv0).rgba;
vec2 rpos = vec2(uv2.x + uv3.x*uv1.x , uv2.y + uv3.y*uv1.y );
float dis = distance(rpos,u_cPos);
if(dis<u_dis){
float mask = smoothstep(0.8, 0.9, dis/u_dis);
if(mask < u_plus){
mask = u_plus;
}
src_color.a = src_color.a*mask;
// src_color += vec4(0.2,0.2,0.2,0.0);
}
gl_FragColor = src_color;
}`,
};
ShaderMaterial.addShader(shader);