three-stdlib
Version:
stand-alone library of threejs examples
1 lines • 8.97 kB
Source Map (JSON)
{"version":3,"file":"ParametricGeometries.cjs","sources":["../../src/geometries/ParametricGeometries.js"],"sourcesContent":["import { Curve, Vector3 } from 'three'\nimport { ParametricGeometry } from './ParametricGeometry'\n\nclass TubeGeometry extends ParametricGeometry {\n constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) {\n const numpoints = segments + 1\n\n const frames = path.computeFrenetFrames(segments, closed),\n tangents = frames.tangents,\n normals = frames.normals,\n binormals = frames.binormals\n\n const position = new Vector3()\n\n function ParametricTube(u, v, target) {\n v *= 2 * Math.PI\n\n const i = Math.floor(u * (numpoints - 1))\n\n path.getPointAt(u, position)\n\n const normal = normals[i]\n const binormal = binormals[i]\n\n const cx = -radius * Math.cos(v) // TODO: Hack: Negating it so it faces outside.\n const cy = radius * Math.sin(v)\n\n position.x += cx * normal.x + cy * binormal.x\n position.y += cx * normal.y + cy * binormal.y\n position.z += cx * normal.z + cy * binormal.z\n\n target.copy(position)\n }\n\n super(ParametricTube, segments, segmentsRadius)\n\n // proxy internals\n\n this.tangents = tangents\n this.normals = normals\n this.binormals = binormals\n\n this.path = path\n this.segments = segments\n this.radius = radius\n this.segmentsRadius = segmentsRadius\n this.closed = closed\n }\n}\n\n/**\n * Experimental primitive geometry creation using Surface Parametric equations\n */\nconst ParametricGeometries = {\n klein: function (v, u, target) {\n u *= Math.PI\n v *= 2 * Math.PI\n\n u = u * 2\n let x, z\n if (u < Math.PI) {\n x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v)\n z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v)\n } else {\n x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI)\n z = -8 * Math.sin(u)\n }\n\n const y = -2 * (1 - Math.cos(u) / 2) * Math.sin(v)\n\n target.set(x, y, z)\n },\n\n plane: function (width, height) {\n return function (u, v, target) {\n const x = u * width\n const y = 0\n const z = v * height\n\n target.set(x, y, z)\n }\n },\n\n mobius: function (u, t, target) {\n // flat mobius strip\n // http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-\n u = u - 0.5\n const v = 2 * Math.PI * t\n\n const a = 2\n\n const x = Math.cos(v) * (a + u * Math.cos(v / 2))\n const y = Math.sin(v) * (a + u * Math.cos(v / 2))\n const z = u * Math.sin(v / 2)\n\n target.set(x, y, z)\n },\n\n mobius3d: function (u, t, target) {\n // volumetric mobius strip\n\n u *= Math.PI\n t *= 2 * Math.PI\n\n u = u * 2\n const phi = u / 2\n const major = 2.25,\n a = 0.125,\n b = 0.65\n\n let x = a * Math.cos(t) * Math.cos(phi) - b * Math.sin(t) * Math.sin(phi)\n const z = a * Math.cos(t) * Math.sin(phi) + b * Math.sin(t) * Math.cos(phi)\n const y = (major + x) * Math.sin(u)\n x = (major + x) * Math.cos(u)\n\n target.set(x, y, z)\n },\n TubeGeometry,\n TorusKnotGeometry: class TorusKnotGeometry extends TubeGeometry {\n constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3) {\n class TorusKnotCurve extends Curve {\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget\n\n t *= Math.PI * 2\n\n const r = 0.5\n\n const x = (1 + r * Math.cos(q * t)) * Math.cos(p * t)\n const y = (1 + r * Math.cos(q * t)) * Math.sin(p * t)\n const z = r * Math.sin(q * t)\n\n return point.set(x, y, z).multiplyScalar(radius)\n }\n }\n\n const segments = segmentsT\n const radiusSegments = segmentsR\n const extrudePath = new TorusKnotCurve()\n\n super(extrudePath, segments, tube, radiusSegments, true, false)\n\n this.radius = radius\n this.tube = tube\n this.segmentsT = segmentsT\n this.segmentsR = segmentsR\n this.p = p\n this.q = q\n }\n },\n SphereGeometry: class SphereGeometry extends ParametricGeometry {\n constructor(size, u, v) {\n function sphere(u, v, target) {\n u *= Math.PI\n v *= 2 * Math.PI\n\n const x = size * Math.sin(u) * Math.cos(v)\n const y = size * Math.sin(u) * Math.sin(v)\n const z = size * Math.cos(u)\n\n target.set(x, y, z)\n }\n\n super(sphere, u, v)\n }\n },\n PlaneGeometry: class PlaneGeometry extends ParametricGeometry {\n constructor(width, depth, segmentsWidth, segmentsDepth) {\n function plane(u, v, target) {\n const x = u * width\n const y = 0\n const z = v * depth\n\n target.set(x, y, z)\n }\n\n super(plane, segmentsWidth, segmentsDepth)\n }\n },\n}\n\nexport { ParametricGeometries }\n"],"names":["ParametricGeometry","Vector3","Curve","u","v"],"mappings":"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"}