zhuguoqing c21cd97580 udpate
2022-05-26 14:48:21 +08:00

74 lines
2.4 KiB
JavaScript

const renderEngine = cc.renderer.renderEngine;
const renderer = renderEngine.renderer;
let ShaderMaterial = require('ShaderMaterial');
var timelimit =1
const shader = {
name: 'Wave',
params: [
{ name: 'time', type: renderer.PARAM_FLOAT },
{ name: 'u_normalMap', type: renderer.PARAM_TEXTURE_2D },
],
start(material,params) {
material.cusparmas = {}
material.cusparmas._start = 0;
material.setParamValue('u_normalMap', params.normaltexture._texture);
},
update(material,dt) {
material.cusparmas._start+=dt*0.2
//var deltatime = Math.sin(( material.cusparmas._start)/1000);
material.setParamValue('time',Math.sin(material.cusparmas._start)*2);
},
defines:[],
frag:
`varying vec4 v_fragmentColor;
varying vec2 uv0;
uniform sampler2D texture;
uniform sampler2D u_normalMap;
uniform float time;
vec3 waveNormal(vec2 p) {
vec3 normal = texture2D(u_normalMap , p ).xyz;
normal = -1.0 + normal * 2.0;
return normalize(normal);
}
float specular(vec3 n,vec3 l,vec3 e) {
return pow(max(dot(reflect(e,n),l),0.0),2.0);
}
void main() {
float timeFactor = 0.1;
float offsetFactor = 0.5;
float refractionFactor = 0.7;
// simple UV animation
vec3 normal = waveNormal(uv0 + vec2(time * timeFactor,time * timeFactor));
// simple calculate refraction UV offset
vec2 p = -1.0 + 2.0 * uv0;
vec3 eyePos = vec3(0.0, 0.0, 10.0);
vec3 inVec = normalize(vec3(p, 0.0) - eyePos);
vec3 refractVec = refract(inVec, normal, refractionFactor);
vec2 v_texCoordN = uv0;
v_texCoordN += refractVec.xy * offsetFactor;
vec3 light = vec3(0.2,0.1,0.0);
// bteitler: Apply specular highlight
vec3 normalN = waveNormal(v_texCoordN );
vec3 color = vec3(specular(normalN,light,eyePos));
//gl_FragColor = texture2D(texture, v_texCoordN);
// gl_FragColor = texture2D(u_normalMap, uv0);
gl_FragColor = texture2D(texture, v_texCoordN)*1.0 + vec4(color,1);
}
`,
};
ShaderMaterial.addShader(shader);