JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://mrdoob.github.com/three.js/build/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.3/dat.gui.min.js"></script>

CSS

canvas {
  width: 100%;
  height: 100%
}

body {
  margin: 0;
}

JavaScript

var A = 0.44;
var n = 3;
var uSteps = 149, vSteps = 149;
var pi = Math.PI;
var scale = 0.03;
var phi = (1 + Math.sqrt(5)) / 2;
var a = 1 / Math.sqrt(3);
var b = a / phi;
var c = a * phi;
var points =
    [[a, a, a],
    [a, a, -a],
    [a, -a, a],
    [-a, -a, a],
    [-a, a, -a],
    [-a, a, a],
    [0, b, -c],
    [0, -b, -c],
    [0, -b, c],
    [c, 0, -b],
    [-c, 0, -b],
    [-c, 0, b],
    [b, c, 0],
    [b, -c, 0],
    [-b, -c, 0],
    [-b, c, 0],
    [0, b, c],
    [a, -a, -a],
    [c, 0, b],
    [-a, -a, -a]];


function reorient(axis1, axis2) {
    var vX1 = axis1.normalize();
    var vX2 = axis2.normalize();
    var vY = vX1.clone().cross(vX2).normalize();
    var vZ1 = vX1.clone().cross(vY).normalize();
    var vZ2 = vX2.clone().cross(vY).normalize();
    var M1array = [vX1.x, vX1.y, vX1.z, vY.x, vY.y, vY.z, vZ1.x, vZ1.y, vZ1.z];
    var M1 = new THREE.Matrix3();
    M1.fromArray(M1array);
    var M2array = [vX2.x, vY.x, vZ2.x, vX2.y, vY.y, vZ2.y, vX2.z, vY.z, vZ2.z];
    var M2 = new THREE.Matrix3();
    M2.fromArray(M2array);
    var M = M1.clone().multiply(M2);
    var elems = M.elements;
    var A = new THREE.Matrix4();
    A.set(elems[0], elems[1], elems[2], axis2.x,
        elems[3], elems[4], elems[5], axis2.y,
        elems[6], elems[7], elems[8], axis2.z,
        0, 0, 0, 1);
    return A;
}

function getRotation(U, V) {
    var ma = U.length();
    var mb = V.length(); // should be = ma
    var d = U.x * V.x + U.y * V.y + U.z * V.z;
    var c = Math.sqrt(ma * mb + d);
    var ma2 = Math.sqrt(2) * ma;
    var r = 1 / ma2 / c;
    var W = U.clone().cross(V).multiplyScalar(r);
    var quat = new THREE.Quaternion().set(W.x, W.y, W.z, c / ma2);
    return new THREE.Matrix4().makeRotationFromQuaternion(quat);
}

function addReorientedMesh(geom, material, object, axis1, axis2) {
    var mesh = new THREE.Mesh(geom, material);
    var transfoMatrix = reorient(axis1, axis2);
    mesh.matrix = transfoMatrix;
    mesh.matrixAutoUpdate = false;
   ...