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( 500, 100, 100 );
		
    			
      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();
}


var Z      = 500;
var aspect = innerWidth / innerHeight;
var size_y = depht_s * Z;
var size_x = depht_s * Z * aspect; 


     
     var fov_y   = 80;
var depht_s = Math.tan(fov_y/2.0 * Math.PI/180.0) * 2.0;


function switchCamera(isOrthographic) {
		var cameraPosition = aCamera.position.clone();
		var cameraMatrix =  aCamera.matrix.clone();
		var oControlsTarget = oControls.target.clone();
		var oControlsPosition...