效果:

 

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>下雨场景效果模拟</title>
  <script src="../three.js"></script>
  <script src="../OrbitControls.js"></script>
</head>
<body>
  <script>
    // 1,创建场景对象
    var scene = new THREE.Scene();
    // 2,创建模型对象
    var plane_geometry = new THREE.PlaneGeometry(500,500);
    plane_geometry.rotateX(Math.PI/2);
    // 加载草地图片
    var gress = new THREE.TextureLoader().load('./caodi.png');
    gress.wrapS = THREE.RepeatWrapping;
    gress.wrapT = THREE.RepeatWrapping;
    gress.repeat.set(20,20);
    var plane_material = new THREE.MeshBasicMaterial({
      // color:0xffaacc,
      side:THREE.DoubleSide,
      map:gress
    });
    var mesh = new THREE.Mesh(plane_geometry,plane_material);
    scene.add(mesh);
    // 创建雨滴
    var group = new THREE.Group();
    var rain = new THREE.TextureLoader().load('./rain2.png');
    for(var i = 0;i<500;i++){
      // 创建精灵材质
      var sprite_material = new THREE.SpriteMaterial({map: rain});
      var sprite = new THREE.Sprite(sprite_material);
      sprite.position.set(Math.random()*200,Math.random()*300,Math.random()*200);
      sprite.scale.set(8,8,1);
      group.add(sprite);
    }
      scene.add(group);
    // 3,创建光源对象
    var ambient = new THREE.AmbientLight(0xffffff)
    scene.add(ambient);
    // 3,创建光源对象
    var point = new THREE.PointLight(0xffffff)
    point.position.set(200,100,200);
    scene.add(point);
    // 4,创建相机对象
    var width = window.innerWidth;
    var height = window.innerHeight;
    var k = width / height;
    var s = 200;
    var camera = new THREE.PerspectiveCamera(60,k,0.1,1000);
    camera.position.set(200,50,200);
    camera.lookAt(scene.position);
    // 5,创建渲染器对象
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(width,height);
    document.body.appendChild(renderer.domElement);
    function render(){
      renderer.render(scene,camera);
      group.children.forEach(rain => {
        rain.position.y -= 1;
        if(rain.position.y<0){
          rain.position.y = 200;
        }
      });
      requestAnimationFrame(render);
    }
    // 创建轴坐标对象
    var axes = new THREE.AxesHelper(500);
    scene.add(axes);
    // 创建鼠标控制对象
    var controls = new THREE.OrbitControls(camera,renderer.domElement);

    render();
  </script>
</body>
</html>

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐