MCPcopy Create free account
hub / github.com/microsoft/SandDance / tesselateColumn

Function tesselateColumn

docs/app/js/sanddance-app.js:100729–100788  ·  view source on GitHub ↗
(props)

Source from the content-addressed store, hash-verified

100727 return ColumnGeometry1;
100728}((0, _core1.Geometry));
100729function tesselateColumn(props) {
100730 var radius = props.radius, _props$height = props.height, height = _props$height === void 0 ? 1 : _props$height, _props$nradial = props.nradial, nradial = _props$nradial === void 0 ? 10 : _props$nradial, vertices = props.vertices;
100731 (0, _core.log).assert(!vertices || vertices.length >= nradial);
100732 var vertsAroundEdge = nradial + 1;
100733 var numVertices = vertsAroundEdge * 3;
100734 var stepAngle = Math.PI * 2 / nradial;
100735 var indices = new Uint16Array(nradial * 6);
100736 var positions = new Float32Array(numVertices * 3);
100737 var normals = new Float32Array(numVertices * 3);
100738 var i = 0;
100739 for(var j = 0; j < vertsAroundEdge; j++){
100740 var a = j * stepAngle;
100741 var vertex = vertices && vertices[j % nradial];
100742 var nextVertex = vertices && vertices[(j + 1) % nradial];
100743 var sin = Math.sin(a);
100744 var cos = Math.cos(a);
100745 for(var k = 0; k < 2; k++){
100746 positions[i + 0] = vertex ? vertex[0] : cos * radius;
100747 positions[i + 1] = vertex ? vertex[1] : sin * radius;
100748 positions[i + 2] = (0.5 - k) * height;
100749 normals[i + 0] = vertex ? nextVertex[0] - vertex[0] : cos;
100750 normals[i + 1] = vertex ? nextVertex[1] - vertex[1] : sin;
100751 i += 3;
100752 }
100753 }
100754 for(var _j = 0; _j < vertsAroundEdge; _j++){
100755 var v = Math.floor(_j / 2) * Math.sign(_j % 2 - 0.5);
100756 var _a = v * stepAngle;
100757 var _vertex = vertices && vertices[(v + nradial) % nradial];
100758 var _sin = Math.sin(_a);
100759 var _cos = Math.cos(_a);
100760 positions[i + 0] = _vertex ? _vertex[0] : _cos * radius;
100761 positions[i + 1] = _vertex ? _vertex[1] : _sin * radius;
100762 positions[i + 2] = height / 2;
100763 normals[i + 2] = 1;
100764 i += 3;
100765 }
100766 var index = 0;
100767 for(var _j2 = 0; _j2 < nradial; _j2++){
100768 indices[index++] = _j2 * 2 + 0;
100769 indices[index++] = _j2 * 2 + 2;
100770 indices[index++] = _j2 * 2 + 0;
100771 indices[index++] = _j2 * 2 + 1;
100772 indices[index++] = _j2 * 2 + 1;
100773 indices[index++] = _j2 * 2 + 3;
100774 }
100775 return {
100776 indices: indices,
100777 attributes: {
100778 POSITION: {
100779 size: 3,
100780 value: positions
100781 },
100782 NORMAL: {
100783 size: 3,
100784 value: normals
100785 }
100786 }

Callers 1

ColumnGeometry1Function · 0.70

Calls 1

assertMethod · 0.45

Tested by

no test coverage detected