JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.js"></script>

CSS

body {
	  margin: 0;
}
canvas {
	display: block;
}

JavaScript

init();
animate(); //calling function that does all the rendering 

//GLOBAL VARS
var scene, camera, renderer, cube;
var raycaster, mouse;
var INTERSECTED;

// once everything is loaded, we run our Three.js stuff.
function init() {

	// create a scene, that will hold all our elements such as objects, cameras and lights.
	scene = new THREE.Scene();

	//SET CAMERA
	camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000)
	camera.position.z = 5;

	// create a render and set the size
	renderer = new THREE.WebGLRenderer({antialias: true});
	renderer.setClearColor("#e5e5e5"); //background color
	renderer.setSize(window.innerWidth,window.innerHeight); //size of renderer

	//bind rendered to the dom element
	document.body.appendChild(renderer.domElement);  


	//RAYCASTER
	raycaster = new THREE.Raycaster();
	mouse = new THREE.Vector2(1,1);


	// create a cube
	var cubeGeometry = new THREE.BoxGeometry(20, 0.00001, 20);
	var cubeMaterial = new THREE.MeshLambertMaterial({color: 0xffff00 }); //0xF7F7F7 = gray
	cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
	cube.userData.originalColor = 0xffff00;

	// position the cube
	cube.position.x = 0;
	cube.position.y = 3;
	cube.position.z = 0;
	scene.add(cube);


	//ADDING LIGHTS
	var ambientLight = new THREE.AmbientLight(0x0c0c0c);
	scene.add(ambientLight);
	var spotLight = new THREE.SpotLight(0xffffff);
	spotLight.position.set(-40, 60, -10);
	spotLight.castShadow = true;
	scene.add(spotLight);


	// position and point the camera to the center of the scene
	camera.position.x = -30;
	camera.position.y = 40;
	camera.position.z = 30;
	camera.lookAt(scene.position);


	// when the mouse moves, call the given function
	document.addEventListener('mousemove', onDocumentMouseMove, false);
}

function onDocumentMouseMove(event)
{
	// the following line would stop any other event handler from firing
	// (such as the mouse's TrackballControls)
	event.preventDefault();

	// update the mouse variable
	mouse.x =...