three雷达波效果(水波)

 

 

import * as THREE from 'three';

// 创建场景和相机
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 20);

// 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// 波纹数量和参数
const waveCount = 5; // 波纹数量
const maxRadius = 10; // 最大半径
const waveSpeed = 0.02; // 波纹扩展速度

// 创建波纹组
const waveGroup = new THREE.Group();
scene.add(waveGroup);

// 创建波纹材质和几何体
const waveMaterial = new THREE.MeshBasicMaterial({
  color: 0x00ff00,
  transparent: true,
  opacity: 0.5,
  side: THREE.DoubleSide,
});

for (let i = 0; i < waveCount; i++) {
  const waveGeometry = new THREE.RingGeometry(0.1, 0.2, 64); // 初始半径为 0.1 到 0.2
  const waveMesh = new THREE.Mesh(waveGeometry, waveMaterial);
  waveGroup.add(waveMesh);
}

// 动画循环
function animateWaves() {
  const time = performance.now() * waveSpeed * 0.001; // 基于时间的动态缩放

  waveGroup.children.forEach((wave, index) => {
    const delay = index * (maxRadius / waveCount); // 每个波纹的时间延迟
    const scale = ((time + delay) % maxRadius) / maxRadius; // 当前波纹的比例

    wave.scale.set(scale * maxRadius, scale * maxRadius, 1); // 动态调整波纹大小
    wave.material.opacity = 1 - scale; // 波纹逐渐透明
  });
}

// 渲染循环
function render() {
  requestAnimationFrame(render);
  animateWaves();
  renderer.render(scene, camera);
}

render(); // 启动渲染

 

posted @ 2025-05-15 21:03  SimoonJia  阅读(5)  评论(0)    收藏  举报