JSFiddle - React, Tailwind, and code Playground

by navinleon

HTML

<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/controls/OrbitControls.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/OBJLoader.js"></script>

<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/shaders/CopyShader.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/postprocessing/EffectComposer.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/postprocessing/RenderPass.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/postprocessing/ShaderPass.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/postprocessing/OutlinePass.js"></script>

<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/libs/stats.min.js"></script>
<script src="//cdn.rawgit.com/mrdoob/three.js/master/examples/js/libs/dat.gui.min.js"></script>

CSS

body {
	  margin: 0;
}

JavaScript

var container, stats;
var camera, scene, renderer, controls, backgroundScene, backgroundCamera;
var raycaster = new THREE.Raycaster();

var mouse = new THREE.Vector2();
var selectedObjects = [];

var composer, effectFXAA, outlinePass;

function init() {

  backgroundCamera = new THREE.OrthographicCamera(
    -1, 1, 1, -1, -1, 0);

  backgroundScene = new THREE.Scene()

  const fragmentShader = `
    void main()	{
      gl_FragColor = vec4(0.7, 0, 0, 1.);
    }
  `
  
  backgroundScene.add(new THREE.Mesh(
    new THREE.PlaneBufferGeometry(2, 2), 
    new THREE.ShaderMaterial({
    fragmentShader
  })));

	container = document.createElement( 'div' );
	document.body.appendChild( container );

	var width = window.innerWidth;
	var height = window.innerHeight;

	renderer = new THREE.WebGLRenderer();
	renderer.shadowMap.enabled = true;

	renderer.setSize( width, height );
  renderer.autoClear = false
  
	document.body.appendChild( renderer.domElement );

	scene = new THREE.Scene();

	camera = new THREE.PerspectiveCamera( 45, width / height, 0.1, 100 );
	camera.position.set( 0, 0, 8 );

	controls = new THREE.OrbitControls( camera, renderer.domElement );
	scene.add( new THREE.AmbientLight( 0xaaaaaa, 0.2 ) );

	var light = new THREE.DirectionalLight( 0xddffdd, 0.6 );
	light.position.set( 1, 1, 1 );
	scene.add( light );
	
	var geometry = new THREE.TorusBufferGeometry( 1, 0.3, 16, 100 );
	var material = new THREE.MeshPhongMaterial( { color: 0xffaaff } );
	var torus = new THREE.Mesh( geometry, material );
	torus.position.z = - 4;
	scene.add( torus );

	composer = new THREE.EffectComposer( renderer );
  
  var backgroundPass = new THREE.RenderPass(
  	backgroundScene, 
    backgroundCamera);
    
	composer.addPass( backgroundPass );
  
  backgroundPass.clear = false

	var renderPass = new THREE.RenderPass( scene, camera );
	composer.addPass( renderPass );
  
  renderPass.clear = false

	outlinePass = new THREE.OutlinePass( 
  	new THREE.Vector2( 
    	window.innerWidth,...