JSFiddle - React, Tailwind, and code Playground

by Feiyu Yan

HTML

<script async src="https://unpkg.com/[email protected]/dist/es-module-shims.js"></script>

<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>

<script type="importmap">
	{
	"imports": {
		"three": "https://unpkg.com/[email protected]/build/three.module.js",
		"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
	}
	}
</script>

CSS

body { margin: 0; }
canvas { width: 100%; height: 100% }

JavaScript

import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { STLLoader } from 'three/addons/loaders/STLLoader.js';
import { Face } from 'three/addons/math/ConvexHull.js';

        let camera, scene, raycaster, renderer, controls;

        let INTERSECTED;
        let prevIndex = -1
        const pointer = new THREE.Vector2();
        var prevColor = new THREE.Color(0xff0000)

        init();
        animate(); 

        function init() {

            camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.01, 1000);
            camera.position.set(0.52, 0.46, -0.3);

            scene = new THREE.Scene();

            const light = new THREE.DirectionalLight(0xffffff, 1);
            light.position.set(1, 1, 1).normalize();
            scene.add(light);

            const loader = new STLLoader();
            loader.load('https://oss-yanfeiyu.oss-cn-hangzhou.aliyuncs.com/test_model/IRB1200H_7-705-90_IRC5_Base_Standard_rev0.STL', function (geometry) {

                const material = new THREE.MeshBasicMaterial({ vertexColors: THREE.FaceColors, wireframe: false, side: THREE.DoubleSide });
                const mesh = new THREE.Mesh(geometry, material);

                mesh.position.set(0, 0, 0);
                mesh.rotation.set(- Math.PI / 2, 0, 0);
                mesh.scale.set(0.001, 0.001, 0.001)
                scene.add(mesh);

                var wire = new THREE.LineSegments(new THREE.WireframeGeometry(mesh.geometry), new THREE.LineBasicMaterial({ color: "black" }));
                mesh.add(wire);



            });

            renderer = new THREE.WebGLRenderer({
                antialias: true
            });
            renderer.setPixelRatio(window.devicePixelRatio);
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.setClearColor(0x818181);
            document.body.appendChild(renderer.domElement);

            controls = new...