material = new THREE.ShaderMaterial({
side:THREE.DoubleSide,
vertexShader: `
varying vec2 vUv;
void main () {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position.xyz, 1.0);
}
`,
fragmentShader: `
varying vec2 vUv;
uniform float u_time;
//zigzag
uniform float aZ;
uniform float fZ;
uniform float gZ;
// quad
uniform float fQ;
uniform float gQ;
// sawtooth
uniform float aS;
uniform float fS;
uniform float gS;
// sinu
uniform float aSin;
uniform float fSin;
uniform float gSin;
// mix
uniform float thres;
uniform float speed;
float Zigzag(float p, float amplitude, float frequence)
{
float y = amplitude*(abs(mod(p*frequence,2.0)-1.));
return y;
}
float Quad(float d) {
float y = floor(fract(d)*2.0);
return y;
}
float Sawtooth(float d,float amplitude, float frequence) {
float y = amplitude*(fract(d*frequence));
return y;
}
float Sinu(float d,float amplitude, float frequence) {
float triangle = abs(mod(d*frequence,2.0)-1.);
float y = amplitude*(triangle*triangle*(3.0 - 2.0 *triangle));
return y;
}
void main () {
vec2 st = vUv * 2.-1.0;
float wave = 0.0;
float d = length(st);
float t = u_time * speed;
wave += (Zigzag((d*fZ)-t,aZ,1.0)*gZ);
wave += (Quad((d*fQ)-t)*gQ);
wave += (Sawtooth((d*fS)-t,aS,1.0)*gS);
wave += (Sinu((d*fSin)-t,aSin,1.0)*gSin);
wave = wave/thres;
gl_FragColor = vec4(vec3(wave), 1.0);
}
`,
uniforms: {
aZ:{value: 0},
fZ:{value: 0},
gZ:{value: 0},
fQ:{value: 0},
gQ:{value: 0},
aS:{value: 0},
fS:{value: 0},
gS:{value: 0},
aSin:{value: 0},
fSin:{value: 0},
gSin:{value: 0},
thres:{value: 0},
speed:{value:0},
u_time: { value: 0 },
u_resolution: { value: new THREE.Vector2() }
}
});