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%
}

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);
}

// parameterization -------------------------------------------------
function f0(u, v, A, n) {
  // both u and v run from zero to one in Three.js
  var t = n * 2 * pi * u;
  var phi = 2 * pi * v;
  var h = pi / 2 - (pi / 2 - A) * Math.cos(t);
  var sinh = Math.sin(h);
  var p2 = sinh * Math.cos(t / n + A * Math.sin(2 * t));
  var p3 =...