@flighthq/mesh 0.3.1-next.625.675880d → 0.3.1-next.704.69286f6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"meshGeometryCompute.d.ts","sourceRoot":"","sources":["../src/meshGeometryCompute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAetH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAoDjH;AAKD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CA+B/F;AASD,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CA2DxG;AAUD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,cAAc,GAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,IAAW,GAC/D,IAAI,CAoDN;AAKD,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAkC5G;AAgCD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,cAAc,GAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,IAAW,GAC/D,IAAI,CAoLN;AAsHD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAQtF;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAStE"}
1
+ {"version":3,"file":"meshGeometryCompute.d.ts","sourceRoot":"","sources":["../src/meshGeometryCompute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAoDjH;AAKD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CA+B/F;AASD,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CA+DxG;AAUD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,cAAc,GAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,IAAW,GAC/D,IAAI,CAsDN;AAKD,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAkC5G;AAgCD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,cAAc,GAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,IAAW,GAC/D,IAAI,CAgNN;AAsHD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAQtF;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAStE"}
@@ -1,5 +1,6 @@
1
1
  import { createAabb } from '@flighthq/geometry/contract';
2
2
  import { EntityRuntimeKey } from '@flighthq/types/contract';
3
+ import { getMeshGeometryTriangleCount, getMeshGeometryTriangleVertexIndices } from './meshGeometryOperations';
3
4
  // Per-vertex compute over the canonical interleaved PBR record: position(3) + normal(3) +
4
5
  // tangent(4) + uv0(2) = 12 floats / 48 bytes, stride read from geometry.layout. These functions
5
6
  // derive normals, tangents, and the local-space AABB from `geometry.vertices` (+ `geometry.indices`)
@@ -102,13 +103,17 @@ export function computeMeshGeometryBounds(out, geometry) {
102
103
  export function computeMeshGeometryFlatNormals(out, geometry) {
103
104
  const srcVerts = geometry.vertices;
104
105
  const floatsPerVertex = geometry.layout.stride / 4;
105
- const indices = geometry.indices;
106
- const indexCount = indices ? indices.length : floatsPerVertex > 0 ? Math.floor(srcVerts.length / floatsPerVertex) : 0;
107
106
  const dstVerts = out.vertices;
108
- for (let t = 0; t + 2 < indexCount; t += 3) {
109
- const i0 = indices ? indices[t] : t;
110
- const i1 = indices ? indices[t + 1] : t + 1;
111
- const i2 = indices ? indices[t + 2] : t + 2;
107
+ // Decode through the shared triangle walker so triangle-strip topology is honoured; hand-decoding
108
+ // index triples silently drops every strip triangle after the first.
109
+ const triangleCount = getMeshGeometryTriangleCount(geometry);
110
+ const corner = { i0: 0, i1: 0, i2: 0 };
111
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
112
+ if (!getMeshGeometryTriangleVertexIndices(corner, geometry, triangle))
113
+ continue;
114
+ const i0 = corner.i0;
115
+ const i1 = corner.i1;
116
+ const i2 = corner.i2;
112
117
  const p0 = i0 * floatsPerVertex + POSITION_OFFSET;
113
118
  const p1 = i1 * floatsPerVertex + POSITION_OFFSET;
114
119
  const p2 = i2 * floatsPerVertex + POSITION_OFFSET;
@@ -155,13 +160,16 @@ export function computeMeshGeometryNormals(out, geometry, positionGroups = null)
155
160
  const vertices = geometry.vertices;
156
161
  const floatsPerVertex = geometry.layout.stride / 4;
157
162
  const vertexCount = floatsPerVertex > 0 ? Math.floor(vertices.length / floatsPerVertex) : 0;
158
- const indices = geometry.indices;
159
- const indexCount = indices ? indices.length : vertexCount;
160
163
  const accum = new Float64Array(vertexCount * 3);
161
- for (let t = 0; t + 2 < indexCount; t += 3) {
162
- const i0 = indices ? indices[t] : t;
163
- const i1 = indices ? indices[t + 1] : t + 1;
164
- const i2 = indices ? indices[t + 2] : t + 2;
164
+ // Same shared walker as the flat pass, for the same reason.
165
+ const triangleCount = getMeshGeometryTriangleCount(geometry);
166
+ const corner = { i0: 0, i1: 0, i2: 0 };
167
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
168
+ if (!getMeshGeometryTriangleVertexIndices(corner, geometry, triangle))
169
+ continue;
170
+ const i0 = corner.i0;
171
+ const i1 = corner.i1;
172
+ const i2 = corner.i2;
165
173
  const b0 = i0 * floatsPerVertex + POSITION_OFFSET;
166
174
  const b1 = i1 * floatsPerVertex + POSITION_OFFSET;
167
175
  const b2 = i2 * floatsPerVertex + POSITION_OFFSET;
@@ -269,16 +277,31 @@ export function computeMeshGeometryTangents(out, geometry, positionGroups = null
269
277
  // also needs the signs so each already-distinct corner can read the canonical group frame in its
270
278
  // own orientation. Store one byte per triangle and one per source vertex, not per corner. A state's
271
279
  // sign records the first orientation and magnitude 2 records that both occurred.
280
+ // Walk logical triangles through the shared decoder so triangle-strip topology is honoured, and
281
+ // resolve every corner UP FRONT: the mirrored-UV split below replaces `out.indices`, and with
282
+ // `out === geometry` that would change what the decoder reads part way through the pass.
283
+ const triangleCount = getMeshGeometryTriangleCount(geometry);
284
+ const cornerIndices = new Uint32Array(triangleCount * 3);
285
+ {
286
+ const corner = { i0: 0, i1: 0, i2: 0 };
287
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
288
+ if (!getMeshGeometryTriangleVertexIndices(corner, geometry, triangle))
289
+ continue;
290
+ cornerIndices[triangle * 3] = corner.i0;
291
+ cornerIndices[triangle * 3 + 1] = corner.i1;
292
+ cornerIndices[triangle * 3 + 2] = corner.i2;
293
+ }
294
+ }
272
295
  let triangleSigns = null;
273
296
  let orientationStates = null;
274
297
  let splitCount = 0;
275
298
  if (sourceIndices !== null || positionGroups !== null) {
276
- triangleSigns = new Int8Array(Math.floor(elementCount / 3));
299
+ triangleSigns = new Int8Array(triangleCount);
277
300
  orientationStates = new Int8Array(sourceVertexCount);
278
- for (let t = 0; t + 2 < elementCount; t += 3) {
279
- const i0 = sourceIndices ? sourceIndices[t] : t;
280
- const i1 = sourceIndices ? sourceIndices[t + 1] : t + 1;
281
- const i2 = sourceIndices ? sourceIndices[t + 2] : t + 2;
301
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
302
+ const i0 = cornerIndices[triangle * 3];
303
+ const i1 = cornerIndices[triangle * 3 + 1];
304
+ const i2 = cornerIndices[triangle * 3 + 2];
282
305
  const u0 = i0 * sourceFloatsPerVertex + UV0_OFFSET;
283
306
  const u1 = i1 * sourceFloatsPerVertex + UV0_OFFSET;
284
307
  const u2 = i2 * sourceFloatsPerVertex + UV0_OFFSET;
@@ -288,7 +311,7 @@ export function computeMeshGeometryTangents(out, geometry, positionGroups = null
288
311
  const dv2 = sourceVertices[u2 + 1] - sourceVertices[u0 + 1];
289
312
  const determinant = du1 * dv2 - du2 * dv1;
290
313
  const sign = determinant < 0 ? -1 : determinant > 0 ? 1 : 0;
291
- triangleSigns[t / 3] = sign;
314
+ triangleSigns[triangle] = sign;
292
315
  if (sign !== 0) {
293
316
  markTangentOrientation(orientationStates, i0, sign);
294
317
  markTangentOrientation(orientationStates, i1, sign);
@@ -306,7 +329,16 @@ export function computeMeshGeometryTangents(out, geometry, positionGroups = null
306
329
  let targetVertices = out.vertices;
307
330
  let remappedIndices = null;
308
331
  const outputVertexCount = sourceVertexCount + splitCount;
309
- if (splitCount > 0 && sourceIndices !== null && triangleSigns !== null && orientationStates !== null) {
332
+ // The mirrored-UV split remaps INDEX ELEMENTS, which is only well defined for a triangle list,
333
+ // where each element belongs to exactly one triangle. A strip element is shared by up to three
334
+ // triangles that may not agree on orientation, so there is no single vertex to remap it to;
335
+ // splitting a strip would mean converting it to a list, which would change the output topology.
336
+ const canSplitMirroredUVs = geometry.topology === 'triangle-list';
337
+ if (canSplitMirroredUVs &&
338
+ splitCount > 0 &&
339
+ sourceIndices !== null &&
340
+ triangleSigns !== null &&
341
+ orientationStates !== null) {
310
342
  const splitVertices = new Uint32Array(sourceVertexCount);
311
343
  splitVertices.fill(UINT32_UNMAPPED);
312
344
  const expanded = new Float32Array(outputVertexCount * targetFloatsPerVertex);
@@ -334,13 +366,15 @@ export function computeMeshGeometryTangents(out, geometry, positionGroups = null
334
366
  }
335
367
  const tan = new Float64Array(outputVertexCount * 3);
336
368
  const bitan = new Float64Array(outputVertexCount * 3);
337
- for (let t = 0; t + 2 < elementCount; t += 3) {
338
- const i0 = sourceIndices ? sourceIndices[t] : t;
339
- const i1 = sourceIndices ? sourceIndices[t + 1] : t + 1;
340
- const i2 = sourceIndices ? sourceIndices[t + 2] : t + 2;
341
- const o0 = remappedIndices ? remappedIndices[t] : i0;
342
- const o1 = remappedIndices ? remappedIndices[t + 1] : i1;
343
- const o2 = remappedIndices ? remappedIndices[t + 2] : i2;
369
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
370
+ const i0 = cornerIndices[triangle * 3];
371
+ const i1 = cornerIndices[triangle * 3 + 1];
372
+ const i2 = cornerIndices[triangle * 3 + 2];
373
+ // `remappedIndices` is only built for a triangle list, where element == triangle * 3 + corner.
374
+ const element = triangle * 3;
375
+ const o0 = remappedIndices ? remappedIndices[element] : i0;
376
+ const o1 = remappedIndices ? remappedIndices[element + 1] : i1;
377
+ const o2 = remappedIndices ? remappedIndices[element + 2] : i2;
344
378
  const p0 = i0 * sourceFloatsPerVertex + POSITION_OFFSET;
345
379
  const p1 = i1 * sourceFloatsPerVertex + POSITION_OFFSET;
346
380
  const p2 = i2 * sourceFloatsPerVertex + POSITION_OFFSET;
@@ -1 +1 @@
1
- {"version":3,"file":"meshGeometryCompute.js","sourceRoot":"","sources":["../src/meshGeometryCompute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meshGeometryCompute.js","sourceRoot":"","sources":["../src/meshGeometryCompute.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/mesh",
3
- "version": "0.3.1-next.625.675880d",
3
+ "version": "0.3.1-next.704.69286f6",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,9 +38,9 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/entity": "0.3.1-next.625.675880d",
42
- "@flighthq/geometry": "0.3.1-next.625.675880d",
43
- "@flighthq/types": "0.3.1-next.625.675880d"
41
+ "@flighthq/entity": "0.3.1-next.704.69286f6",
42
+ "@flighthq/geometry": "0.3.1-next.704.69286f6",
43
+ "@flighthq/types": "0.3.1-next.704.69286f6"
44
44
  },
45
45
  "devDependencies": {
46
46
  "typescript": "^5.3.0"
@@ -1,5 +1,5 @@
1
1
  import { createAabb, createBoundingSphere } from '@flighthq/geometry/contract';
2
- import type { VertexAttributeLayout } from '@flighthq/types/contract';
2
+ import type { MeshGeometry, VertexAttributeLayout } from '@flighthq/types/contract';
3
3
 
4
4
  import { createMeshGeometry, invalidateMeshGeometry } from './meshGeometry';
5
5
  import {
@@ -426,6 +426,34 @@ describe('computeMeshGeometryTangents', () => {
426
426
  });
427
427
  });
428
428
 
429
+ describe('ensureMeshGeometryBounds', () => {
430
+ it('computes on first query, then reuses the cache until the version moves', () => {
431
+ const geometry = makeTriangle();
432
+ expect(geometry.bounds).toBeNull();
433
+
434
+ const bounds = ensureMeshGeometryBounds(geometry);
435
+ expect(bounds?.max.x).toBe(1);
436
+
437
+ // A vertex edit WITHOUT a version bump must not be picked up — the version is the dirty signal,
438
+ // and honouring the cache is what makes the steady-state query an integer compare.
439
+ geometry.vertices[12] = 4;
440
+ expect(ensureMeshGeometryBounds(geometry)?.max.x).toBe(1);
441
+
442
+ // The public direct-write escape hatch marks the cache stale.
443
+ invalidateMeshGeometry(geometry);
444
+ expect(ensureMeshGeometryBounds(geometry)?.max.x).toBe(4);
445
+ });
446
+
447
+ it('trusts bounds supplied at construction without re-sweeping them', () => {
448
+ const geometry = makeTriangle();
449
+ refreshMeshGeometryBounds(geometry);
450
+ const bounds = geometry.bounds;
451
+
452
+ // Same AABB instance back, no recompute: the cache is valid for the current version.
453
+ expect(ensureMeshGeometryBounds(geometry)).toBe(bounds);
454
+ });
455
+ });
456
+
429
457
  function setCanonicalVertex(vertices: Float32Array, vertex: number, x: number, y: number, u: number, v: number): void {
430
458
  const base = vertex * 12;
431
459
  vertices[base] = x;
@@ -459,34 +487,6 @@ function setSkinnedVertex(
459
487
  vertices[base + 19] = 0.4;
460
488
  }
461
489
 
462
- describe('ensureMeshGeometryBounds', () => {
463
- it('computes on first query, then reuses the cache until the version moves', () => {
464
- const geometry = makeTriangle();
465
- expect(geometry.bounds).toBeNull();
466
-
467
- const bounds = ensureMeshGeometryBounds(geometry);
468
- expect(bounds?.max.x).toBe(1);
469
-
470
- // A vertex edit WITHOUT a version bump must not be picked up — the version is the dirty signal,
471
- // and honouring the cache is what makes the steady-state query an integer compare.
472
- geometry.vertices[12] = 4;
473
- expect(ensureMeshGeometryBounds(geometry)?.max.x).toBe(1);
474
-
475
- // The public direct-write escape hatch marks the cache stale.
476
- invalidateMeshGeometry(geometry);
477
- expect(ensureMeshGeometryBounds(geometry)?.max.x).toBe(4);
478
- });
479
-
480
- it('trusts bounds supplied at construction without re-sweeping them', () => {
481
- const geometry = makeTriangle();
482
- refreshMeshGeometryBounds(geometry);
483
- const bounds = geometry.bounds;
484
-
485
- // Same AABB instance back, no recompute: the cache is valid for the current version.
486
- expect(ensureMeshGeometryBounds(geometry)).toBe(bounds);
487
- });
488
- });
489
-
490
490
  describe('refreshMeshGeometryBounds', () => {
491
491
  it('allocates once, then refreshes the same cached bounds after vertex edits', () => {
492
492
  const geometry = makeTriangle();
@@ -501,3 +501,92 @@ describe('refreshMeshGeometryBounds', () => {
501
501
  expect(bounds?.max.x).toBe(4);
502
502
  });
503
503
  });
504
+
505
+ describe('triangle-strip topology', () => {
506
+ // A four-vertex strip [0, 1, 2, 3] is two triangles; the same surface as a list is
507
+ // [0, 1, 2, 2, 1, 3], including the winding flip the odd strip triangle carries. Every compute
508
+ // pass must produce the same attributes from either spelling.
509
+ //
510
+ // The fixture is deliberately IRREGULAR — the fourth corner is lifted out of the plane and its
511
+ // UV is skewed. A flat quad with axis-aligned UVs makes both triangles agree by accident: every
512
+ // tangent comes out (1, 0, 0, 1) whichever topology is used, so the tangent pass looks correct
513
+ // while ignoring topology entirely. The irregular corner is what makes the two disagree when the
514
+ // second triangle is dropped.
515
+ function createStripQuad(topology: 'triangle-list' | 'triangle-strip'): MeshGeometry {
516
+ const vertices = new Float32Array(4 * 12);
517
+ setCanonicalVertex(vertices, 0, 0, 0, 0, 0);
518
+ setCanonicalVertex(vertices, 1, 1, 0, 1, 0);
519
+ setCanonicalVertex(vertices, 2, 0, 1, 0, 1);
520
+ setCanonicalVertex(vertices, 3, 1, 1, 0.3, 0.9);
521
+ vertices[3 * 12 + 2] = 1; // lift the fourth corner out of the plane
522
+ const indices = topology === 'triangle-strip' ? [0, 1, 2, 3] : [0, 1, 2, 2, 1, 3];
523
+ return createMeshGeometry({
524
+ indices: new Uint16Array(indices),
525
+ layout: CANONICAL_LAYOUT,
526
+ topology,
527
+ vertices,
528
+ });
529
+ }
530
+
531
+ function expectStripMatchesList(
532
+ compute: (out: MeshGeometry, geometry: Readonly<MeshGeometry>) => void,
533
+ offset: number,
534
+ componentCount: number,
535
+ ): void {
536
+ const strip = createStripQuad('triangle-strip');
537
+ const list = createStripQuad('triangle-list');
538
+ compute(strip, strip);
539
+ compute(list, list);
540
+ for (let vertex = 0; vertex < 4; vertex++) {
541
+ for (let component = 0; component < componentCount; component++) {
542
+ expect(strip.vertices[vertex * 12 + offset + component]).toBeCloseTo(
543
+ list.vertices[vertex * 12 + offset + component],
544
+ 5,
545
+ );
546
+ }
547
+ }
548
+ }
549
+
550
+ it('computeMeshGeometryNormals reads a strip as two triangles, not one', () => {
551
+ // Dropping the second triangle leaves vertex 3 at exactly (0, 0, 0) and vertices 1 and 2
552
+ // carrying only the first triangle's contribution — three of the four wrong, not just the one
553
+ // no earlier triangle referenced.
554
+ expectStripMatchesList(computeMeshGeometryNormals, 3, 3);
555
+ });
556
+
557
+ it('computeMeshGeometryFlatNormals reads a strip as two triangles, not one', () => {
558
+ expectStripMatchesList(computeMeshGeometryFlatNormals, 3, 3);
559
+ });
560
+
561
+ it('computeMeshGeometryTangents reads a strip as two triangles, not one', () => {
562
+ // A vertex that accumulates nothing falls back to a unit perpendicular, so the dropped
563
+ // triangle shows up here as a plausible-looking tangent rather than a zero — harder to spot by
564
+ // eye than the zero normal, which is why it is asserted against the list rather than a literal.
565
+ const strip = createStripQuad('triangle-strip');
566
+ const list = createStripQuad('triangle-list');
567
+ computeMeshGeometryNormals(strip, strip);
568
+ computeMeshGeometryNormals(list, list);
569
+ computeMeshGeometryTangents(strip, strip);
570
+ computeMeshGeometryTangents(list, list);
571
+ for (let vertex = 0; vertex < 4; vertex++) {
572
+ for (let component = 0; component < 4; component++) {
573
+ expect(strip.vertices[vertex * 12 + 6 + component]).toBeCloseTo(list.vertices[vertex * 12 + 6 + component], 5);
574
+ }
575
+ }
576
+ });
577
+
578
+ it('leaves no vertex of a strip without a normal', () => {
579
+ // The symptom that reaches a renderer: an unreferenced vertex keeps the zero normal it was
580
+ // allocated with, and lights as a black seam.
581
+ const strip = createStripQuad('triangle-strip');
582
+ computeMeshGeometryNormals(strip, strip);
583
+ for (let vertex = 0; vertex < 4; vertex++) {
584
+ const length = Math.hypot(
585
+ strip.vertices[vertex * 12 + 3],
586
+ strip.vertices[vertex * 12 + 4],
587
+ strip.vertices[vertex * 12 + 5],
588
+ );
589
+ expect(length).toBeCloseTo(1, 5);
590
+ }
591
+ });
592
+ });