JSFiddle - React, Tailwind, and code Playground

by paulocoelho

HTML

<script src="http://threejs.org/build/three.min.js"></script>
<script src="http://threejs.org/examples/js/loaders/OBJLoader.js"></script>
<script src="http://threejs.org/examples/js/loaders/OBJMTLLoader.js"></script>
<script src="http://threejs.org/examples/js/loaders/MTLLoader.js"></script>

CSS

body {
    background:black;
}

JavaScript

var container, stats;
var camera, scene, renderer;
var cube, plane;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
var mouseX, mouseY, projector;

init();

function init() {
    container = document.createElement('div');
    document.body.appendChild(container);
    
	window.addEventListener( 'mousemove', onMouseMove, false );
    
    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
    camera.position.x = 50;
    camera.position.y = 50;
    camera.position.z = 50;
    camera.lookAt(new THREE.Vector3(0, 0, 0));
    scene = new THREE.Scene();

    renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.shadowMapEnabled = true;
    renderer.shadowMapSoft = true;
    container.appendChild(renderer.domElement);

    light = new THREE.SpotLight();
    light.position.set(300, 300, 300);
    scene.add(light);

    var litCube = new THREE.Mesh(
    new THREE.CubeGeometry(5, 5, 5),
    new THREE.MeshLambertMaterial({
        color: 0xFFFFFF
    }));
    litCube.position.y = 15;
    litCube.position.z = 30;
    scene.add(litCube);

    projector = new THREE.Projector();


    var loader = new THREE.OBJMTLLoader();
    loader.addEventListener("load", function (event) {
        cube = event.content;
        scene.add(cube);
        animate();
    });
    loader.load("https://dl.dropboxusercontent.com/u/4334059/VM.obj", "https://dl.dropboxusercontent.com/u/4334059/VM.mtl");
}

function animate() {
    requestAnimationFrame(animate);
    render();
}

function render() {

    var vector = new THREE.Vector3(mouseX, mouseY, 1);
    projector.unprojectVector(vector, camera);

    var ray = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
    var intersects = ray.intersectObjects(scene.children);

    console.log(intersects.length);

    renderer.render(scene, camera);
}

function onMouseMove(e) {
   ...