-
Anonymous
Как использовать воду в играх и сделать так, чтобы вода не текла в местность или объект и не вытекала из него, и вот тес
Сообщение
Anonymous »
Я просто справлюсь
Код: Выделить всё
Water Testbody { margin: 0; overflow: hidden; }const scene = new THREE.Scene();scene.background = new THREE.Color(0x87ceeb);const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 5000);camera.position.set(400, 250, 400);const renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setSize(innerWidth, innerHeight);renderer.setPixelRatio(window.devicePixelRatio);document.body.appendChild(renderer.domElement);const controls = new THREE.OrbitControls(camera, renderer.domElement);controls.enableDamping = true;controls.dampingFactor = 0.08;controls.maxPolarAngle = Math.PI * 0.49;controls.minDistance = 100;controls.maxDistance = 1500;scene.add(new THREE.AmbientLight(0xffffff, 0.5));const sun = new THREE.DirectionalLight(0xffffff, 1.1);sun.position.set(300, 500, 300);scene.add(sun);const waterGeometry = new THREE.PlaneGeometry(3000, 3000, 1, 1);const waterNormals = new THREE.TextureLoader().load( 'https://threejs.org/examples/textures/waternormals.jpg', t => { t.wrapS = t.wrapT = THREE.RepeatWrapping; });const water = new THREE.Water(waterGeometry, { textureWidth: 512, textureHeight: 512, waterNormals, alpha: 0.9, sunDirection: sun.position.clone().normalize(), sunColor: 0xffffff, waterColor: 0x006994, distortionScale: 3.5, fog: false});water.rotation.x = -Math.PI / 2;scene.add(water);const pole = new THREE.Mesh( new THREE.BoxGeometry(200, 400, 200), new THREE.MeshStandardMaterial({ color: 0xff3333 }));pole.position.set(0, 200, 0);scene.add(pole);const baseSpeed = 1 / 60;const slowSpeed = 1 / 300;const influenceRadius = 260;function animate() { requestAnimationFrame(animate); controls.update(); const dx = camera.position.x - pole.position.x; const dz = camera.position.z - pole.position.z; const dist = Math.sqrt(dx * dx + dz * dz); let speed = baseSpeed; if (dist < influenceRadius) { speed = THREE.MathUtils.lerp(slowSpeed, baseSpeed, dist / influenceRadius); water.material.uniforms.distortionScale.value = 1.5; } else { water.material.uniforms.distortionScale.value = 3.5; } water.material.uniforms.time.value += speed; renderer.render(scene, camera);}animate();addEventListener('resize', () => { camera.aspect = innerWidth / innerHeight; camera.updateProjectionMatrix(); renderer.setSize(innerWidth, innerHeight);});
Подробнее здесь:
https://stackoverflow.com/questions/798 ... of-terrain
1767925181
Anonymous
[code][/code]
Я просто справлюсь
[code]Water Testbody { margin: 0; overflow: hidden; }const scene = new THREE.Scene();scene.background = new THREE.Color(0x87ceeb);const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 5000);camera.position.set(400, 250, 400);const renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setSize(innerWidth, innerHeight);renderer.setPixelRatio(window.devicePixelRatio);document.body.appendChild(renderer.domElement);const controls = new THREE.OrbitControls(camera, renderer.domElement);controls.enableDamping = true;controls.dampingFactor = 0.08;controls.maxPolarAngle = Math.PI * 0.49;controls.minDistance = 100;controls.maxDistance = 1500;scene.add(new THREE.AmbientLight(0xffffff, 0.5));const sun = new THREE.DirectionalLight(0xffffff, 1.1);sun.position.set(300, 500, 300);scene.add(sun);const waterGeometry = new THREE.PlaneGeometry(3000, 3000, 1, 1);const waterNormals = new THREE.TextureLoader().load( 'https://threejs.org/examples/textures/waternormals.jpg', t => { t.wrapS = t.wrapT = THREE.RepeatWrapping; });const water = new THREE.Water(waterGeometry, { textureWidth: 512, textureHeight: 512, waterNormals, alpha: 0.9, sunDirection: sun.position.clone().normalize(), sunColor: 0xffffff, waterColor: 0x006994, distortionScale: 3.5, fog: false});water.rotation.x = -Math.PI / 2;scene.add(water);const pole = new THREE.Mesh( new THREE.BoxGeometry(200, 400, 200), new THREE.MeshStandardMaterial({ color: 0xff3333 }));pole.position.set(0, 200, 0);scene.add(pole);const baseSpeed = 1 / 60;const slowSpeed = 1 / 300;const influenceRadius = 260;function animate() { requestAnimationFrame(animate); controls.update(); const dx = camera.position.x - pole.position.x; const dz = camera.position.z - pole.position.z; const dist = Math.sqrt(dx * dx + dz * dz); let speed = baseSpeed; if (dist < influenceRadius) { speed = THREE.MathUtils.lerp(slowSpeed, baseSpeed, dist / influenceRadius); water.material.uniforms.distortionScale.value = 1.5; } else { water.material.uniforms.distortionScale.value = 3.5; } water.material.uniforms.time.value += speed; renderer.render(scene, camera);}animate();addEventListener('resize', () => { camera.aspect = innerWidth / innerHeight; camera.updateProjectionMatrix(); renderer.setSize(innerWidth, innerHeight);});[/code]
Подробнее здесь: [url]https://stackoverflow.com/questions/79863870/how-to-use-water-in-games-and-make-it-so-water-doesnt-flow-in-or-out-of-terrain[/url]