@vib3code/sdk 2.0.3-canary.45332e3 → 2.0.3-canary.4e0dace
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.
- package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +2 -0
- package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
- package/DOCS/ARCHITECTURE.md +1 -0
- package/DOCS/CI_TESTING.md +2 -0
- package/DOCS/CLI_ONBOARDING.md +2 -0
- package/DOCS/CONTROL_REFERENCE.md +2 -0
- package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +2 -0
- package/DOCS/ENV_SETUP.md +2 -0
- package/DOCS/EPIC_SCROLL_EVENTS.md +2 -0
- package/DOCS/EXPANSION_DESIGN.md +979 -0
- package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
- package/DOCS/EXPORT_FORMATS.md +2 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
- package/DOCS/HANDOFF_LANDING_PAGE.md +2 -0
- package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +2 -0
- package/DOCS/LICENSING_TIERS.md +2 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +2 -0
- package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +3 -1
- package/DOCS/OBS_SETUP_GUIDE.md +2 -0
- package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
- package/DOCS/PRODUCT_STRATEGY.md +2 -0
- package/DOCS/PROJECT_SETUP.md +2 -0
- package/DOCS/README.md +5 -3
- package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +2 -0
- package/DOCS/RENDERER_LIFECYCLE.md +2 -0
- package/DOCS/REPO_MANIFEST.md +2 -0
- package/DOCS/ROADMAP.md +2 -0
- package/DOCS/SCROLL_TIMELINE_v3.md +2 -0
- package/DOCS/SITE_REFACTOR_PLAN.md +2 -0
- package/DOCS/STATUS.md +2 -0
- package/DOCS/SYSTEM_INVENTORY.md +2 -0
- package/DOCS/TELEMETRY_EXPORTS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_FACETAD.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_SIMONE.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +2 -0
- package/DOCS/WEBGPU_STATUS.md +2 -0
- package/DOCS/XR_BENCHMARKS.md +2 -0
- package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -34
- package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -80
- package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -42
- package/DOCS/archive/SESSION_014_PLAN.md +1 -195
- package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -56
- package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -72
- package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -741
- package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -38
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-01-31.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +2 -0
- package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
- package/DOCS/dev-tracks/README.md +2 -0
- package/package.json +2 -4
- package/src/cli/index.js +59 -5
- package/src/experimental/GameLoop.js +72 -0
- package/src/experimental/LatticePhysics.js +100 -0
- package/src/experimental/LiveDirector.js +143 -0
- package/src/experimental/PlayerController4D.js +154 -0
- package/src/experimental/VIB3Actor.js +138 -0
- package/src/experimental/VIB3Compositor.js +117 -0
- package/src/experimental/VIB3Link.js +122 -0
- package/src/experimental/VIB3Orchestrator.js +146 -0
- package/src/experimental/VIB3Universe.js +109 -0
- package/src/experimental/demos/CrystalLabyrinth.js +202 -0
- package/src/geometry/generators/Crystal.js +2 -2
- package/src/geometry/warp/HypersphereCore.js +53 -24
- package/src/math/Mat4x4.js +238 -92
- package/src/math/Projection.js +39 -4
- package/src/math/Rotor4D.js +69 -46
- package/src/math/Vec4.js +200 -103
- package/src/scene/Node4D.js +74 -24
- package/src/testing/ProjectionClass.test.js +38 -0
- package/tools/update_projection.py +109 -0
package/src/math/Projection.js
CHANGED
|
@@ -36,16 +36,28 @@ export class Projection {
|
|
|
36
36
|
*
|
|
37
37
|
* @param {Vec4} v - 4D point
|
|
38
38
|
* @param {number} d - Distance parameter (typically 1.5-5)
|
|
39
|
+
* @param {object} [options] - Projection options
|
|
40
|
+
* @param {Vec4} [target] - Optional target vector to write result to
|
|
39
41
|
* @returns {Vec4} Projected point (w=0)
|
|
40
42
|
*/
|
|
41
|
-
static perspective(v, d = 2, options = {}) {
|
|
43
|
+
static perspective(v, d = 2, options = {}, target = null) {
|
|
42
44
|
if (typeof d === 'object') {
|
|
43
45
|
options = d;
|
|
44
46
|
d = options.d ?? 2;
|
|
45
47
|
}
|
|
46
|
-
|
|
48
|
+
|
|
49
|
+
// Handle options overload or direct target argument
|
|
50
|
+
if (!target && options && options.target) {
|
|
51
|
+
target = options.target;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const epsilon = (options && options.epsilon) ?? DEFAULT_EPSILON;
|
|
47
55
|
const denom = clampDenominator(d - v.w, epsilon);
|
|
48
56
|
const scale = 1 / denom;
|
|
57
|
+
|
|
58
|
+
if (target) {
|
|
59
|
+
return target.set(v.x * scale, v.y * scale, v.z * scale, 0);
|
|
60
|
+
}
|
|
49
61
|
return new Vec4(v.x * scale, v.y * scale, v.z * scale, 0);
|
|
50
62
|
}
|
|
51
63
|
|
|
@@ -126,10 +138,33 @@ export class Projection {
|
|
|
126
138
|
* Project array of Vec4s using perspective projection
|
|
127
139
|
* @param {Vec4[]} vectors
|
|
128
140
|
* @param {number} d
|
|
141
|
+
* @param {object} [options]
|
|
142
|
+
* @param {Vec4[]} [target] - Optional target array to write results to
|
|
129
143
|
* @returns {Vec4[]}
|
|
130
144
|
*/
|
|
131
|
-
static perspectiveArray(vectors, d = 2, options = {}) {
|
|
132
|
-
|
|
145
|
+
static perspectiveArray(vectors, d = 2, options = {}, target = null) {
|
|
146
|
+
// Handle options overload for 'd'
|
|
147
|
+
if (typeof d === 'object') {
|
|
148
|
+
options = d;
|
|
149
|
+
d = options.d ?? 2;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!target) {
|
|
153
|
+
return vectors.map(v => Projection.perspective(v, d, options));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const count = vectors.length;
|
|
157
|
+
// Iterate and reuse
|
|
158
|
+
for (let i = 0; i < count; i++) {
|
|
159
|
+
const out = target[i];
|
|
160
|
+
if (out) {
|
|
161
|
+
Projection.perspective(vectors[i], d, options, out);
|
|
162
|
+
} else {
|
|
163
|
+
target[i] = Projection.perspective(vectors[i], d, options);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return target;
|
|
133
168
|
}
|
|
134
169
|
|
|
135
170
|
/**
|
package/src/math/Rotor4D.js
CHANGED
|
@@ -323,14 +323,17 @@ export class Rotor4D {
|
|
|
323
323
|
/**
|
|
324
324
|
* Rotate a 4D vector using sandwich product: v' = R v R†
|
|
325
325
|
*
|
|
326
|
+
* Matrix math is inlined to avoid allocating a temporary Float32Array(16).
|
|
327
|
+
* Pass an optional target Vec4 to eliminate all allocations.
|
|
328
|
+
*
|
|
326
329
|
* @param {Vec4} v - Vector to rotate
|
|
327
|
-
* @param {Vec4} [target] - Optional
|
|
328
|
-
* @returns {Vec4} Rotated vector
|
|
330
|
+
* @param {Vec4} [target] - Optional pre-allocated Vec4 to write result into
|
|
331
|
+
* @returns {Vec4} Rotated vector (target if provided, otherwise new Vec4)
|
|
329
332
|
*/
|
|
330
333
|
rotate(v, target) {
|
|
331
|
-
|
|
334
|
+
const x = v.x, y = v.y, z = v.z, w = v.w;
|
|
332
335
|
|
|
333
|
-
// Normalize
|
|
336
|
+
// Normalize for numerical stability (same as toMatrix)
|
|
334
337
|
const n = this.norm();
|
|
335
338
|
const invN = n > 1e-10 ? 1 / n : 1;
|
|
336
339
|
|
|
@@ -343,7 +346,7 @@ export class Rotor4D {
|
|
|
343
346
|
const zw = this.zw * invN;
|
|
344
347
|
const xyzw = this.xyzw * invN;
|
|
345
348
|
|
|
346
|
-
//
|
|
349
|
+
// Squared terms
|
|
347
350
|
const s2 = s * s;
|
|
348
351
|
const xy2 = xy * xy;
|
|
349
352
|
const xz2 = xz * xz;
|
|
@@ -353,22 +356,20 @@ export class Rotor4D {
|
|
|
353
356
|
const zw2 = zw * zw;
|
|
354
357
|
const xyzw2 = xyzw * xyzw;
|
|
355
358
|
|
|
356
|
-
// Cross terms
|
|
359
|
+
// Cross terms (pre-multiplied by 2)
|
|
357
360
|
const sxy = 2 * s * xy;
|
|
358
361
|
const sxz = 2 * s * xz;
|
|
359
362
|
const syz = 2 * s * yz;
|
|
360
363
|
const sxw = 2 * s * xw;
|
|
361
364
|
const syw = 2 * s * yw;
|
|
362
365
|
const szw = 2 * s * zw;
|
|
363
|
-
// const sxyzw = 2 * s * xyzw; // Unused in rotation matrix
|
|
364
366
|
|
|
365
|
-
const
|
|
367
|
+
const xzyz = 2 * xz * yz;
|
|
366
368
|
const xyyz = 2 * xy * yz;
|
|
369
|
+
const xyxz = 2 * xy * xz;
|
|
367
370
|
const xyxw = 2 * xy * xw;
|
|
368
371
|
const xyyw = 2 * xy * yw;
|
|
369
|
-
// const xyzw_c = 2 * xy * zw; // Unused in rotation matrix
|
|
370
372
|
|
|
371
|
-
const xzyz = 2 * xz * yz;
|
|
372
373
|
const xzxw = 2 * xz * xw;
|
|
373
374
|
const xzyw = 2 * xz * yw;
|
|
374
375
|
const xzzw = 2 * xz * zw;
|
|
@@ -388,40 +389,33 @@ export class Rotor4D {
|
|
|
388
389
|
const ywxyzw = 2 * yw * xyzw;
|
|
389
390
|
const zwxyzw = 2 * zw * xyzw;
|
|
390
391
|
|
|
391
|
-
//
|
|
392
|
-
//
|
|
393
|
-
const
|
|
394
|
-
const
|
|
395
|
-
const
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
const
|
|
400
|
-
const
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
const
|
|
406
|
-
const
|
|
407
|
-
|
|
408
|
-
const
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
const
|
|
417
|
-
const
|
|
418
|
-
const z = v.z;
|
|
419
|
-
const w = v.w;
|
|
420
|
-
|
|
421
|
-
const rx = m00 * x + m10 * y + m20 * z + m30 * w;
|
|
422
|
-
const ry = m01 * x + m11 * y + m21 * z + m31 * w;
|
|
423
|
-
const rz = m02 * x + m12 * y + m22 * z + m32 * w;
|
|
424
|
-
const rw = m03 * x + m13 * y + m23 * z + m33 * w;
|
|
392
|
+
// Column-major 4x4 rotation matrix entries (inlined from toMatrix)
|
|
393
|
+
// Column 0
|
|
394
|
+
const m0 = s2 - xy2 - xz2 + yz2 - xw2 + yw2 + zw2 - xyzw2;
|
|
395
|
+
const m1 = sxy + xzyz + xwyw - zwxyzw;
|
|
396
|
+
const m2 = sxz - xyyz + xwzw + ywxyzw;
|
|
397
|
+
const m3 = sxw - xyyw - xzzw - yzxyzw;
|
|
398
|
+
// Column 1
|
|
399
|
+
const m4 = -sxy + xzyz + xwyw + zwxyzw;
|
|
400
|
+
const m5 = s2 - xy2 + xz2 - yz2 + xw2 - yw2 + zw2 - xyzw2;
|
|
401
|
+
const m6 = syz + xyxz + ywzw - xwxyzw;
|
|
402
|
+
const m7 = syw + xyxw - yzzw + xzxyzw;
|
|
403
|
+
// Column 2
|
|
404
|
+
const m8 = -sxz - xyyz + xwzw - ywxyzw;
|
|
405
|
+
const m9 = -syz + xyxz + ywzw + xwxyzw;
|
|
406
|
+
const m10 = s2 + xy2 - xz2 - yz2 + xw2 + yw2 - zw2 - xyzw2;
|
|
407
|
+
const m11 = szw + xzxw + yzyw - xyxyzw;
|
|
408
|
+
// Column 3
|
|
409
|
+
const m12 = -sxw - xyyw - xzzw + yzxyzw;
|
|
410
|
+
const m13 = -syw + xyxw - yzzw - xzxyzw;
|
|
411
|
+
const m14 = -szw + xzxw + yzyw + xyxyzw;
|
|
412
|
+
const m15 = s2 + xy2 + xz2 + yz2 - xw2 - yw2 - zw2 - xyzw2;
|
|
413
|
+
|
|
414
|
+
// Matrix-vector multiply
|
|
415
|
+
const rx = m0 * x + m4 * y + m8 * z + m12 * w;
|
|
416
|
+
const ry = m1 * x + m5 * y + m9 * z + m13 * w;
|
|
417
|
+
const rz = m2 * x + m6 * y + m10 * z + m14 * w;
|
|
418
|
+
const rw = m3 * x + m7 * y + m11 * z + m15 * w;
|
|
425
419
|
|
|
426
420
|
if (target) {
|
|
427
421
|
target.x = rx;
|
|
@@ -430,15 +424,15 @@ export class Rotor4D {
|
|
|
430
424
|
target.w = rw;
|
|
431
425
|
return target;
|
|
432
426
|
}
|
|
433
|
-
|
|
434
427
|
return new Vec4(rx, ry, rz, rw);
|
|
435
428
|
}
|
|
436
429
|
|
|
437
430
|
/**
|
|
438
431
|
* Convert rotor to 4x4 rotation matrix (column-major for WebGL)
|
|
432
|
+
* @param {Float32Array|Array} [target] - Optional target array to write into
|
|
439
433
|
* @returns {Float32Array} 16-element array in column-major order
|
|
440
434
|
*/
|
|
441
|
-
toMatrix() {
|
|
435
|
+
toMatrix(target = null) {
|
|
442
436
|
// Normalize first for numerical stability
|
|
443
437
|
const n = this.norm();
|
|
444
438
|
const invN = n > 1e-10 ? 1 / n : 1;
|
|
@@ -502,6 +496,35 @@ export class Rotor4D {
|
|
|
502
496
|
// Formula derived from sandwich product R v R†
|
|
503
497
|
// Diagonal: s² minus bivectors containing that axis, plus others
|
|
504
498
|
// Off-diagonal: 2*s*bivector terms for single-plane contributions
|
|
499
|
+
|
|
500
|
+
if (target) {
|
|
501
|
+
// Column 0 (transformed X axis)
|
|
502
|
+
target[0] = s2 - xy2 - xz2 + yz2 - xw2 + yw2 + zw2 - xyzw2;
|
|
503
|
+
target[1] = sxy + xzyz + xwyw - zwxyzw;
|
|
504
|
+
target[2] = sxz - xyyz + xwzw + ywxyzw;
|
|
505
|
+
target[3] = sxw - xyyw - xzzw - yzxyzw;
|
|
506
|
+
|
|
507
|
+
// Column 1 (transformed Y axis)
|
|
508
|
+
target[4] = -sxy + xzyz + xwyw + zwxyzw;
|
|
509
|
+
target[5] = s2 - xy2 + xz2 - yz2 + xw2 - yw2 + zw2 - xyzw2;
|
|
510
|
+
target[6] = syz + xyxz + ywzw - xwxyzw;
|
|
511
|
+
target[7] = syw + xyxw - yzzw + xzxyzw;
|
|
512
|
+
|
|
513
|
+
// Column 2 (transformed Z axis)
|
|
514
|
+
target[8] = -sxz - xyyz + xwzw - ywxyzw;
|
|
515
|
+
target[9] = -syz + xyxz + ywzw + xwxyzw;
|
|
516
|
+
target[10] = s2 + xy2 - xz2 - yz2 + xw2 + yw2 - zw2 - xyzw2;
|
|
517
|
+
target[11] = szw + xzxw + yzyw - xyxyzw;
|
|
518
|
+
|
|
519
|
+
// Column 3 (transformed W axis)
|
|
520
|
+
target[12] = -sxw - xyyw - xzzw + yzxyzw;
|
|
521
|
+
target[13] = -syw + xyxw - yzzw - xzxyzw;
|
|
522
|
+
target[14] = -szw + xzxw + yzyw + xyxyzw;
|
|
523
|
+
target[15] = s2 + xy2 + xz2 + yz2 - xw2 - yw2 - zw2 - xyzw2;
|
|
524
|
+
|
|
525
|
+
return target;
|
|
526
|
+
}
|
|
527
|
+
|
|
505
528
|
return new Float32Array([
|
|
506
529
|
// Column 0 (transformed X axis)
|
|
507
530
|
s2 - xy2 - xz2 + yz2 - xw2 + yw2 + zw2 - xyzw2,
|