JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/98/three.min.js"></script>
<script src="js/libs/three.js/orbitcontrols.js"></script>
<script src="//rawgit.com/mrdoob/three.js/2b6505090d40d000606b29ba126d87397414633e/examples/js/controls/OrbitControls.js"></script>
CSS
body {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
JavaScript
/*global THREE*/
var scene , camera , renderer , controls;
var mesh;
function init ( ) {
"use strict";
var SCREEN_WIDTH = window.innerWidth;
var SCREEN_HEIGHT = window.innerHeight;
var VIEW_ANGLE = 45;
var ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT;
var NEAR = 0.1;
var FAR = 1000;
scene = new THREE.Scene ( );
camera = new THREE.PerspectiveCamera ( VIEW_ANGLE , ASPECT , NEAR , FAR );
camera.position.set ( 5 , 5 , 5 );
camera.lookAt ( scene.position );
renderer = new THREE.WebGLRenderer ( {
antialias: true
} );
renderer.setPixelRatio ( window.devicePixelRatio );
renderer.setSize ( SCREEN_WIDTH , SCREEN_HEIGHT );
document.body.appendChild ( renderer.domElement );
controls = new THREE.OrbitControls ( camera , renderer.domElement );
var mergedGeometry = new THREE.Geometry ( );
var geometry = new THREE.BoxGeometry ( 1 , 1 , 1 );
var i;
var k;
var x;
var y;
var z;
for ( i = 0; i < 2; i += 1 ) {
for ( k = 0; k < 2; k += 1 ) {
x = i;
y = 0;
z = k;
geometry.translate ( x , y , z );
mergedGeometry.merge ( geometry );
geometry.translate ( -x , -y , -z );
}
}
function removeDuplicateFaces ( geometry ) {
var m;
var n;
var face;
var face2;
for ( m = 0; m < geometry.faces.length; m += 1 ) {
face = geometry.faces[m];
face.centroid = new THREE.Vector3 ( 0 , 0 , 0 );
face.centroid.add ( geometry.vertices[ face.a ] );
face.centroid.add ( geometry.vertices[ face.b ] );
face.centroid.add ( geometry.vertices[ face.c ] );
face.centroid.divideScalar ( 3 );
console.log ( "[face] " + m + ", [vertices] " + face.a + ", " + face.b + ", " + face.c );
for ( n = 0; n < m; n += 1 ) {
face2 = geometry.faces[n];
if ( face2 !==...