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...