74 lines
2.4 KiB
JavaScript
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); |