JSFiddle - React, Tailwind, and code Playground

by Douglas Duhaime

HTML

<script src="http://threejs.org/build/three.min.js"></script>
<script src="http://threejs.org/examples/js/controls/OrbitControls.js"></script>

CSS

body {
    background-color: #000;
    margin: 0px;
    overflow: hidden;
}

JavaScript

//... based on am original JS Fiddle by WestLangley.
var camera, scene, renderer;
var time=0, dt=0;
var q1, q2, q3, q4; // added

init();
animate();
//======================================================================

function init() {

    scene = new THREE.Scene();
    scene.add(new THREE.AmbientLight(0x222222));

    camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.x = 500;
    camera.position.y = 0;
    camera.position.z = 300;
    camera.lookAt(0,0,0);
    scene.add(camera);

    //AMBIENT LIGHT

	var ambientlight111 = new THREE.AmbientLight(0xaaaaaa);
	scene.add( ambientlight111 );		

    //SPHERES
    var t_Geometry = new THREE.SphereGeometry(10, 20, 20);
    var t_Material = new THREE.MeshLambertMaterial({color: 0xffffff , opacity: 0.8});
    t_Material.transparent = true;
    target = new THREE.Mesh(t_Geometry, t_Material);
    scene.add( target );	
    
    var s_Geometry = new THREE.SphereGeometry(15, 20, 20);
    var s1_Material = new THREE.MeshLambertMaterial({color: 0xff0000 });
    var s2_Material = new THREE.MeshLambertMaterial({color: 0x00ff00 });
    var s3_Material = new THREE.MeshLambertMaterial({color: 0x0000ff });
    var s4_Material = new THREE.MeshLambertMaterial({color: 0xffff00 });
   
    s1 = new THREE.Mesh(s_Geometry, s1_Material);
    s2 = new THREE.Mesh(s_Geometry, s2_Material);
    s3 = new THREE.Mesh(s_Geometry, s3_Material);
    s4 = new THREE.Mesh(s_Geometry, s4_Material);
    s1.position.set (-140, -80, -120);
    s2.position.set (-80,  80, -120);
    s3.position.set ( 80,  80, -120);
    s4.position.set ( 140, -80, -120);
    scene.add(s1);
    scene.add(s2);
    scene.add(s3);
    scene.add(s4);
    
    //s_Geometry.dynamic = true; //... not neccesary

    //CONE
    c_geometry = new THREE.CylinderGeometry(3, 40, 120, 40, 10, false);
    //... Following mod is as rec by WestLangley's answer at:-
    //......