UNPKG

three-stdlib

Version:

stand-alone library of threejs examples

74 lines (73 loc) 2.37 kB
var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; import { Vector2, ShaderMaterial } from "three"; import { Pass, FullScreenQuad } from "./Pass.js"; class WaterPass extends Pass { constructor() { super(); __publicField(this, "material"); __publicField(this, "fsQuad"); __publicField(this, "factor"); __publicField(this, "time"); __publicField(this, "uniforms"); this.uniforms = { tex: { value: null }, time: { value: 0 }, factor: { value: 0 }, resolution: { value: new Vector2(64, 64) } }; this.material = new ShaderMaterial({ uniforms: this.uniforms, vertexShader: ` varying vec2 vUv; void main(){ vUv = uv; vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0); gl_Position = projectionMatrix * modelViewPosition; }`, fragmentShader: ` uniform float time; uniform float factor; uniform vec2 resolution; uniform sampler2D tex; varying vec2 vUv; void main() { vec2 uv1 = vUv; vec2 uv = gl_FragCoord.xy/resolution.xy; float frequency = 6.0 * factor; float amplitude = 0.015 * factor; float x = uv1.y * frequency + time * .7; float y = uv1.x * frequency + time * .3; uv1.x += cos(x+y) * amplitude * cos(y); uv1.y += sin(x-y) * amplitude * cos(y); vec4 rgba = texture2D(tex, uv1); gl_FragColor = rgba; }` }); this.fsQuad = new FullScreenQuad(this.material); this.factor = 0; this.time = 0; } render(renderer, writeBuffer, readBuffer) { this.uniforms["tex"].value = readBuffer.texture; this.uniforms["time"].value = this.time; this.uniforms["factor"].value = this.factor; if (this.renderToScreen) { renderer.setRenderTarget(null); this.fsQuad.render(renderer); } else { renderer.setRenderTarget(writeBuffer); if (this.clear) renderer.clear(); this.fsQuad.render(renderer); } } } export { WaterPass }; //# sourceMappingURL=WaterPass.js.map