@math.gl/geometry 4.2.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE +140 -0
  2. package/README.md +15 -0
  3. package/dist/geometries/box-geometry.d.ts +17 -0
  4. package/dist/geometries/box-geometry.d.ts.map +1 -0
  5. package/dist/geometries/box-geometry.js +60 -0
  6. package/dist/geometries/box-geometry.js.map +1 -0
  7. package/dist/geometries/capsule-geometry.d.ts +15 -0
  8. package/dist/geometries/capsule-geometry.d.ts.map +1 -0
  9. package/dist/geometries/capsule-geometry.js +92 -0
  10. package/dist/geometries/capsule-geometry.js.map +1 -0
  11. package/dist/geometries/cylinder-geometry.d.ts +17 -0
  12. package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
  13. package/dist/geometries/cylinder-geometry.js +27 -0
  14. package/dist/geometries/cylinder-geometry.js.map +1 -0
  15. package/dist/geometries/geometry-helpers.d.ts +16 -0
  16. package/dist/geometries/geometry-helpers.d.ts.map +1 -0
  17. package/dist/geometries/geometry-helpers.js +19 -0
  18. package/dist/geometries/geometry-helpers.js.map +1 -0
  19. package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
  20. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
  21. package/dist/geometries/ico-sphere-geometry.js +87 -0
  22. package/dist/geometries/ico-sphere-geometry.js.map +1 -0
  23. package/dist/geometries/plane-geometry.d.ts +13 -0
  24. package/dist/geometries/plane-geometry.d.ts.map +1 -0
  25. package/dist/geometries/plane-geometry.js +51 -0
  26. package/dist/geometries/plane-geometry.js.map +1 -0
  27. package/dist/geometries/sphere-geometry.d.ts +12 -0
  28. package/dist/geometries/sphere-geometry.d.ts.map +1 -0
  29. package/dist/geometries/sphere-geometry.js +35 -0
  30. package/dist/geometries/sphere-geometry.js.map +1 -0
  31. package/dist/geometries/surface-of-revolution.d.ts +11 -0
  32. package/dist/geometries/surface-of-revolution.d.ts.map +1 -0
  33. package/dist/geometries/surface-of-revolution.js +37 -0
  34. package/dist/geometries/surface-of-revolution.js.map +1 -0
  35. package/dist/geometries/truncated-cone-geometry.d.ts +17 -0
  36. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
  37. package/dist/geometries/truncated-cone-geometry.js +92 -0
  38. package/dist/geometries/truncated-cone-geometry.js.map +1 -0
  39. package/dist/index.cjs +601 -0
  40. package/dist/index.cjs.map +6 -0
  41. package/dist/index.d.ts +18 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +13 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lib/geometry-utils.d.ts +9 -0
  46. package/dist/lib/geometry-utils.d.ts.map +1 -0
  47. package/dist/lib/geometry-utils.js +29 -0
  48. package/dist/lib/geometry-utils.js.map +1 -0
  49. package/dist/lib/geometry.d.ts +36 -0
  50. package/dist/lib/geometry.d.ts.map +1 -0
  51. package/dist/lib/geometry.js +89 -0
  52. package/dist/lib/geometry.js.map +1 -0
  53. package/package.json +40 -0
  54. package/src/geometries/box-geometry.ts +70 -0
  55. package/src/geometries/capsule-geometry.ts +120 -0
  56. package/src/geometries/cylinder-geometry.ts +41 -0
  57. package/src/geometries/geometry-helpers.ts +34 -0
  58. package/src/geometries/ico-sphere-geometry.ts +96 -0
  59. package/src/geometries/plane-geometry.ts +64 -0
  60. package/src/geometries/sphere-geometry.ts +42 -0
  61. package/src/geometries/surface-of-revolution.ts +43 -0
  62. package/src/geometries/truncated-cone-geometry.ts +129 -0
  63. package/src/index.ts +28 -0
  64. package/src/lib/geometry-utils.ts +35 -0
  65. package/src/lib/geometry.ts +140 -0
@@ -0,0 +1,51 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Geometry } from "../lib/geometry.js";
5
+ import { assertPositive, assertSegments, makeIndices } from "./geometry-helpers.js";
6
+ /** Tessellates a finite glTF plane in XZ with its front face and normal pointing +Y. */
7
+ export class PlaneGeometry extends Geometry {
8
+ constructor(props) {
9
+ const { sizeX, sizeZ, nx = 1, nz = 1 } = props;
10
+ assertPositive(sizeX, 'sizeX');
11
+ assertPositive(sizeZ, 'sizeZ');
12
+ assertSegments(nx, 'nx');
13
+ assertSegments(nz, 'nz');
14
+ const positions = [];
15
+ const normals = [];
16
+ const texCoords = [];
17
+ const indexValues = [];
18
+ for (let z = 0; z <= nz; z++) {
19
+ const v = z / nz;
20
+ for (let x = 0; x <= nx; x++) {
21
+ const u = x / nx;
22
+ positions.push((u - 0.5) * sizeX, 0, (0.5 - v) * sizeZ);
23
+ normals.push(0, 1, 0);
24
+ texCoords.push(u, v);
25
+ }
26
+ }
27
+ const stride = nx + 1;
28
+ for (let z = 0; z < nz; z++) {
29
+ for (let x = 0; x < nx; x++) {
30
+ const a = z * stride + x;
31
+ const b = a + 1;
32
+ const c = a + stride;
33
+ const d = c + 1;
34
+ indexValues.push(a, b, d, a, d, c);
35
+ }
36
+ }
37
+ const vertexCount = positions.length / 3;
38
+ super({
39
+ id: props.id,
40
+ topology: 'triangle-list',
41
+ indices: makeIndices(vertexCount, indexValues),
42
+ attributes: {
43
+ POSITION: { size: 3, value: new Float32Array(positions) },
44
+ NORMAL: { size: 3, value: new Float32Array(normals) },
45
+ TEXCOORD_0: { size: 2, value: new Float32Array(texCoords) },
46
+ ...props.attributes
47
+ }
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=plane-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plane-geometry.js","sourceRoot":"","sources":["../../src/geometries/plane-geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Geometry } from "../lib/geometry.js";
2
+ import { type PrimitiveGeometryProps } from "./geometry-helpers.js";
3
+ export type SphereGeometryProps = PrimitiveGeometryProps & {
4
+ radius?: number;
5
+ nlat?: number;
6
+ nlong?: number;
7
+ };
8
+ /** Tessellates the glTF sphere shape. */
9
+ export declare class SphereGeometry extends Geometry {
10
+ constructor(props?: SphereGeometryProps);
11
+ }
12
+ //# sourceMappingURL=sphere-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sphere-geometry.d.ts","sourceRoot":"","sources":["../../src/geometries/sphere-geometry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AACzC,OAAO,EAAiC,KAAK,sBAAsB,EAAC,8BAA2B;AAG/F,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,GAAG;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,yCAAyC;AACzC,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,KAAK,GAAE,mBAAwB;CAyB5C"}
@@ -0,0 +1,35 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Geometry } from "../lib/geometry.js";
5
+ import { assertPositive, assertSegments } from "./geometry-helpers.js";
6
+ import { makeSurfaceOfRevolution } from "./surface-of-revolution.js";
7
+ /** Tessellates the glTF sphere shape. */
8
+ export class SphereGeometry extends Geometry {
9
+ constructor(props = {}) {
10
+ const { radius = 0.5, nlat = 10, nlong = 10 } = props;
11
+ assertPositive(radius, 'radius');
12
+ assertSegments(nlat, 'nlat', 2);
13
+ assertSegments(nlong, 'nlong', 3);
14
+ const rings = [];
15
+ for (let latitude = 0; latitude <= nlat; latitude++) {
16
+ const angle = -Math.PI / 2 + (latitude / nlat) * Math.PI;
17
+ const normalRadius = Math.cos(angle);
18
+ const normalY = Math.sin(angle);
19
+ rings.push({ radius: radius * normalRadius, y: radius * normalY, normalRadius, normalY });
20
+ }
21
+ const mesh = makeSurfaceOfRevolution(rings, nlong);
22
+ super({
23
+ id: props.id,
24
+ topology: 'triangle-list',
25
+ indices: mesh.indexArray,
26
+ attributes: {
27
+ POSITION: { size: 3, value: new Float32Array(mesh.positions) },
28
+ NORMAL: { size: 3, value: new Float32Array(mesh.normals) },
29
+ TEXCOORD_0: { size: 2, value: new Float32Array(mesh.texCoords) },
30
+ ...props.attributes
31
+ }
32
+ });
33
+ }
34
+ }
35
+ //# sourceMappingURL=sphere-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sphere-geometry.js","sourceRoot":"","sources":["../../src/geometries/sphere-geometry.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AACzC,OAAO,EAAC,cAAc,EAAE,cAAc,EAA8B,8BAA2B;AAC/F,OAAO,EAAC,uBAAuB,EAAmB,mCAAgC;AAQlF,yCAAyC;AACzC,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C,YAAY,QAA6B,EAAE;QACzC,MAAM,EAAC,MAAM,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAC,GAAG,KAAK,CAAC;QACpD,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,IAAI,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnD,KAAK,CAAC;YACJ,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC;gBAC5D,MAAM,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC;gBACxD,UAAU,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC;gBAC9D,GAAG,KAAK,CAAC,UAAU;aACpB;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { type MeshData } from "./geometry-helpers.js";
2
+ export type ProfileRing = {
3
+ radius: number;
4
+ y: number;
5
+ normalRadius: number;
6
+ normalY: number;
7
+ };
8
+ export declare function makeSurfaceOfRevolution(rings: ProfileRing[], nradial: number): MeshData & {
9
+ indexArray: Uint16Array | Uint32Array;
10
+ };
11
+ //# sourceMappingURL=surface-of-revolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-of-revolution.d.ts","sourceRoot":"","sources":["../../src/geometries/surface-of-revolution.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,QAAQ,EAAC,8BAA2B;AAE9D,MAAM,MAAM,WAAW,GAAG;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AAE7F,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,MAAM,GACd,QAAQ,GAAG;IAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAA;CAAC,CA+BpD"}
@@ -0,0 +1,37 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { makeIndices } from "./geometry-helpers.js";
5
+ export function makeSurfaceOfRevolution(rings, nradial) {
6
+ const positions = [];
7
+ const normals = [];
8
+ const texCoords = [];
9
+ const indices = [];
10
+ const stride = nradial + 1;
11
+ for (let ringIndex = 0; ringIndex < rings.length; ringIndex++) {
12
+ const ring = rings[ringIndex];
13
+ for (let radial = 0; radial <= nradial; radial++) {
14
+ const u = radial / nradial;
15
+ const angle = u * Math.PI * 2;
16
+ const sin = Math.sin(angle);
17
+ const cos = Math.cos(angle);
18
+ positions.push(sin * ring.radius, ring.y, cos * ring.radius);
19
+ normals.push(sin * ring.normalRadius, ring.normalY, cos * ring.normalRadius);
20
+ texCoords.push(u, ringIndex / (rings.length - 1));
21
+ }
22
+ }
23
+ for (let ring = 0; ring < rings.length - 1; ring++) {
24
+ for (let radial = 0; radial < nradial; radial++) {
25
+ const a = ring * stride + radial;
26
+ const b = a + 1;
27
+ const c = a + stride;
28
+ const d = c + 1;
29
+ indices.push(a, b, d, a, d, c);
30
+ }
31
+ }
32
+ return {
33
+ ...{ positions, normals, texCoords, indices },
34
+ indexArray: makeIndices(positions.length / 3, indices)
35
+ };
36
+ }
37
+ //# sourceMappingURL=surface-of-revolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-of-revolution.js","sourceRoot":"","sources":["../../src/geometries/surface-of-revolution.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,WAAW,EAAgB,8BAA2B;AAI9D,MAAM,UAAU,uBAAuB,CACrC,KAAoB,EACpB,OAAe;IAEf,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7E,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACnD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO;QACL,GAAG,EAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAC;QAC3C,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC;KACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Geometry } from "../lib/geometry.js";
2
+ import { type PrimitiveGeometryProps } from "./geometry-helpers.js";
3
+ export type TruncatedConeGeometryProps = PrimitiveGeometryProps & {
4
+ topRadius?: number;
5
+ bottomRadius?: number;
6
+ topCap?: boolean;
7
+ bottomCap?: boolean;
8
+ height?: number;
9
+ nradial?: number;
10
+ nvertical?: number;
11
+ verticalAxis?: 'x' | 'y' | 'z';
12
+ };
13
+ /** General truncated cone primitive, adapted from luma.gl's CPU tessellator. */
14
+ export declare class TruncatedConeGeometry extends Geometry {
15
+ constructor(props?: TruncatedConeGeometryProps);
16
+ }
17
+ //# sourceMappingURL=truncated-cone-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncated-cone-geometry.d.ts","sourceRoot":"","sources":["../../src/geometries/truncated-cone-geometry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AACzC,OAAO,EAKL,KAAK,sBAAsB,EAC5B,8BAA2B;AAE5B,MAAM,MAAM,0BAA0B,GAAG,sBAAsB,GAAG;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC,CAAC;AAEF,gFAAgF;AAChF,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,KAAK,GAAE,0BAA+B;CA2FnD"}
@@ -0,0 +1,92 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Geometry } from "../lib/geometry.js";
5
+ import { assertNonNegative, assertPositive, assertSegments, makeIndices } from "./geometry-helpers.js";
6
+ /** General truncated cone primitive, adapted from luma.gl's CPU tessellator. */
7
+ export class TruncatedConeGeometry extends Geometry {
8
+ constructor(props = {}) {
9
+ const { topRadius = 0, bottomRadius = 0, topCap = false, bottomCap = false, height = 1, nradial = 10, nvertical = 1, verticalAxis = 'y' } = props;
10
+ assertNonNegative(topRadius, 'topRadius');
11
+ assertNonNegative(bottomRadius, 'bottomRadius');
12
+ if (topRadius === 0 && bottomRadius === 0)
13
+ throw new Error('At least one radius must be greater than zero');
14
+ assertPositive(height, 'height');
15
+ assertSegments(nradial, 'nradial', 3);
16
+ assertSegments(nvertical, 'nvertical');
17
+ const positions = [];
18
+ const normals = [];
19
+ const texCoords = [];
20
+ const indices = [];
21
+ const stride = nradial + 1;
22
+ const slope = (bottomRadius - topRadius) / height;
23
+ const normalScale = 1 / Math.hypot(1, slope);
24
+ const addRing = (radius, y, normalRadius, normalY, v) => {
25
+ const ring = positions.length / 3 / stride;
26
+ for (let radial = 0; radial <= nradial; radial++) {
27
+ const u = radial / nradial;
28
+ const angle = u * Math.PI * 2;
29
+ const sin = Math.sin(angle);
30
+ const cos = Math.cos(angle);
31
+ const point = orient([sin * radius, y, cos * radius], verticalAxis);
32
+ const normal = orient([sin * normalRadius, normalY, cos * normalRadius], verticalAxis);
33
+ positions.push(...point);
34
+ normals.push(...normal);
35
+ texCoords.push(u, v);
36
+ }
37
+ return ring;
38
+ };
39
+ const connect = (lower, upper) => {
40
+ for (let radial = 0; radial < nradial; radial++) {
41
+ const a = lower * stride + radial;
42
+ const b = a + 1;
43
+ const c = upper * stride + radial;
44
+ const d = c + 1;
45
+ indices.push(a, b, d, a, d, c);
46
+ }
47
+ };
48
+ let previous;
49
+ if (bottomCap) {
50
+ const center = addRing(0, -height / 2, 0, -1, 0);
51
+ const edge = addRing(bottomRadius, -height / 2, 0, -1, 1);
52
+ connect(center, edge);
53
+ previous = addRing(bottomRadius, -height / 2, normalScale, slope * normalScale, 0);
54
+ }
55
+ for (let vertical = 0; vertical <= nvertical; vertical++) {
56
+ const v = vertical / nvertical;
57
+ const radius = bottomRadius + (topRadius - bottomRadius) * v;
58
+ const ring = addRing(radius, (v - 0.5) * height, normalScale, slope * normalScale, v);
59
+ if (previous !== undefined && !(bottomCap && vertical === 0))
60
+ connect(previous, ring);
61
+ previous = ring;
62
+ }
63
+ if (topCap && previous !== undefined) {
64
+ const edge = addRing(topRadius, height / 2, 0, 1, 1);
65
+ const center = addRing(0, height / 2, 0, 1, 0);
66
+ connect(edge, center);
67
+ }
68
+ const vertexCount = positions.length / 3;
69
+ super({
70
+ id: props.id,
71
+ topology: 'triangle-list',
72
+ indices: makeIndices(vertexCount, indices),
73
+ attributes: {
74
+ POSITION: { size: 3, value: new Float32Array(positions) },
75
+ NORMAL: { size: 3, value: new Float32Array(normals) },
76
+ TEXCOORD_0: { size: 2, value: new Float32Array(texCoords) },
77
+ ...props.attributes
78
+ }
79
+ });
80
+ }
81
+ }
82
+ function orient(vector, axis) {
83
+ switch (axis) {
84
+ case 'x':
85
+ return [vector[1], vector[2], vector[0]];
86
+ case 'z':
87
+ return [vector[2], vector[0], vector[1]];
88
+ default:
89
+ return [vector[0], vector[1], vector[2]];
90
+ }
91
+ }
92
+ //# sourceMappingURL=truncated-cone-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncated-cone-geometry.js","sourceRoot":"","sources":["../../src/geometries/truncated-cone-geometry.ts"],"names":[],"mappings":"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"}