一、效果图:
二、代码实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模拟下雨</title>
<style>
body{
margin: 0px;
overflow: hidden;
}
</style>
<script src="js/yanhuang/three.js"></script>
<script src="js/yanhuang/OrbitControls.js"></script>
</head>
<body>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(292, 100, 268);
camera.lookAt(scene.position);
var points = new THREE.PointLight(0xffffff);
points.position.set(400,300,500);
scene.add(points);
var Ambient = new THREE.AmbientLight(0x888888);
scene.add(Ambient);
var bgtexture = new THREE.TextureLoader().load("1.jfif");
var bgSpriteMaterial = new THREE.SpriteMaterial({
map:bgtexture,
transparent:true,
opacity:0.5
})
var bgSprite = new THREE.Sprite(bgSpriteMaterial);
scene.add(bgSprite);
bgSprite.scale.set(850,850,400);
var rains = new THREE.TextureLoader().load("rain.png");
var group = new THREE.Group();
for(var i = 0; i < 500; i++)
{
var spriteMaterial = new THREE.SpriteMaterial({
map:rains
});
var sprite = new THREE.Sprite(spriteMaterial);
group.add(sprite);
sprite.scale.set(7,9,1);
var r1 = Math.random() - 0.5;
var r2 = Math.random();
var r3 = Math.random() - 0.5;
sprite.position.set(1000 * r1, 300 * r2, 1000 * r3);
}
scene.add(group);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);
function render()
{
group.children.forEach(sprite =>{
sprite.position.y -=1;
if(sprite.position.y < 0)
{
sprite.position.y = 200;
}
});
renderer.render(scene,camera);
requestAnimationFrame(render);
}
render();
</script>
</body>
</html>