JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdn.jsdelivr.net/npm/three@0.140.2/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.140.2/examples/js/controls/OrbitControls.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.140.2/examples/js/libs/chevrotain.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.140.2/examples/js/loaders/VRMLLoader.js"></script>

<button id="change">
Change Scene
</button>

CSS

body {
	  margin: 0;
}

JavaScript

let showVrmlModel = false;
let scene, renderer;

init();

function init() {

  const defaultAspect = 1;
  scene = new THREE.Scene();
  const camera = new THREE.PerspectiveCamera(45, defaultAspect, 0.1, 1000);
  camera.position.set(10, 10, 20);
  renderer = new THREE.WebGLRenderer();
  renderer.domElement.style.width = "100%";
  renderer.domElement.style.aspectRatio = "4/3";
  renderer.shadowMap.enabled = true;
  document.body.appendChild(renderer.domElement);

  populateScene(showVrmlModel);
  
  const controls = new THREE.OrbitControls(camera, renderer.domElement);
  controls.minDistance = 1;
  controls.maxDistance = 1000;
  controls.enableDamping = true;
  
  const animate = () => {
    requestAnimationFrame(animate);
    resizeCanvasToDisplaySize(camera, renderer);
    controls.update();
    renderer.render(scene, camera);
  };
  resizeCanvasToDisplaySize(camera, renderer, true);
  animate();

}


document.getElementById('change').addEventListener('pointerdown', function() {

	showVrmlModel = ! showVrmlModel;
  
  scene.traverse(function(object) {
    if (object.material) object.material.dispose();
    if (object.material && object.material.map)
      object.material.map.dispose();
    if (object.geometry) object.geometry.dispose();
  });
  
  scene.clear();
  renderer.dispose();
  document.body.removeChild(renderer.domElement);
  
  init();
 
} );

function populateBasicScene() {
  // Lights
  const ambientLight = new THREE.AmbientLight(0x505050);
  scene.add(ambientLight);

  const spotLight = new THREE.SpotLight(0xffffff);
  spotLight.angle = Math.PI / 5;
  spotLight.penumbra = 0.2;
  spotLight.position.set(2, 3, 3);
  spotLight.castShadow = true;
  spotLight.shadow.camera.near = 0.5;
  spotLight.shadow.camera.far = 10;
  spotLight.shadow.mapSize.width = 1024;
  spotLight.shadow.mapSize.height = 1024;
  scene.add(spotLight);
  scene.add(new THREE.CameraHelper(spotLight.shadow.camera));

  const knot = new THREE.Mesh(
    new THREE.TorusKnotGeometry(0.4,...