Had fun making this smoke cloud for a work project.
Derived from then expanded upon: https://codepen.io/teolitto/pen/KwOVvL
A Pen by Sean Dempsey on CodePen.
| let cam, scene, renderer, | |
| clock, smokeMaterial, | |
| h, w, | |
| smokeParticles = []; | |
| const animate = () => { | |
| let delta = clock.getDelta(); | |
| requestAnimationFrame(animate); | |
| [].forEach.call(smokeParticles, sp => { | |
| sp.rotation.z += delta * 0.2; | |
| }); | |
| renderer.render(scene, cam); | |
| }, | |
| resize = () => { | |
| renderer.setSize(window.innerWidth, window.innerHeight); | |
| }, | |
| lights = () => { | |
| const light = new THREE.DirectionalLight(0xffffff, 0.5); | |
| clock = new THREE.Clock(); | |
| renderer = new THREE.WebGLRenderer(); | |
| renderer.setClearColor(0x00547f, 1); | |
| renderer.setSize(w, h); | |
| scene = new THREE.Scene(); | |
| light.position.set(-1, 0, 1); | |
| scene.add(light); | |
| }, | |
| camera = () => { | |
| cam = new THREE.PerspectiveCamera( | |
| 75, | |
| w / h, | |
| 1, | |
| 10000 | |
| ); | |
| cam.position.z = 1000; | |
| scene.add(cam); | |
| }, | |
| action = () => { | |
| const loader = new THREE.TextureLoader(); | |
| loader.crossOrigin = ''; | |
| loader.load( | |
| 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/82015/blue-smoke.png', | |
| function onLoad(texture) { | |
| const smokeGeo = new THREE.PlaneBufferGeometry(300, 300); | |
| smokeMaterial = new THREE.MeshLambertMaterial({ | |
| map: texture, | |
| transparent: true | |
| }); | |
| for (let p = 0, l = 350; p < l; p++) { | |
| let particle = new THREE.Mesh(smokeGeo, smokeMaterial); | |
| particle.position.set( | |
| Math.random() * 500 - 250, | |
| Math.random() * 500 - 250, | |
| Math.random() * 1000 - 100 | |
| ); | |
| particle.rotation.z = Math.random() * 360; | |
| scene.add(particle); | |
| smokeParticles.push(particle); | |
| } | |
| animate(); | |
| } | |
| ); | |
| }, | |
| init = () => { | |
| h = window.innerHeight; | |
| w = window.innerWidth; | |
| lights(); //💡 | |
| camera(); // 🎥 | |
| action(); // 🎬 | |
| document.body.appendChild(renderer.domElement); | |
| window.addEventListener('resize', resize); | |
| }; | |
| init(); |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/97/three.min.js"></script> |
| html, | |
| body { | |
| overflow: hidden; | |
| } |
Had fun making this smoke cloud for a work project.
Derived from then expanded upon: https://codepen.io/teolitto/pen/KwOVvL
A Pen by Sean Dempsey on CodePen.