JSFiddle - React, Tailwind, and code Playground

by Browork

HTML

<script src="https://threejs.org/build/three.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://threejs.org/examples/js/libs/dat.gui.min.js"></script>

CSS

body {
	  margin: 0;
}

JavaScript

var camera, scene, renderer;
var group;
var oCamera, pCamera, aCamera, oControls

var gui, cameraSwitchButton, guiOptions;

init();
//animate();

function init() {
    guiOptions = {
    	orthographicCamera: false 
    }
    gui = new dat.GUI();
		cameraSwitchButton = gui.add(guiOptions, 'orthographicCamera');
		 cameraSwitchButton.onChange(function (value) {
      	switchCamera(value);
     });

    pCamera = new THREE.PerspectiveCamera( 80, window.innerWidth / window.innerHeight, 0.1, 9000 );
		pCamera.position.z = 500;
    oCamera = new THREE.OrthographicCamera(  window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, -9000, 9000 );
    oCamera.position.z = 500;
		aCamera = pCamera;
    
    scene = new THREE.Scene();
		scene.background = new THREE.Color( 0xaaaaaa );
    
    group = new THREE.Group();
		scene.add( group );
    
    scene.add( new THREE.DirectionalLight() );
		scene.add( new THREE.HemisphereLight() );

		var geometry = new THREE.BoxBufferGeometry( 10, 10, 10 );
		
   	
      var material = new THREE.MeshLambertMaterial( {
        color: Math.random() * 0xffffff
      } );

      var mesh = new THREE.Mesh( geometry, material );
  
   
      group.add( mesh );      
	

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );
    
    oControls = new THREE.OrbitControls( aCamera, renderer.domElement );
		oControls.addEventListener( 'change', render );
    render();
}

function switchCamera(isOrthographic) {
		var cameraPosition = aCamera.position.clone();
		var cameraMatrix =  aCamera.matrix.clone();
		var oControlsTarget = oControls.target.clone();
		var oControlsPosition = oControls.position0.clone();
		if (isOrthographic == false) {
			aCamera = pCamera;
		} else {
			aCamera = oCamera;	
		}
   ...