JSFiddle - React, Tailwind, and code Playground
by blackInk
HTML
<script src="https://threejs.org/build/three.js"></script>
<script src="https://threejs.org/examples/js/shaders/CopyShader.js"></script>
<script src="https://threejs.org/examples/js/shaders/FXAAShader.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/EffectComposer.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/RenderPass.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/ShaderPass.js"></script>
CSS
body {
margin: 0;
}
JavaScript
var camera, scene, efxScene, foregroundScene, renderer, composer, efxComposer;
init();
animate();
function init() {
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.autoClear = false;
document.body.appendChild( renderer.domElement );
//
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.z = 400;
scene = new THREE.Scene();
efxScene = new THREE.Scene();
foregroundScene = new THREE.Scene();
var geometry = new THREE.SphereBufferGeometry( 1, 4, 4 );
var material = new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true } );
for ( var i = 0; i < 100; i ++ ) {
var mesh = new THREE.Mesh( geometry, material );
mesh.position.set( Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5 ).normalize();
mesh.position.multiplyScalar( Math.random() * 400 );
mesh.rotation.set( Math.random() * 2, Math.random() * 2, Math.random() * 2 );
mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 50;
scene.add( mesh );
}
var mesh1 = new THREE.Mesh( new THREE.SphereBufferGeometry( 14, 4, 4 ), material );
efxScene.add( mesh1 );
mesh1.scale.x = mesh1.scale.y = mesh1.scale.z = 6;
efxScene.add( new THREE.AmbientLight( 0x222222 ) );
efxScene.add( new THREE.DirectionalLight( 0xffffff ) );
var mesh2 = new THREE.Mesh( new THREE.SphereBufferGeometry( 14, 4, 4 ), material );
foregroundScene.add( mesh2 );
mesh2.scale.x = mesh2.scale.y = mesh2.scale.z = 3;
foregroundScene.add( new THREE.AmbientLight( 0xffffff ) );
foregroundScene.add( new THREE.DirectionalLight( 0x0000ff ) );
scene.add( new THREE.AmbientLight( 0x222222 ) );
var light = new THREE.DirectionalLight( 0xffff00 );
light.position.set( 1, 1, 1 );
scene.add( light );
// postprocessing
var width = window.innerWidth;
var...