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