JSFiddle - React, Tailwind, and code Playground

by Kearnan Kelly

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r71/three.js"></script>

JavaScript

THREE.Object3D.prototype.rotateAroundWorldAxis = function() {

    var q1 = new THREE.Quaternion();
    return function ( point, axis, angle ) {

        q1.setFromAxisAngle( axis, angle );

        this.quaternion.multiplyQuaternions( q1, this.quaternion );

        this.position.sub( point );
        this.position.applyQuaternion( q1 );
        this.position.add( point );

        return this;
    }

}();


var sw = window.innerWidth, sh = window.innerHeight;
var scene = new THREE.Scene();

var camera = new THREE.PerspectiveCamera( 100, sw / sh, 1, 10000 );
scene.add( camera );

var renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize( sw, sh );

var material = new THREE.MeshBasicMaterial({ wireframe: true });
var geometry = new THREE.BoxGeometry(100, 100, 100);
var object = new THREE.Mesh(geometry, material);
scene.add(object);

document.body.appendChild(renderer.domElement);

camera.position.set(0, 1000, 300);
camera.lookAt(scene.position);
var r = 0, t = -1, a = 0;

var p = new THREE.Vector3(0, 0, 0);
var ax = new THREE.Vector3(0, 1, 0);
var frames = 300;
setInterval(function(){
    t ++;
    if (t % frames == 0) {
    	a++;
        a %= 2;
        p.x = (a == 1 ? 1 : -1) * 200;
        r = a == 1 ? -1 : 1;
    }
    object.rotateAroundWorldAxis(p, ax, r * Math.PI * 2 / frames);
    
    renderer.render(scene, camera);
}, 10);