JSFiddle - React, Tailwind, and code Playground

by Paul West

CSS

body {
  overflow: hidden;
  margin: 0;
}

JavaScript

import * as THREE from "https://cdn.skypack.dev/[email protected]";
import {OrbitControls} from "https://cdn.skypack.dev/[email protected]/examples/jsm/controls/OrbitControls";
import {STLLoader} from "https://cdn.skypack.dev/[email protected]/examples/jsm/loaders/STLLoader";

var objs = [];

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.setScalar(7);
var renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new OrbitControls(camera, renderer.domElement);

var loader = new STLLoader();
loader.load('https://threejs.org/examples/models/stl/ascii/slotted_disk.stl', function(geometry) {
  var material = new THREE.MeshBasicMaterial({
    color: "gray"
  });
  var mesh = new THREE.Mesh(geometry, material);
  mesh.rotation.set(0, Math.PI, 0);
  mesh.scale.setScalar(10);
  scene.add(mesh);
  objs.push(mesh);
  
  var wireframe = new THREE.LineSegments(new THREE.WireframeGeometry(geometry), new THREE.LineBasicMaterial({color: "aqua"}));
  mesh.add(wireframe);
});

var marker = new THREE.Mesh(new THREE.SphereBufferGeometry(0.25, 4, 2), new THREE.MeshBasicMaterial({
  color: 0xFFc8FF
}));
marker.position.setScalar(1000);
scene.add(marker);

var intscs = [];
var rc = new THREE.Raycaster();
var m = new THREE.Vector2();
var poi = new THREE.Vector3();
var pos = new THREE.Vector3();
var tp = [
  new THREE.Vector3(),
  new THREE.Vector3(),
  new THREE.Vector3()
];
var tri = new THREE.Triangle();
var bc = new THREE.Vector3();
var idx = 0;

renderer.domElement.addEventListener("pointermove", onMouseMove);

function onMouseMove(event) {
  m.x = (event.clientX / window.innerWidth) * 2 - 1;
  m.y = -(event.clientY / window.innerHeight) * 2 + 1;
  rc.setFromCamera(m, camera);
  intscs = rc.intersectObjects(objs, false);
  if (intscs.length > 0) {
    let o = intscs[0];
   ...