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