import { WebGLRenderer, Scene, PerspectiveCamera, PlaneGeometry, ShaderMaterial, UniformsUtils } from 'three'; import { mat4, vec3 } from 'gl-matrix'; // Define water simulation parameters const waterSize = 50; const waterDepth = 1; const waveAmplitude = 0.1; const waveSpeed = 2.0; // Initialize scene objects and renderer const scene = new Scene(); const camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new WebGLRenderer({ antialias: true }); // Create water geometry and material const waterGeometry = new PlaneGeometry(waterSize, waterSize, waterSize * 2, waterSize * 2); const waterMaterial = new ShaderMaterial({ vertexShader: require('./shaders/water.vert'), fragmentShader: require('./shaders/water.frag'), uniforms: UniformsUtils.merge([ { time: { value: 0.0 } }, { waveAmplitude: { value: waveAmplitude } }, { waveSpeed: { value: waveSpeed } }, ]), }); // Create water object and add to scene const water = new THREE.Mesh(waterGeometry, waterMaterial); water.rotation.x = -Math.PI / 2; scene.add(water); // ... other scene objects and initialization function animate() { requestAnimationFrame(animate); // Update water simulation time waterMaterial.uniforms.time.value += 0.01; // Render the scene renderer.render(scene, camera); } init(); animate();