Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three-stdlib /geometries /ParametricGeometry.cjs
| ; | |
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | |
| const THREE = require("three"); | |
| class ParametricGeometry extends THREE.BufferGeometry { | |
| constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) { | |
| super(); | |
| this.type = "ParametricGeometry"; | |
| this.parameters = { | |
| func, | |
| slices, | |
| stacks | |
| }; | |
| const indices = []; | |
| const vertices = []; | |
| const normals = []; | |
| const uvs = []; | |
| const EPS = 1e-5; | |
| const normal = new THREE.Vector3(); | |
| const p0 = new THREE.Vector3(), p1 = new THREE.Vector3(); | |
| const pu = new THREE.Vector3(), pv = new THREE.Vector3(); | |
| const sliceCount = slices + 1; | |
| for (let i = 0; i <= stacks; i++) { | |
| const v = i / stacks; | |
| for (let j = 0; j <= slices; j++) { | |
| const u = j / slices; | |
| func(u, v, p0); | |
| vertices.push(p0.x, p0.y, p0.z); | |
| if (u - EPS >= 0) { | |
| func(u - EPS, v, p1); | |
| pu.subVectors(p0, p1); | |
| } else { | |
| func(u + EPS, v, p1); | |
| pu.subVectors(p1, p0); | |
| } | |
| if (v - EPS >= 0) { | |
| func(u, v - EPS, p1); | |
| pv.subVectors(p0, p1); | |
| } else { | |
| func(u, v + EPS, p1); | |
| pv.subVectors(p1, p0); | |
| } | |
| normal.crossVectors(pu, pv).normalize(); | |
| normals.push(normal.x, normal.y, normal.z); | |
| uvs.push(u, v); | |
| } | |
| } | |
| for (let i = 0; i < stacks; i++) { | |
| for (let j = 0; j < slices; j++) { | |
| const a = i * sliceCount + j; | |
| const b = i * sliceCount + j + 1; | |
| const c = (i + 1) * sliceCount + j + 1; | |
| const d = (i + 1) * sliceCount + j; | |
| indices.push(a, b, d); | |
| indices.push(b, c, d); | |
| } | |
| } | |
| this.setIndex(indices); | |
| this.setAttribute("position", new THREE.Float32BufferAttribute(vertices, 3)); | |
| this.setAttribute("normal", new THREE.Float32BufferAttribute(normals, 3)); | |
| this.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2)); | |
| } | |
| } | |
| exports.ParametricGeometry = ParametricGeometry; | |
| //# sourceMappingURL=ParametricGeometry.cjs.map | |
Xet Storage Details
- Size:
- 2.13 kB
- Xet hash:
- 323291c57aae684394a65fb24bf1d0cca5a90a4f09bdd41c9e2b505f6439017d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.