@nakednous/tree 0.0.6 → 0.0.7
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/README.md +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Core constants — zero dependencies.
|
|
3
3
|
* @module tree/constants
|
|
4
|
-
* @license
|
|
4
|
+
* @license AGPL-3.0-only
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
// Coordinate spaces
|
|
@@ -33,7 +33,7 @@ const _k = Object.freeze([0, 0, -1]);
|
|
|
33
33
|
/**
|
|
34
34
|
* @file Pure numeric math — mat4, mat3, projection queries, space transforms.
|
|
35
35
|
* @module tree/math
|
|
36
|
-
* @license
|
|
36
|
+
* @license AGPL-3.0-only
|
|
37
37
|
*
|
|
38
38
|
* CONVENTIONS (all functions in this module follow these):
|
|
39
39
|
*
|
|
@@ -812,7 +812,7 @@ function applyPickMatrix(proj, px, py, W, H) {
|
|
|
812
812
|
/**
|
|
813
813
|
* @file Pure quaternion/spline math + track state machines.
|
|
814
814
|
* @module tree/track
|
|
815
|
-
* @license
|
|
815
|
+
* @license AGPL-3.0-only
|
|
816
816
|
*
|
|
817
817
|
* Zero dependencies. No p5, DOM, WebGL, or WebGPU usage.
|
|
818
818
|
*
|
|
@@ -1949,7 +1949,7 @@ class CameraTrack extends Track {
|
|
|
1949
1949
|
/**
|
|
1950
1950
|
* @file Frustum planes and visibility tests — zero allocations.
|
|
1951
1951
|
* @module tree/visibility
|
|
1952
|
-
* @license
|
|
1952
|
+
* @license AGPL-3.0-only
|
|
1953
1953
|
*
|
|
1954
1954
|
* Planes are a flat Float64Array(24): 6 planes × 4 floats [a, b, c, d].
|
|
1955
1955
|
* All inputs are scalars. All outputs are INVISIBLE | VISIBLE | SEMIVISIBLE.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.js","../src/math.js","../src/track.js","../src/visibility.js"],"sourcesContent":["/**\n * @file Core constants — zero dependencies.\n * @module tree/constants\n * @license GPL-3.0-only\n */\n\n// Coordinate spaces\nexport const WORLD = 'WORLD';\nexport const EYE = 'EYE';\nexport const NDC = 'NDC';\nexport const SCREEN = 'SCREEN';\nexport const MODEL = 'MODEL';\nexport const MATRIX = 'MATRIX';\n\n// NDC Z convention (only difference between backends)\nexport const WEBGL = -1; // z ∈ [−1, 1]\nexport const WEBGPU = 0; // z ∈ [0, 1]\n\n// Visibility results\nexport const INVISIBLE = 0;\nexport const VISIBLE = 1;\nexport const SEMIVISIBLE = 2;\n\n// Basis vectors (frozen plain arrays — duck-typed Vec3)\nexport const ORIGIN = Object.freeze([0, 0, 0]);\nexport const i = Object.freeze([1, 0, 0]);\nexport const j = Object.freeze([0, 1, 0]);\nexport const k = Object.freeze([0, 0, 1]);\nexport const _i = Object.freeze([-1, 0, 0]);\nexport const _j = Object.freeze([0, -1, 0]);\nexport const _k = Object.freeze([0, 0, -1]);\n","/**\n * @file Pure numeric math — mat4, mat3, projection queries, space transforms.\n * @module tree/math\n * @license GPL-3.0-only\n *\n * CONVENTIONS (all functions in this module follow these):\n *\n * Storage: Column-major Float32Array / ArrayLike<number>.\n * Element [col*4 + row] = M[row, col].\n *\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n *\n * Pipeline: clip = P · V · M · v\n * P = projection (eye → clip)\n * V = view (world → eye)\n * M = model (local → world)\n *\n * PV: All functions expecting a \"pv\" matrix receive P · V.\n * This is what _worldToScreen, _ensurePV, etc. compute.\n *\n * Matrix stack (translate/rotate/scale in p5):\n * Each call post-multiplies: M = M · T, so:\n * translate(tx,ty,tz); rotateY(a); scale(s);\n * yields M = T · R · S. A vertex v is transformed as M·v = T·R·S·v\n * (scaled first, then rotated, then translated — last-written-first-applied).\n *\n * p5 bridge note (for implementors of host layers):\n * p5.Matrix.mult(B) computes B · this (pre-multiply, arg on LEFT).\n * p5 translate/rotate/scale do this · T (post-multiply, GL stack).\n * So p5's pvMatrix() = V.clone().mult(P) = P · V — same as ours.\n * The bridge extracts .mat4 (Float32Array) and feeds it directly,\n * or uses mat4Mul(out, proj, view) for the non-cached path.\n *\n * Every function uses only stack locals for intermediates (zero shared state).\n * Every mutating function writes to a caller-provided `out` and returns `out`.\n * Returns null on degeneracy (singular matrix, etc.).\n */\n\n'use strict';\n\nimport {\n WORLD, EYE, NDC, SCREEN, MATRIX,\n} from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 math\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major, standard math order) */\nexport function mat4Mul(out, A, B) {\n const a0=A[0],a1=A[1],a2=A[2],a3=A[3],\n a4=A[4],a5=A[5],a6=A[6],a7=A[7],\n a8=A[8],a9=A[9],a10=A[10],a11=A[11],\n a12=A[12],a13=A[13],a14=A[14],a15=A[15];\n let b0=B[0],b1=B[1],b2=B[2],b3=B[3];\n out[0]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[1]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[2]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[3]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[4];b1=B[5];b2=B[6];b3=B[7];\n out[4]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[5]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[6]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[7]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[8];b1=B[9];b2=B[10];b3=B[11];\n out[8]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[9]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[10]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[11]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[12];b1=B[13];b2=B[14];b3=B[15];\n out[12]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[13]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[14]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[15]=a3*b0+a7*b1+a11*b2+a15*b3;\n return out;\n}\n\n/** out = inverse(src). Returns null if singular. */\nexport function mat4Invert(out, src) {\n const s=src;\n const a00=s[0],a01=s[1],a02=s[2],a03=s[3],\n a10=s[4],a11=s[5],a12=s[6],a13=s[7],\n a20=s[8],a21=s[9],a22=s[10],a23=s[11],\n a30=s[12],a31=s[13],a32=s[14],a33=s[15];\n const b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,\n b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,\n b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,\n b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,\n b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,\n b10=a21*a33-a23*a31,b11=a22*a33-a23*a32;\n let det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n out[0]=(a11*b11-a12*b10+a13*b09)*det;\n out[1]=(a02*b10-a01*b11-a03*b09)*det;\n out[2]=(a31*b05-a32*b04+a33*b03)*det;\n out[3]=(a22*b04-a21*b05-a23*b03)*det;\n out[4]=(a12*b08-a10*b11-a13*b07)*det;\n out[5]=(a00*b11-a02*b08+a03*b07)*det;\n out[6]=(a32*b02-a30*b05-a33*b01)*det;\n out[7]=(a20*b05-a22*b02+a23*b01)*det;\n out[8]=(a10*b10-a11*b08+a13*b06)*det;\n out[9]=(a01*b08-a00*b10-a03*b06)*det;\n out[10]=(a30*b04-a31*b02+a33*b00)*det;\n out[11]=(a21*b02-a20*b04-a23*b00)*det;\n out[12]=(a11*b07-a10*b09-a12*b06)*det;\n out[13]=(a00*b09-a01*b07+a02*b06)*det;\n out[14]=(a31*b01-a30*b03-a32*b00)*det;\n out[15]=(a20*b03-a21*b01+a22*b00)*det;\n return out;\n}\n\n/** out = transpose(src) */\nexport function mat4Transpose(out, src) {\n if (out === src) {\n let t;\n t=src[1];out[1]=src[4];out[4]=t;\n t=src[2];out[2]=src[8];out[8]=t;\n t=src[3];out[3]=src[12];out[12]=t;\n t=src[6];out[6]=src[9];out[9]=t;\n t=src[7];out[7]=src[13];out[13]=t;\n t=src[11];out[11]=src[14];out[14]=t;\n } else {\n out[0]=src[0];out[1]=src[4];out[2]=src[8];out[3]=src[12];\n out[4]=src[1];out[5]=src[5];out[6]=src[9];out[7]=src[13];\n out[8]=src[2];out[9]=src[6];out[10]=src[10];out[11]=src[14];\n out[12]=src[3];out[13]=src[7];out[14]=src[11];out[15]=src[15];\n }\n return out;\n}\n\n/** out[0..8] = inverseTranspose(upper3×3(src)) (normal matrix) */\nexport function mat3NormalFromMat4(out, src) {\n const a00=src[0],a01=src[1],a02=src[2],\n a10=src[4],a11=src[5],a12=src[6],\n a20=src[8],a21=src[9],a22=src[10];\n const b01=a22*a11-a12*a21,\n b11=-a22*a01+a02*a21,\n b21=a12*a01-a02*a11;\n let det=a00*b01+a10*b11+a20*b21;\n if (Math.abs(det) < 1e-12) { for(let i=0;i<9;i++)out[i]=0; return out; }\n det=1/det;\n out[0]=b01*det;\n out[1]=(-a22*a10+a12*a20)*det;\n out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det;\n out[4]=(a22*a00-a02*a20)*det;\n out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det;\n out[7]=(-a12*a00+a02*a10)*det;\n out[8]=(a11*a00-a01*a10)*det;\n return out;\n}\n\n/** out = mat4 * [x,y,z,1], perspective-divides, writes xyz */\nexport function mat4MulPoint(out, m, x, y, z) {\n const rx = m[0]*x + m[4]*y + m[8]*z + m[12];\n const ry = m[1]*x + m[5]*y + m[9]*z + m[13];\n const rz = m[2]*x + m[6]*y + m[10]*z + m[14];\n const rw = m[3]*x + m[7]*y + m[11]*z + m[15];\n if (rw !== 0 && rw !== 1) {\n out[0] = rx/rw; out[1] = ry/rw; out[2] = rz/rw;\n } else {\n out[0] = rx; out[1] = ry; out[2] = rz;\n }\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Projection queries (read scalars from a projection mat4)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** @returns {boolean} true if orthographic */\nexport function projIsOrtho(p) { return p[15] !== 0; }\n\n/**\n * Near plane distance.\n * @param {ArrayLike<number>} p Projection Mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projNear(p, ndcZMin) {\n return p[15] === 0\n ? p[14] / (p[10] + ndcZMin)\n : (p[14] - ndcZMin) / p[10];\n}\n\n/** Far plane distance (convention-independent: far always maps to NDC z=1). */\nexport function projFar(p) {\n return p[15] === 0\n ? p[14] / (1 + p[10])\n : (p[14] - 1) / p[10];\n}\n\nexport function projLeft(p, ndcZMin) {\n return p[15] === 1\n ? -(1 + p[12]) / p[0]\n : projNear(p, ndcZMin) * (p[8] - 1) / p[0];\n}\n\nexport function projRight(p, ndcZMin) {\n return p[15] === 1\n ? (1 - p[12]) / p[0]\n : projNear(p, ndcZMin) * (1 + p[8]) / p[0];\n}\n\nexport function projTop(p, ndcZMin) {\n return p[15] === 1\n ? (p[13] - 1) / p[5]\n : projNear(p, ndcZMin) * (p[9] - 1) / p[5];\n}\n\nexport function projBottom(p, ndcZMin) {\n return p[15] === 1\n ? (1 + p[13]) / p[5]\n : projNear(p, ndcZMin) * (1 + p[9]) / p[5];\n}\n\n/** Vertical fov (radians, perspective only). */\nexport function projFov(p) {\n return Math.abs(2 * Math.atan(1 / p[5]));\n}\n\n/** Horizontal fov (radians, perspective only). */\nexport function projHfov(p) {\n return Math.abs(2 * Math.atan(1 / p[0]));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices (convenience)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Location / Direction transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Relative transform for locations (points): out = inv(to) · from.\n * @param {ArrayLike<number>} out 16-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if to is singular.\n */\nexport function mat4Location(out, from, to) {\n return mat4Invert(out, to) && mat4Mul(out, out, from);\n}\n\n/**\n * Relative transform for directions (vectors): out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks, ignoring translation.\n * @param {ArrayLike<number>} out 9-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if from is singular.\n */\nexport function mat3Direction(out, from, to) {\n const a00=from[0], a01=from[1], a02=from[2],\n a10=from[4], a11=from[5], a12=from[6],\n a20=from[8], a21=from[9], a22=from[10];\n const b01=a22*a11-a12*a21,\n b11=a12*a20-a22*a10,\n b21=a21*a10-a11*a20;\n let det=a00*b01+a01*b11+a02*b21;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n const i00=b01*det, i01=(a02*a21-a22*a01)*det, i02=(a12*a01-a02*a11)*det;\n const i10=b11*det, i11=(a22*a00-a02*a20)*det, i12=(a02*a10-a12*a00)*det;\n const i20=b21*det, i21=(a01*a20-a21*a00)*det, i22=(a11*a00-a01*a10)*det;\n const t00=to[0], t01=to[1], t02=to[2],\n t10=to[4], t11=to[5], t12=to[6],\n t20=to[8], t21=to[9], t22=to[10];\n const m00=t00*i00+t10*i01+t20*i02, m01=t01*i00+t11*i01+t21*i02, m02=t02*i00+t12*i01+t22*i02;\n const m10=t00*i10+t10*i11+t20*i12, m11=t01*i10+t11*i11+t21*i12, m12=t02*i10+t12*i11+t22*i12;\n const m20=t00*i20+t10*i21+t20*i22, m21=t01*i20+t11*i21+t21*i22, m22=t02*i20+t12*i21+t22*i22;\n out[0]=m00; out[1]=m10; out[2]=m20;\n out[3]=m01; out[4]=m11; out[5]=m21;\n out[6]=m02; out[7]=m12; out[8]=m22;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Space transforms — mapLocation / mapDirection\n// ═══════════════════════════════════════════════════════════════════════════\n//\n// FLAT DISPATCH: every from→to pair is a self-contained leaf.\n// No path calls back into mapLocation/mapDirection (no reentrancy).\n// All intermediates are stack locals (zero shared state).\n//\n// Matrices bag m:\n// {\n// pMatrix: Float32Array(16) — projection (eye → clip)\n// vMatrix: Float32Array(16) — view (world → eye)\n// eMatrix?: Float32Array(16) — eye (eye → world, inv view); lazy\n// pvMatrix?: Float32Array(16) — P · V; lazy\n// ipvMatrix?:Float32Array(16) — inv(P · V); lazy\n// fromFrame?:Float32Array(16) — MATRIX source frame (custom space)\n// toFrameInv?:Float32Array(16) — inv(MATRIX dest frame)\n// }\n//\n\n// ── Location leaf helpers ────────────────────────────────────────────────\n\nfunction _worldToScreen(out, px, py, pz, pv, vp, ndcZMin) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? x/w : x;\n const yi = (w !== 0 && w !== 1) ? y/w : y;\n const zi = (w !== 0 && w !== 1) ? z/w : z;\n const ndcZRange = 1 - ndcZMin;\n out[0] = (xi*0.5+0.5)*vp[2]+vp[0];\n out[1] = (yi*0.5+0.5)*vp[3]+vp[1];\n out[2] = (zi - ndcZMin) / ndcZRange;\n return out;\n}\n\nfunction _screenToWorld(out, px, py, pz, ipv, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n const nx = ((px-vp[0])/vp[2])*2-1;\n const ny = ((py-vp[1])/vp[3])*2-1;\n const nz = pz * ndcZRange + ndcZMin;\n const x = ipv[0]*nx+ipv[4]*ny+ipv[8]*nz+ipv[12];\n const y = ipv[1]*nx+ipv[5]*ny+ipv[9]*nz+ipv[13];\n const z = ipv[2]*nx+ipv[6]*ny+ipv[10]*nz+ipv[14];\n const w = ipv[3]*nx+ipv[7]*ny+ipv[11]*nz+ipv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _ndcToWorld(out, px, py, pz, ipv) {\n const x = ipv[0]*px+ipv[4]*py+ipv[8]*pz+ipv[12];\n const y = ipv[1]*px+ipv[5]*py+ipv[9]*pz+ipv[13];\n const z = ipv[2]*px+ipv[6]*py+ipv[10]*pz+ipv[14];\n const w = ipv[3]*px+ipv[7]*py+ipv[11]*pz+ipv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _screenToNDC(out, px, py, pz, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = ((px-vp[0])/vp[2])*2-1;\n out[1] = ((py-vp[1])/vp[3])*2-1;\n out[2] = pz * ndcZRange + ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, px, py, pz, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = (px*0.5+0.5)*vp[2]+vp[0];\n out[1] = (py*0.5+0.5)*vp[3]+vp[1];\n out[2] = (pz - ndcZMin) / ndcZRange;\n return out;\n}\n\n// ── _ensurePV — return pvMatrix from bag, computing inline if absent ──────\n\nfunction _ensurePV(m) {\n if (m.pvMatrix) return m.pvMatrix;\n const p = m.pMatrix, v = m.vMatrix;\n return [\n p[0]*v[0]+p[4]*v[1]+p[8]*v[2]+p[12]*v[3],\n p[1]*v[0]+p[5]*v[1]+p[9]*v[2]+p[13]*v[3],\n p[2]*v[0]+p[6]*v[1]+p[10]*v[2]+p[14]*v[3],\n p[3]*v[0]+p[7]*v[1]+p[11]*v[2]+p[15]*v[3],\n p[0]*v[4]+p[4]*v[5]+p[8]*v[6]+p[12]*v[7],\n p[1]*v[4]+p[5]*v[5]+p[9]*v[6]+p[13]*v[7],\n p[2]*v[4]+p[6]*v[5]+p[10]*v[6]+p[14]*v[7],\n p[3]*v[4]+p[7]*v[5]+p[11]*v[6]+p[15]*v[7],\n p[0]*v[8]+p[4]*v[9]+p[8]*v[10]+p[12]*v[11],\n p[1]*v[8]+p[5]*v[9]+p[9]*v[10]+p[13]*v[11],\n p[2]*v[8]+p[6]*v[9]+p[10]*v[10]+p[14]*v[11],\n p[3]*v[8]+p[7]*v[9]+p[11]*v[10]+p[15]*v[11],\n p[0]*v[12]+p[4]*v[13]+p[8]*v[14]+p[12]*v[15],\n p[1]*v[12]+p[5]*v[13]+p[9]*v[14]+p[13]*v[15],\n p[2]*v[12]+p[6]*v[13]+p[10]*v[14]+p[14]*v[15],\n p[3]*v[12]+p[7]*v[13]+p[11]*v[14]+p[15]*v[15],\n ];\n}\n\n/**\n * Map a point between coordinate spaces.\n *\n * @param {Vec3} out Result written here.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space constant.\n * @param {string} to Target space constant.\n * @param {object} m Matrices bag:\n * { pMatrix, vMatrix, eMatrix?, pvMatrix?, ipvMatrix?, fromFrame?, toFrameInv? }\n * @param {Vec4} vp Viewport [x, y, width, height].\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreen(out, px,py,pz, _ensurePV(m), vp, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC)\n return _worldToNDC(out, px,py,pz, _ensurePV(m));\n if (from === NDC && to === WORLD)\n return _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDC(out, px,py,pz, vp, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreen(out, px,py,pz, vp, ndcZMin);\n\n // WORLD ↔ EYE\n if (from === WORLD && to === EYE)\n return mat4MulPoint(out, m.vMatrix, px,py,pz);\n if (from === EYE && to === WORLD)\n return mat4MulPoint(out, m.eMatrix, px,py,pz);\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToScreen(out, ex,ey,ez, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToNDC(out, ex,ey,ez, _ensurePV(m));\n }\n if (from === NDC && to === EYE) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX (custom frame) ↔ WORLD\n if (from === MATRIX && to === WORLD)\n return mat4MulPoint(out, m.fromFrame, px,py,pz);\n if (from === WORLD && to === MATRIX)\n return mat4MulPoint(out, m.toFrameInv, px,py,pz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.vMatrix, fx,fy,fz);\n }\n if (from === EYE && to === MATRIX) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return mat4MulPoint(out, m.toFrameInv, ex,ey,ez);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToScreen(out, fx,fy,fz, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToNDC(out, fx,fy,fz, _ensurePV(m));\n }\n if (from === NDC && to === MATRIX) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.toFrameInv, fx,fy,fz);\n }\n\n // Fallback\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction helpers ────────────────────────────────────────────────────\n\n/** Apply the 3×3 linear part of a mat4 (rotation/scale, no translation). */\nfunction _applyDir(out, mat, dx, dy, dz) {\n out[0]=mat[0]*dx+mat[4]*dy+mat[8]*dz;\n out[1]=mat[1]*dx+mat[5]*dy+mat[9]*dz;\n out[2]=mat[2]*dx+mat[6]*dy+mat[10]*dz;\n return out;\n}\n\nfunction _worldToScreenDir(out, dx, dy, dz, proj, view, vpW, vpH, ndcZMin) {\n const edx = view[0]*dx + view[4]*dy + view[8]*dz;\n const edy = view[1]*dx + view[5]*dy + view[9]*dz;\n const edz = view[2]*dx + view[6]*dy + view[10]*dz;\n const isPersp = proj[15] === 0;\n let sdx = edx, sdy = edy;\n if (isPersp) {\n const zEye = view[14];\n const halfTan = Math.tan(projFov(proj) / 2);\n const k = Math.abs(zEye * halfTan);\n const pixPerUnit = vpH / (2 * k);\n sdx *= pixPerUnit;\n sdy *= pixPerUnit;\n } else {\n const orthoW = Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin));\n sdx *= vpW / orthoW;\n sdy *= vpH / Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin));\n }\n const near = projNear(proj, ndcZMin), far = projFar(proj);\n const depthRange = near - far;\n let sdz;\n if (isPersp) {\n sdz = edz / (depthRange / Math.tan(projFov(proj) / 2));\n } else {\n sdz = edz / (depthRange / (Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin)) / vpW));\n }\n out[0] = sdx; out[1] = sdy; out[2] = sdz;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, view, eye, vpW, vpH, ndcZMin) {\n const isPersp = proj[15] === 0;\n let edx = dx, edy = dy;\n if (isPersp) {\n const zEye = view[14];\n const halfTan = Math.tan(projFov(proj) / 2);\n const k = Math.abs(zEye * halfTan);\n edx *= 2 * k / vpH;\n edy *= 2 * k / vpH;\n } else {\n const orthoW = Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin));\n edx *= orthoW / vpW;\n edy *= Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n const near = projNear(proj, ndcZMin), far = projFar(proj);\n const depthRange = near - far;\n let edz;\n if (isPersp) {\n edz = dz * (depthRange / Math.tan(projFov(proj) / 2));\n } else {\n edz = dz * (depthRange / (Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin)) / vpW));\n }\n _applyDir(out, eye, edx, edy, edz);\n return out;\n}\n\nfunction _screenToNDCDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = 2 * dx / vpW;\n out[1] = 2 * dy / vpH;\n out[2] = dz * ndcZRange;\n return out;\n}\n\nfunction _ndcToScreenDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = vpW * dx / 2;\n out[1] = vpH * dy / 2;\n out[2] = dz / ndcZRange;\n return out;\n}\n\n/**\n * Map a direction vector between coordinate spaces.\n * Same bag contract as mapLocation.\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW = Math.abs(vp[2]), vpH = Math.abs(vp[3]);\n\n // EYE ↔ WORLD (most common)\n if (from === EYE && to === WORLD) return _applyDir(out, m.eMatrix, dx, dy, dz);\n if (from === WORLD && to === EYE) return _applyDir(out, m.vMatrix, dx, dy, dz);\n\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDCDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC) {\n _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === WORLD) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n }\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === EYE) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX ↔ WORLD\n if (from === MATRIX && to === WORLD) return _applyDir(out, m.fromFrame, dx,dy,dz);\n if (from === WORLD && to === MATRIX) return _applyDir(out, m.toFrameInv, dx,dy,dz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n if (from === EYE && to === MATRIX) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === MATRIX) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // Fallback\n out[0]=dx; out[1]=dy; out[2]=dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// pixelRatio\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * World-units-per-pixel at a given eye-space Z depth.\n * @param {ArrayLike<number>} proj Projection mat4.\n * @param {number} vpH Viewport height (pixels).\n * @param {number} eyeZ Eye-space Z (negative for in-front-of camera).\n * @param {number} ndcZMin WEBGL or WEBGPU.\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n if (projIsOrtho(proj)) {\n return Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n return 2 * Math.abs(eyeZ) * Math.tan(projFov(proj) / 2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Apply the pick-matrix in-place: proj ← M_pick · proj\n *\n * Zooms the frustum so that pixel (px, py) maps to the full NDC square,\n * making a 1×1 framebuffer render contain exactly that pixel's content.\n * Convention-independent — correct for both perspective and orthographic.\n *\n * M_pick (column-major):\n * [ sx 0 0 tx ] sx = W, sy = H\n * [ 0 sy 0 ty ] cx = NDC X of pixel centre = 2*(px+0.5)/W − 1\n * [ 0 0 1 0 ] cy = NDC Y of pixel centre = 1 − 2*(py+0.5)/H\n * [ 0 0 0 1 ] tx = −cx·W, ty = −cy·H\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query X (CSS pixels).\n * @param {number} py Query Y (CSS pixels).\n * @param {number} W Canvas width (CSS pixels).\n * @param {number} H Canvas height (CSS pixels).\n * @returns {Float32Array} proj (same reference)\n */\nexport function applyPickMatrix(proj, px, py, W, H) {\n const cx = 2 * (px + 0.5) / W - 1;\n const cy = -2 * (py + 0.5) / H + 1; // Y flip: screen-down → NDC-up\n const sx = W;\n const sy = H;\n const tx = -cx * W;\n const ty = -cy * H;\n // P_pick = M_pick * P_orig (rows 2 and 3 are unchanged)\n for (let j = 0; j < 4; j++) {\n const a = proj[j * 4];\n const b = proj[j * 4 + 1];\n const d = proj[j * 4 + 3];\n proj[j * 4] = sx * a + tx * d;\n proj[j * 4 + 1] = sy * b + ty * d;\n }\n return proj;\n}\n","/**\n * @file Pure quaternion/spline math + track state machines.\n * @module tree/track\n * @license GPL-3.0-only\n *\n * Zero dependencies. No p5, DOM, WebGL, or WebGPU usage.\n *\n * ── Exports ──────────────────────────────────────────────────────────────────\n * Quaternion helpers\n * qSet qCopy qDot qNormalize qNegate qMul qSlerp qNlerp\n * qFromAxisAngle qFromLookDir qFromRotMat3x3 qFromMat4 qToMat4\n * quatToAxisAngle\n * Spline / vector helpers\n * catmullRomVec3 lerpVec3\n * Transform / mat4 helpers\n * transformToMat4 mat4ToTransform\n * Tracks\n * PoseTrack — { pos, rot, scl } TRS keyframes\n * CameraTrack — { eye, center, up } lookat keyframes\n *\n * ── Class hierarchy ───────────────────────────────────────────────────────────\n * Track (unexported, never instantiated directly)\n * └── PoseTrack (exported)\n * └── CameraTrack (exported)\n *\n * Track holds all transport machinery: cursor, play/stop/seek/tick,\n * hooks, rate semantics. Subclasses add only keyframe storage and\n * add() / eval() for their respective data shape.\n *\n * ── Hook architecture ─────────────────────────────────────────────────────────\n * _onActivate / _onDeactivate — lib-space (underscore, set by host layer)\n * Fire on playing transitions: false→true / true→false.\n *\n * onPlay / onEnd / onStop — user-space (public)\n * onPlay : fires in play() on false→true transition.\n * onEnd : fires in tick() at natural boundary (once mode only).\n * onStop : fires in stop() / reset() — explicit deactivation.\n * onEnd and onStop are mutually exclusive per event.\n *\n * Firing order:\n * play() → onPlay → _onActivate\n * tick() → onEnd → _onDeactivate\n * stop() → onStop → _onDeactivate\n * reset() → onStop → _onDeactivate\n *\n * ── Playback semantics (rate) ─────────────────────────────────────────────────\n * rate > 0 forward\n * rate < 0 backward\n * rate === 0 frozen: tick() no-op; playing unchanged\n *\n * play() is the sole setter of playing = true.\n * stop() is the sole setter of playing = false.\n * Assigning rate never starts or stops playback.\n *\n * ── One-keyframe behaviour ────────────────────────────────────────────────────\n * play() with exactly one keyframe snaps eval() to that keyframe without\n * setting playing = true and without firing hooks.\n */\n\n'use strict';\n\n// =========================================================================\n// S1 Quaternion helpers (flat [x, y, z, w], w-last)\n// =========================================================================\n\n/** Set all four components. @returns {number[]} out */\nexport const qSet = (out, x, y, z, w) => {\n out[0] = x; out[1] = y; out[2] = z; out[3] = w; return out;\n};\n\n/** Copy quaternion a into out. @returns {number[]} out */\nexport const qCopy = (out, a) => {\n out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out;\n};\n\n/** Dot product of two quaternions. */\nexport const qDot = (a, b) => a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];\n\n/** Normalise quaternion in-place. @returns {number[]} out */\nexport const qNormalize = (out) => {\n const l = Math.sqrt(out[0]*out[0]+out[1]*out[1]+out[2]*out[2]+out[3]*out[3]) || 1;\n out[0]/=l; out[1]/=l; out[2]/=l; out[3]/=l; return out;\n};\n\n/** Negate quaternion (same rotation, different hemisphere). @returns {number[]} out */\nexport const qNegate = (out, a) => {\n out[0]=-a[0]; out[1]=-a[1]; out[2]=-a[2]; out[3]=-a[3]; return out;\n};\n\n/** Hamilton product out = a * b. @returns {number[]} out */\nexport const qMul = (out, a, b) => {\n const ax=a[0],ay=a[1],az=a[2],aw=a[3], bx=b[0],by=b[1],bz=b[2],bw=b[3];\n out[0]=aw*bx+ax*bw+ay*bz-az*by;\n out[1]=aw*by-ax*bz+ay*bw+az*bx;\n out[2]=aw*bz+ax*by-ay*bx+az*bw;\n out[3]=aw*bw-ax*bx-ay*by-az*bz;\n return out;\n};\n\n/** Spherical linear interpolation. @returns {number[]} out */\nexport const qSlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n let d = a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw;\n if (d < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; d=-d; }\n let f0, f1;\n if (1-d > 1e-10) {\n const th=Math.acos(d), st=Math.sin(th);\n f0=Math.sin((1-t)*th)/st; f1=Math.sin(t*th)/st;\n } else {\n f0=1-t; f1=t;\n }\n out[0]=a[0]*f0+bx*f1; out[1]=a[1]*f0+by*f1;\n out[2]=a[2]*f0+bz*f1; out[3]=a[3]*f0+bw*f1;\n return qNormalize(out);\n};\n\n/**\n * Normalised linear interpolation (nlerp).\n * Cheaper than slerp; slightly non-constant angular velocity.\n * Handles antipodal quats by flipping b when dot < 0.\n * @returns {number[]} out\n */\nexport const qNlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n if (a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; }\n out[0]=a[0]+t*(bx-a[0]); out[1]=a[1]+t*(by-a[1]);\n out[2]=a[2]+t*(bz-a[2]); out[3]=a[3]+t*(bw-a[3]);\n return qNormalize(out);\n};\n\n/**\n * Build a quaternion from axis-angle.\n * @param {number[]} out\n * @param {number} ax @param {number} ay @param {number} az Axis (need not be unit).\n * @param {number} angle Radians.\n * @returns {number[]} out\n */\nexport const qFromAxisAngle = (out, ax, ay, az, angle) => {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const len = Math.sqrt(ax*ax + ay*ay + az*az) || 1;\n out[0] = s * ax / len; out[1] = s * ay / len; out[2] = s * az / len;\n out[3] = Math.cos(half);\n return out;\n};\n\n/**\n * Build a quaternion from a look direction (−Z forward) and optional up (default +Y).\n * @param {number[]} out\n * @param {number[]} dir Forward direction [x,y,z].\n * @param {number[]} [up] Up vector [x,y,z].\n * @returns {number[]} out\n */\nexport const qFromLookDir = (out, dir, up) => {\n let fx=dir[0],fy=dir[1],fz=dir[2];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n fx/=fl; fy/=fl; fz/=fl;\n let ux=up?up[0]:0, uy=up?up[1]:1, uz=up?up[2]:0;\n let rx=uy*fz-uz*fy, ry=uz*fx-ux*fz, rz=ux*fy-uy*fx;\n const rl=Math.sqrt(rx*rx+ry*ry+rz*rz)||1;\n rx/=rl; ry/=rl; rz/=rl;\n ux=fy*rz-fz*ry; uy=fz*rx-fx*rz; uz=fx*ry-fy*rx;\n return qFromRotMat3x3(out, rx,ry,rz, ux,uy,uz, -fx,-fy,-fz);\n};\n\n/**\n * Build a quaternion from a 3×3 rotation matrix (9 row-major scalars).\n * @returns {number[]} out (normalised)\n */\nexport const qFromRotMat3x3 = (out, m00,m01,m02, m10,m11,m12, m20,m21,m22) => {\n const tr = m00+m11+m22;\n if (tr > 0) {\n const s=0.5/Math.sqrt(tr+1);\n out[3]=0.25/s; out[0]=(m21-m12)*s; out[1]=(m02-m20)*s; out[2]=(m10-m01)*s;\n } else if (m00>m11 && m00>m22) {\n const s=2*Math.sqrt(1+m00-m11-m22);\n out[3]=(m21-m12)/s; out[0]=0.25*s; out[1]=(m01+m10)/s; out[2]=(m02+m20)/s;\n } else if (m11>m22) {\n const s=2*Math.sqrt(1+m11-m00-m22);\n out[3]=(m02-m20)/s; out[0]=(m01+m10)/s; out[1]=0.25*s; out[2]=(m12+m21)/s;\n } else {\n const s=2*Math.sqrt(1+m22-m00-m11);\n out[3]=(m10-m01)/s; out[0]=(m02+m20)/s; out[1]=(m12+m21)/s; out[2]=0.25*s;\n }\n return qNormalize(out);\n};\n\n/**\n * Extract a unit quaternion from the upper-left 3×3 of a column-major mat4.\n * @param {number[]} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {number[]} out\n */\nexport const qFromMat4 = (out, m) =>\n qFromRotMat3x3(out, m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n\n/**\n * Write a quaternion into the rotation block of a column-major mat4.\n * Translation and perspective rows/cols are set to identity values.\n * @param {Float32Array|number[]} out 16-element array.\n * @param {number[]} q [x,y,z,w].\n * @returns {Float32Array|number[]} out\n */\nexport const qToMat4 = (out, q) => {\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const x2=x+x,y2=y+y,z2=z+z;\n const xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;\n out[0]=1-(yy+zz); out[1]=xy+wz; out[2]=xz-wy; out[3]=0;\n out[4]=xy-wz; out[5]=1-(xx+zz); out[6]=yz+wx; out[7]=0;\n out[8]=xz+wy; out[9]=yz-wx; out[10]=1-(xx+yy); out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n};\n\n/**\n * Decompose a unit quaternion into { axis:[x,y,z], angle } (radians).\n * @param {number[]} q [x,y,z,w].\n * @param {Object} [out]\n * @returns {{ axis: number[], angle: number }}\n */\nexport const quatToAxisAngle = (q, out) => {\n out = out || {};\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const sinHalf = Math.sqrt(x*x+y*y+z*z);\n if (sinHalf < 1e-8) { out.axis=[0,1,0]; out.angle=0; return out; }\n out.angle = 2*Math.atan2(sinHalf, w);\n out.axis = [x/sinHalf, y/sinHalf, z/sinHalf];\n return out;\n};\n\n// =========================================================================\n// S2 Spline / vector helpers\n// =========================================================================\n\nfunction _dist3(a, b) {\n const dx=a[0]-b[0], dy=a[1]-b[1], dz=a[2]-b[2];\n return Math.sqrt(dx*dx+dy*dy+dz*dz);\n}\n\n/**\n * Centripetal Catmull-Rom interpolation (alpha=0.5, Barry-Goldman).\n * out = interp(p0, p1, p2, p3, t) where t∈[0,1] maps p1→p2.\n * Boundary: p0===p1 or p2===p3 clamps the end tangent.\n * @param {number[]} out 3-element result.\n * @param {number[]} p0 Control point before p1.\n * @param {number[]} p1 Segment start.\n * @param {number[]} p2 Segment end.\n * @param {number[]} p3 Control point after p2.\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const catmullRomVec3 = (out, p0, p1, p2, p3, t) => {\n const alpha = 0.5;\n const dt0 = Math.pow(_dist3(p0,p1), alpha) || 1;\n const dt1 = Math.pow(_dist3(p1,p2), alpha) || 1;\n const dt2 = Math.pow(_dist3(p2,p3), alpha) || 1;\n for (let i = 0; i < 3; i++) {\n const t1_0 = (p1[i]-p0[i])/dt0 - (p2[i]-p0[i])/(dt0+dt1) + (p2[i]-p1[i])/dt1;\n const t2_0 = (p2[i]-p1[i])/dt1 - (p3[i]-p1[i])/(dt1+dt2) + (p3[i]-p2[i])/dt2;\n const m1=t1_0*dt1, m2=t2_0*dt1;\n const a= 2*p1[i]-2*p2[i]+m1+m2;\n const b=-3*p1[i]+3*p2[i]-2*m1-m2;\n out[i] = a*t*t*t + b*t*t + m1*t + p1[i];\n }\n return out;\n};\n\n/**\n * Linear interpolation between two vec3s.\n * @param {number[]} out\n * @param {number[]} a\n * @param {number[]} b\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const lerpVec3 = (out, a, b, t) => {\n out[0]=a[0]+t*(b[0]-a[0]);\n out[1]=a[1]+t*(b[1]-a[1]);\n out[2]=a[2]+t*(b[2]-a[2]);\n return out;\n};\n\n// =========================================================================\n// S3 Transform <-> Mat4\n// =========================================================================\n\n/**\n * Write a TRS transform into a column-major mat4.\n * @param {Float32Array|number[]} out 16-element column-major mat4.\n * @param {{ pos:number[], rot:number[], scl:number[] }} xform\n * @returns {Float32Array|number[]} out\n */\nexport const transformToMat4 = (out, xform) => {\n qToMat4(out, xform.rot);\n const sx=xform.scl[0], sy=xform.scl[1], sz=xform.scl[2];\n out[0]*=sx; out[1]*=sx; out[2]*=sx;\n out[4]*=sy; out[5]*=sy; out[6]*=sy;\n out[8]*=sz; out[9]*=sz; out[10]*=sz;\n out[12]=xform.pos[0]; out[13]=xform.pos[1]; out[14]=xform.pos[2];\n return out;\n};\n\n/**\n * Decompose a column-major mat4 into a TRS transform.\n * Assumes no shear. Scale extracted from column lengths.\n * @param {{ pos:number[], rot:number[], scl:number[] }} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\nexport const mat4ToTransform = (out, m) => {\n out.pos[0]=m[12]; out.pos[1]=m[13]; out.pos[2]=m[14];\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n out.scl[0]=sx; out.scl[1]=sy; out.scl[2]=sz;\n qFromRotMat3x3(out.rot,\n m[0]/sx,m[4]/sy,m[8]/sz,\n m[1]/sx,m[5]/sy,m[9]/sz,\n m[2]/sx,m[6]/sy,m[10]/sz);\n return out;\n};\n\n// =========================================================================\n// S4a Spec parser — PoseTrack\n// =========================================================================\n\nconst _isNum = (x) => typeof x === 'number' && Number.isFinite(x);\nconst _clamp01 = (x) => x < 0 ? 0 : (x > 1 ? 1 : x);\nconst _clampS = (x, lo, hi) => x < lo ? lo : (x > hi ? hi : x);\n\nfunction _parseVec3(v) {\n if (!v) return null;\n if (ArrayBuffer.isView(v) && v.length >= 3) return [v[0], v[1], v[2]];\n if (Array.isArray(v) && v.length >= 3 && v.every(n => typeof n === 'number')) return [v[0], v[1], v[2]];\n if (typeof v === 'object' && 'x' in v) return [v.x || 0, v.y || 0, v.z || 0];\n return null;\n}\n\n// Euler: unit axis vectors and the six valid intrinsic orderings.\nconst _EULER_AXES = { X:[1,0,0], Y:[0,1,0], Z:[0,0,1] };\nconst _EULER_ORDERS = new Set(['XYZ','XZY','YXZ','YZX','ZXY','ZYX']);\n\n/**\n * Parse any rotation representation into a unit quaternion [x,y,z,w].\n *\n * Accepted forms:\n *\n * [x,y,z,w]\n * Raw quaternion array.\n *\n * { axis:[x,y,z], angle }\n * Axis-angle. Axis need not be unit.\n *\n * { dir:[x,y,z], up?:[x,y,z] }\n * Object orientation — forward direction (−Z) with optional up hint.\n *\n * { eMatrix: mat4 }\n * Extract rotation block from an eye (eye→world) matrix.\n * Column-major Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { mat3: mat3 }\n * Column-major 3×3 rotation matrix — Float32Array(9) or plain Array.\n *\n * { euler:[rx,ry,rz], order?:'YXZ' }\n * Intrinsic Euler angles (radians). Angles are indexed by order position:\n * e[0] rotates around order[0] axis, e[1] around order[1], e[2] around order[2].\n * Supported orders: YXZ (default), XYZ, ZYX, ZXY, XZY, YZX.\n * Note: intrinsic ABC = extrinsic CBA with the same angles — to use\n * extrinsic order ABC, reverse the string and use intrinsic CBA.\n *\n * { from:[x,y,z], to:[x,y,z] }\n * Shortest-arc rotation from one direction onto another.\n * Both vectors are normalised internally.\n * Antiparallel input: 180° rotation around a perpendicular axis.\n *\n * @param {*} v\n * @returns {number[]|null} [x,y,z,w] or null if unparseable.\n */\nfunction _parseQuat(v) {\n if (!v) return null;\n \n // raw [x,y,z,w] — plain array or typed array\n if ((Array.isArray(v) || ArrayBuffer.isView(v)) && v.length === 4) return [v[0], v[1], v[2], v[3]];\n\n // { axis, angle }\n if (v.axis && typeof v.angle === 'number') {\n const a = Array.isArray(v.axis) ? v.axis : [v.axis.x||0, v.axis.y||0, v.axis.z||0];\n return qFromAxisAngle([0,0,0,1], a[0],a[1],a[2], v.angle);\n }\n\n // { dir, up? }\n if (v.dir) {\n const d = Array.isArray(v.dir) ? v.dir : [v.dir.x||0, v.dir.y||0, v.dir.z||0];\n const u = v.up ? (Array.isArray(v.up) ? v.up : [v.up.x||0, v.up.y||0, v.up.z||0]) : null;\n return qFromLookDir([0,0,0,1], d, u);\n }\n\n // { eMatrix } — rotation block from eye (eye→world) matrix, col-major mat4\n if (v.eMatrix != null) {\n const m = (ArrayBuffer.isView(v.eMatrix) || Array.isArray(v.eMatrix))\n ? v.eMatrix : (v.eMatrix.mat4 ?? null);\n if (m && m.length >= 16) return qFromMat4([0,0,0,1], m);\n }\n\n // { mat3 } — column-major 3×3 rotation matrix\n // col0=[m0,m1,m2], col1=[m3,m4,m5], col2=[m6,m7,m8]\n // row-major for qFromRotMat3x3: row0=[m0,m3,m6], row1=[m1,m4,m7], row2=[m2,m5,m8]\n if (v.mat3 != null) {\n const m = v.mat3;\n if ((ArrayBuffer.isView(m) || Array.isArray(m)) && m.length >= 9)\n return qFromRotMat3x3([0,0,0,1], m[0],m[3],m[6], m[1],m[4],m[7], m[2],m[5],m[8]);\n }\n\n // { euler, order? } — intrinsic Euler angles (radians), default order YXZ\n if (v.euler != null) {\n const e = v.euler;\n if (!Array.isArray(e) || e.length < 3) return null;\n const order = (typeof v.order === 'string' && _EULER_ORDERS.has(v.order))\n ? v.order : 'YXZ';\n const q = [0,0,0,1];\n const s = [0,0,0,1]; // scratch — reused each step\n for (let i = 0; i < 3; i++) {\n const ax = _EULER_AXES[order[i]];\n qMul(q, q, qFromAxisAngle(s, ax[0],ax[1],ax[2], e[i]));\n }\n return q;\n }\n\n // { from, to } — shortest-arc rotation from one direction onto another\n if (v.from != null && v.to != null) {\n const f = Array.isArray(v.from) ? v.from : [v.from.x||0, v.from.y||0, v.from.z||0];\n const t = Array.isArray(v.to) ? v.to : [v.to.x||0, v.to.y||0, v.to.z||0];\n const fl = Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]) || 1;\n const tl = Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]) || 1;\n const fx=f[0]/fl, fy=f[1]/fl, fz=f[2]/fl;\n const tx=t[0]/tl, ty=t[1]/tl, tz=t[2]/tl;\n const dot = fx*tx + fy*ty + fz*tz;\n // parallel — identity\n if (dot >= 1 - 1e-8) return [0,0,0,1];\n // antiparallel — 180° around any perpendicular axis\n if (dot <= -1 + 1e-8) {\n // cross(from, X=[1,0,0]) = [0, fz, -fy]\n let px=0, py=fz, pz=-fy;\n let pl = Math.sqrt(px*px+py*py+pz*pz);\n if (pl < 1e-8) {\n // from ≈ ±X; try cross(from, Z=[0,0,1]) = [fy, -fx, 0]\n px=fy; py=-fx; pz=0;\n pl = Math.sqrt(px*px+py*py+pz*pz);\n }\n if (pl < 1e-8) return [0,0,0,1];\n return qFromAxisAngle([0,0,0,1], px/pl,py/pl,pz/pl, Math.PI);\n }\n // general case — axis = normalize(cross(from, to))\n let ax=fy*tz-fz*ty, ay=fz*tx-fx*tz, az=fx*ty-fy*tx;\n const al = Math.sqrt(ax*ax+ay*ay+az*az) || 1;\n return qFromAxisAngle([0,0,0,1], ax/al,ay/al,az/al,\n Math.acos(Math.max(-1, Math.min(1, dot))));\n }\n\n return null;\n}\n\n/**\n * Parse a PoseTrack keyframe spec.\n *\n * Accepted forms:\n *\n * { mMatrix }\n * Decompose a column-major mat4 into TRS via mat4ToTransform.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n * pos from col3, scl from column lengths, rot from normalised rotation block.\n *\n * { pos, rot, scl }\n * Explicit TRS. pos and scl are vec3, rot accepts any form from _parseQuat.\n * All fields are optional — missing pos/scl default to [0,0,0] / [1,1,1],\n * missing rot defaults to identity.\n *\n * @param {Object} spec\n * @returns {{ pos:number[], rot:number[], scl:number[] }|null}\n */\nfunction _parseSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { mMatrix } — full TRS decomposition from model matrix\n if (spec.mMatrix != null) {\n const m = (ArrayBuffer.isView(spec.mMatrix) || Array.isArray(spec.mMatrix))\n ? spec.mMatrix : (spec.mMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n return mat4ToTransform({ pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }, m);\n }\n\n const pos = _parseVec3(spec.pos) || [0,0,0];\n const rot = _parseQuat(spec.rot) || [0,0,0,1];\n const scl = _parseVec3(spec.scl) || [1,1,1];\n return { pos, rot, scl };\n}\n\nfunction _sameTransform(a, b) {\n for (let i=0;i<3;i++) if (a.pos[i]!==b.pos[i]||a.scl[i]!==b.scl[i]) return false;\n for (let i=0;i<4;i++) if (a.rot[i]!==b.rot[i]) return false;\n return true;\n}\n\n// =========================================================================\n// S4b Spec parser — CameraTrack\n// =========================================================================\n\n/**\n * Parse a camera keyframe spec into internal { eye, center, up } form.\n *\n * Accepted forms:\n *\n * { eye, center?, up? }\n * Explicit lookat. center defaults to [0,0,0], up defaults to [0,1,0].\n * Both are normalised/stored as-is. eye must be a vec3.\n *\n * { vMatrix: mat4 }\n * Column-major view matrix (world→eye).\n * eye reconstructed via -R^T·t; center = eye + forward·1; up = [0,1,0].\n * The matrix's up_ortho (col1) is intentionally NOT used as up —\n * passing it to cam.camera() shifts orbitControl's orbit reference.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { eMatrix: mat4 }\n * Column-major eye matrix (eye→world, i.e. inverse view).\n * eye read directly from col3; center = eye + forward·1; up = [0,1,0].\n * Simpler extraction than vMatrix; prefer this form when eMatrix is available.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * @param {Object} spec\n * @returns {{ eye:number[], center:number[], up:number[] }|null}\n */\nfunction _parseCameraSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { vMatrix } — view matrix (world→eye); reconstruct eye via -R^T·t\n if (spec.vMatrix != null) {\n const m = (ArrayBuffer.isView(spec.vMatrix) || Array.isArray(spec.vMatrix))\n ? spec.vMatrix : (spec.vMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const ex = -(m[0]*m[12] + m[4]*m[13] + m[8]*m[14]);\n const ey = -(m[1]*m[12] + m[5]*m[13] + m[9]*m[14]);\n const ez = -(m[2]*m[12] + m[6]*m[13] + m[10]*m[14]);\n const fx=-m[8], fy=-m[9], fz=-m[10];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n return { eye:[ex,ey,ez], center:[ex+fx/fl,ey+fy/fl,ez+fz/fl], up:[0,1,0] };\n }\n\n // { eMatrix } — eye matrix (eye→world); eye = col3, forward = -col2\n if (spec.eMatrix != null) {\n const m = (ArrayBuffer.isView(spec.eMatrix) || Array.isArray(spec.eMatrix))\n ? spec.eMatrix : (spec.eMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const ex=m[12], ey=m[13], ez=m[14];\n const fx=-m[8], fy=-m[9], fz=-m[10];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n return { eye:[ex,ey,ez], center:[ex+fx/fl,ey+fy/fl,ez+fz/fl], up:[0,1,0] };\n }\n\n // { eye, center?, up? } — explicit lookat (eye is a vec3, not a mat4)\n const eye = _parseVec3(spec.eye);\n if (!eye) return null;\n const center = _parseVec3(spec.center) || [0,0,0];\n const upRaw = spec.up ? _parseVec3(spec.up) : null;\n const up = upRaw || [0,1,0];\n const ul = Math.sqrt(up[0]*up[0]+up[1]*up[1]+up[2]*up[2]) || 1;\n return { eye, center, up:[up[0]/ul, up[1]/ul, up[2]/ul] };\n}\n\nfunction _sameCameraKeyframe(a, b) {\n for (let i=0;i<3;i++) {\n if (a.eye[i]!==b.eye[i]) return false;\n if (a.center[i]!==b.center[i]) return false;\n if (a.up[i]!==b.up[i]) return false;\n }\n return true;\n}\n\n// =========================================================================\n// S5 Track — unexported base class (transport machinery only)\n// =========================================================================\n\nclass Track {\n constructor() {\n /** @type {Array} Keyframe array — shape depends on subclass. */\n this.keyframes = [];\n /** Whether playback is active. @type {boolean} */\n this.playing = false;\n /** Loop at boundaries. @type {boolean} */\n this.loop = false;\n /** Ping-pong bounce (takes precedence over loop). @type {boolean} */\n this.pingPong = false;\n /** Frames per segment (≥1). @type {number} */\n this.duration = 30;\n /** Current segment index. @type {number} */\n this.seg = 0;\n /** Frame offset within segment (can be fractional). @type {number} */\n this.f = 0;\n\n // Internal rate — never directly starts/stops playback\n this._rate = 1;\n\n // User-space hooks\n /** @type {Function|null} */ this.onPlay = null;\n /** @type {Function|null} */ this.onEnd = null;\n /** @type {Function|null} */ this.onStop = null;\n\n // Lib-space hooks (set by host layer, e.g. p5 bridge)\n /** @type {Function|null} */ this._onActivate = null;\n /** @type {Function|null} */ this._onDeactivate = null;\n }\n\n /** Playback rate. Assigning never starts/stops playback. @type {number} */\n get rate() { return this._rate; }\n set rate(v) { this._rate = (_isNum(v)) ? v : 1; }\n\n /** Number of interpolatable segments (keyframes.length − 1, min 0). @type {number} */\n get segments() { return Math.max(0, this.keyframes.length - 1); }\n\n /**\n * Start or update playback.\n * @param {number|Object} [rateOrOpts] Numeric rate or options object:\n * { rate, duration, loop, pingPong, onPlay, onEnd, onStop }\n * @returns {Track} this\n */\n play(rateOrOpts) {\n if (this.keyframes.length === 0) return this;\n\n // One keyframe: snap cursor, no animation\n if (this.keyframes.length === 1) {\n this.seg = 0; this.f = 0;\n return this;\n }\n\n if (typeof rateOrOpts === 'number' && Number.isFinite(rateOrOpts)) {\n this._rate = rateOrOpts;\n } else if (rateOrOpts && typeof rateOrOpts === 'object') {\n const o = rateOrOpts;\n if (_isNum(o.duration)) this.duration = Math.max(1, o.duration | 0);\n if ('loop' in o) this.loop = !!o.loop;\n if ('pingPong' in o) this.pingPong = !!o.pingPong;\n if (typeof o.onPlay === 'function') this.onPlay = o.onPlay;\n if (typeof o.onEnd === 'function') this.onEnd = o.onEnd;\n if (typeof o.onStop === 'function') this.onStop = o.onStop;\n if (_isNum(o.rate)) this._rate = o.rate;\n }\n\n const nSeg = this.segments, dur = Math.max(1, this.duration | 0);\n if (this.seg < 0) this.seg = 0;\n if (this.seg >= nSeg) this.seg = nSeg - 1;\n if (this.f < 0) this.f = 0;\n if (this.f > dur) this.f = dur;\n\n const wasPlaying = this.playing;\n this.playing = true;\n if (!wasPlaying) {\n if (typeof this.onPlay === 'function') { try { this.onPlay(this); } catch (_) {} }\n this._onActivate?.();\n }\n return this;\n }\n\n /**\n * Stop playback.\n * @param {boolean} [rewind=false] Seek to origin after stopping.\n * @returns {Track} this\n */\n stop(rewind) {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onDeactivate?.();\n if (rewind && this.keyframes.length > 1) this.seek(this._rate < 0 ? 1 : 0);\n }\n return this;\n }\n\n /**\n * Clear all keyframes and stop.\n * @returns {Track} this\n */\n reset() {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onDeactivate?.();\n }\n this.keyframes.length = 0;\n this.seg = 0; this.f = 0;\n return this;\n }\n\n /**\n * Remove the keyframe at index. Adjusts cursor if needed.\n * @param {number} index\n * @returns {boolean}\n */\n remove(index) {\n if (!_isNum(index)) return false;\n const i = index | 0;\n if (i < 0 || i >= this.keyframes.length) return false;\n this.keyframes.splice(i, 1);\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; }\n else if (this.seg >= nSeg) { this.seg = nSeg - 1; }\n return true;\n }\n\n /**\n * Seek to a normalised position [0,1] across the full path.\n * @param {number} t Normalised time [0, 1].\n * @param {number} [segIndex] Optional segment override.\n * @returns {Track} this\n */\n seek(t, segIndex) {\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; return this; }\n const dur = Math.max(1, this.duration | 0);\n if (_isNum(segIndex)) {\n this.seg = _clampS(segIndex | 0, 0, nSeg - 1);\n this.f = _clamp01(t) * dur;\n } else {\n this._setCursorFromScalar(_clamp01(t) * nSeg * dur);\n }\n return this;\n }\n\n /**\n * Normalised playback position [0,1].\n * @returns {number}\n */\n time() {\n const nSeg = this.segments;\n if (nSeg === 0) return 0;\n const dur = Math.max(1, this.duration | 0);\n return _clamp01((this.seg * dur + this.f) / (nSeg * dur));\n }\n\n /**\n * Snapshot of transport state.\n * @returns {Object}\n */\n info() {\n return {\n keyframes: this.keyframes.length,\n segments: this.segments,\n seg: this.seg,\n f: this.f,\n playing: this.playing,\n loop: this.loop,\n pingPong: this.pingPong,\n rate: this._rate,\n duration: this.duration,\n time: this.segments > 0 ? this.time() : 0\n };\n }\n\n /**\n * Advance cursor by rate frames.\n * Returns true while playing, false when stopping.\n * @returns {boolean}\n */\n tick() {\n if (!this.playing) return false;\n const nSeg = this.segments;\n if (nSeg === 0) {\n this.playing = false; this._onDeactivate?.(); return false;\n }\n if (this._rate === 0) return true;\n\n const dur = Math.max(1, this.duration | 0);\n const total = nSeg * dur;\n const s = _clampS(this.seg * dur + this.f, 0, total);\n const next = s + this._rate;\n\n if (this.pingPong) {\n let pos = next, flips = 0;\n while (pos < 0 || pos > total) {\n if (pos < 0) { pos = -pos; flips++; }\n else { pos = 2 * total - pos; flips++; }\n }\n if (flips & 1) this._rate = -this._rate;\n this._setCursorFromScalar(pos);\n return true;\n }\n\n if (this.loop) {\n this._setCursorFromScalar(((next % total) + total) % total);\n return true;\n }\n\n if (next <= 0) {\n this._setCursorFromScalar(0);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onDeactivate?.();\n return false;\n }\n if (next >= total) {\n this._setCursorFromScalar(total);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onDeactivate?.();\n return false;\n }\n\n this._setCursorFromScalar(next);\n return true;\n }\n\n /** @private */\n _setCursorFromScalar(s) {\n const dur = Math.max(1, this.duration | 0);\n const nSeg = this.segments;\n this.seg = Math.floor(s / dur);\n this.f = s - this.seg * dur;\n if (this.seg >= nSeg) { this.seg = nSeg - 1; this.f = dur; }\n if (this.seg < 0) { this.seg = 0; this.f = 0; }\n }\n}\n\n// =========================================================================\n// S6 PoseTrack\n// =========================================================================\n\n/**\n * Renderer-agnostic TRS keyframe track.\n *\n * Keyframe shape: { pos:[x,y,z], rot:[x,y,z,w], scl:[x,y,z] }\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { mMatrix } — full TRS from model matrix\n * { pos?, rot?, scl? } — direct TRS; all fields optional\n * { pos?, rot: [x,y,z,w] } — explicit quaternion\n * { pos?, rot: { axis, angle } } — axis-angle\n * { pos?, rot: { dir, up? } } — look direction\n * { pos?, rot: { eMatrix: mat4 } } — rotation from eye matrix\n * { pos?, rot: { mat3 } } — column-major 3×3 rotation matrix\n * { pos?, rot: { euler, order? } } — intrinsic Euler angles (default YXZ)\n * { pos?, rot: { from, to } } — shortest-arc between two directions\n * [ spec, spec, ... ] — bulk\n *\n * Missing fields default to: pos → [0,0,0], rot → [0,0,0,1], scl → [1,1,1].\n *\n * eval() writes { pos, rot, scl }:\n * pos — Catmull-Rom (posInterp='catmullrom') or lerp\n * rot — slerp (rotInterp='slerp') or nlerp\n * scl — lerp\n *\n * @example\n * const track = new PoseTrack()\n * track.add({ pos:[0,0,0] }) // identity rot, uniform scl\n * track.add({ pos:[100,0,0], rot: { euler:[0, Math.PI/2, 0] } })\n * track.add({ rot: { axis:[0,1,0], angle: Math.PI } }) // pos defaults to [0,0,0]\n * track.add({ mMatrix: someModelMatrix })\n * track.play({ loop: true })\n * // per frame:\n * track.tick()\n * const out = { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }\n * track.eval(out)\n */\nexport class PoseTrack extends Track {\n constructor() {\n super();\n /**\n * Position interpolation mode.\n * @type {'catmullrom'|'linear'}\n */\n this.posInterp = 'catmullrom';\n /**\n * Rotation interpolation mode.\n * - 'slerp' — constant angular velocity (default)\n * - 'nlerp' — normalised lerp; cheaper, slightly non-constant speed\n * @type {'slerp'|'nlerp'}\n */\n this.rotInterp = 'slerp';\n // Scratch for toMatrix() — avoids hot-path allocations\n this._pos = [0,0,0];\n this._rot = [0,0,0,1];\n this._scl = [1,1,1];\n }\n\n /**\n * Append one or more keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameTransform(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated TRS pose at current cursor.\n * @param {{ pos:number[], rot:number[], scl:number[] }} [out]\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\n eval(out) {\n out = out || { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.pos[0]=k.pos[0]; out.pos[1]=k.pos[1]; out.pos[2]=k.pos[2];\n out.rot[0]=k.rot[0]; out.rot[1]=k.rot[1]; out.rot[2]=k.rot[2]; out.rot[3]=k.rot[3];\n out.scl[0]=k.scl[0]; out.scl[1]=k.scl[1]; out.scl[2]=k.scl[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // pos — Catmull-Rom or lerp\n if (this.posInterp === 'catmullrom') {\n const p0 = seg > 0 ? this.keyframes[seg - 1].pos : k0.pos;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].pos : k1.pos;\n catmullRomVec3(out.pos, p0, k0.pos, k1.pos, p3, t);\n } else {\n lerpVec3(out.pos, k0.pos, k1.pos, t);\n }\n\n // rot — slerp or nlerp\n if (this.rotInterp === 'nlerp') {\n qNlerp(out.rot, k0.rot, k1.rot, t);\n } else {\n qSlerp(out.rot, k0.rot, k1.rot, t);\n }\n\n // scl — lerp\n lerpVec3(out.scl, k0.scl, k1.scl, t);\n\n return out;\n }\n\n /**\n * Evaluate into an existing column-major mat4.\n * @param {Float32Array|number[]} outMat4 16-element array.\n * @returns {Float32Array|number[]} outMat4\n */\n toMatrix(outMat4) {\n const xf = this.eval({ pos: this._pos, rot: this._rot, scl: this._scl });\n return transformToMat4(outMat4, xf);\n }\n}\n\n// =========================================================================\n// S7 CameraTrack\n// =========================================================================\n\n/**\n * Lookat camera keyframe track.\n *\n * Keyframe shape: { eye:[x,y,z], center:[x,y,z], up:[x,y,z] }\n *\n * Each field is independently interpolated — eye and center along their\n * own paths, up nlerped on the unit sphere. This correctly handles cameras\n * that always look at a fixed target (center stays at origin throughout)\n * as well as free-fly paths where center moves independently.\n * \n * Missing fields default to: center → [0,0,0], up → [0,1,0].\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { eye, center?, up? } explicit lookat; center defaults to [0,0,0], up to [0,1,0]\n * { vMatrix: mat4 } view matrix (world→eye); eye reconstructed via -R^T·t\n * { eMatrix: mat4 } eye matrix (eye→world); eye read from col3 directly\n * [ spec, spec, ... ] bulk\n *\n * Note on up for matrix forms:\n * up is always [0,1,0]. The matrix's col1 (up_ortho) is intentionally\n * not used — it differs from the hint [0,1,0] for upright cameras and\n * passing it to cam.camera() shifts orbitControl's orbit reference.\n * Use capturePose() (p5.tree bridge) when the real up hint is needed.\n *\n * eval() writes { eye, center, up }:\n * eye — Catmull-Rom (eyeInterp='catmullrom') or lerp\n * center — Catmull-Rom (centerInterp='catmullrom') or lerp\n * up — nlerp (normalize-after-lerp on unit sphere)\n *\n * @example\n * const track = new CameraTrack()\n * track.add({ eye:[0,0,500] }) // center defaults to [0,0,0]\n * track.add({ eye:[300,-150,0], center:[0,0,0] })\n * track.add({ eMatrix: myEyeMatrix })\n * track.add({ vMatrix: myViewMatrix })\n * track.play({ loop: true })\n * // per frame:\n * track.tick()\n * const out = { eye:[0,0,0], center:[0,0,0], up:[0,1,0] }\n * track.eval(out)\n * cam.camera(out.eye[0],out.eye[1],out.eye[2],\n * out.center[0],out.center[1],out.center[2],\n * out.up[0],out.up[1],out.up[2])\n */\nexport class CameraTrack extends Track {\n constructor() {\n super();\n /**\n * Eye position interpolation mode.\n * @type {'catmullrom'|'linear'}\n */\n this.eyeInterp = 'catmullrom';\n /**\n * Center (lookat target) interpolation mode.\n * 'linear' suits fixed or predictably moving targets.\n * 'catmullrom' gives smoother paths when center is also flying freely.\n * @type {'catmullrom'|'linear'}\n */\n this.centerInterp = 'linear';\n // Scratch for toCamera() — avoids hot-path allocations\n this._eye = [0,0,0];\n this._center = [0,0,0];\n this._up = [0,1,0];\n }\n\n /**\n * Append one or more camera keyframes. Adjacent duplicates are skipped by default.\n *\n * @param {Object|Object[]} spec\n * { eye, center?, up? } or { vMatrix: mat4 } or { eMatrix: mat4 } or an array of either.\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseCameraSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameCameraKeyframe(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseCameraSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated camera pose at current cursor.\n *\n * @param {{ eye:number[], center:number[], up:number[] }} [out]\n * @returns {{ eye:number[], center:number[], up:number[] }} out\n */\n eval(out) {\n out = out || { eye:[0,0,0], center:[0,0,0], up:[0,1,0] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.eye[0]=k.eye[0]; out.eye[1]=k.eye[1]; out.eye[2]=k.eye[2];\n out.center[0]=k.center[0]; out.center[1]=k.center[1]; out.center[2]=k.center[2];\n out.up[0]=k.up[0]; out.up[1]=k.up[1]; out.up[2]=k.up[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // eye — Catmull-Rom or lerp\n if (this.eyeInterp === 'catmullrom') {\n const p0 = seg > 0 ? this.keyframes[seg - 1].eye : k0.eye;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].eye : k1.eye;\n catmullRomVec3(out.eye, p0, k0.eye, k1.eye, p3, t);\n } else {\n lerpVec3(out.eye, k0.eye, k1.eye, t);\n }\n\n // center — Catmull-Rom or lerp (independent lookat target)\n if (this.centerInterp === 'catmullrom') {\n const c0 = seg > 0 ? this.keyframes[seg - 1].center : k0.center;\n const c3 = seg + 2 < n ? this.keyframes[seg + 2].center : k1.center;\n catmullRomVec3(out.center, c0, k0.center, k1.center, c3, t);\n } else {\n lerpVec3(out.center, k0.center, k1.center, t);\n }\n\n // up — nlerp (normalize after lerp; correct for typical near-upright cameras)\n const ux = k0.up[0] + t*(k1.up[0]-k0.up[0]);\n const uy = k0.up[1] + t*(k1.up[1]-k0.up[1]);\n const uz = k0.up[2] + t*(k1.up[2]-k0.up[2]);\n const ul = Math.sqrt(ux*ux+uy*uy+uz*uz) || 1;\n out.up[0]=ux/ul; out.up[1]=uy/ul; out.up[2]=uz/ul;\n\n return out;\n }\n}\n","/**\n * @file Frustum planes and visibility tests — zero allocations.\n * @module tree/visibility\n * @license GPL-3.0-only\n *\n * Planes are a flat Float64Array(24): 6 planes × 4 floats [a, b, c, d].\n * All inputs are scalars. All outputs are INVISIBLE | VISIBLE | SEMIVISIBLE.\n */\n\nimport { INVISIBLE, VISIBLE, SEMIVISIBLE } from './constants.js';\n\n// Plane indices\nexport const PLANE_LEFT = 0, PLANE_RIGHT = 1, PLANE_NEAR = 2,\n PLANE_FAR = 3, PLANE_TOP = 4, PLANE_BOTTOM = 5;\n\n/**\n * Compute 6 frustum planes from camera basis (world space) + projection params.\n * All inputs are scalars — the addon extracts them from the inverse view matrix\n * and projection queries before calling.\n *\n * @param {Float64Array} out 24-float output.\n * @param {number} posX,posY,posZ Camera world position.\n * @param {number} vdX,vdY,vdZ View direction (−Z in eye space, world).\n * @param {number} upX,upY,upZ Camera up.\n * @param {number} rtX,rtY,rtZ Camera right.\n * @param {boolean} ortho true if orthographic.\n * @param {number} near,far,left,right,top,bottom Projection plane values.\n */\nexport function frustumPlanes(\n out,\n posX, posY, posZ,\n vdX, vdY, vdZ,\n upX, upY, upZ,\n rtX, rtY, rtZ,\n ortho,\n near, far, left, right, top, bottom\n) {\n const posViewDir = posX*vdX + posY*vdY + posZ*vdZ;\n const posRight = posX*rtX + posY*rtY + posZ*rtZ;\n const posUp = posX*upX + posY*upY + posZ*upZ;\n\n if (ortho) {\n // Left: normal = −right\n out[0] = -rtX; out[1] = -rtY; out[2] = -rtZ;\n out[3] = -(posRight - left) * -1; // dot(pos - right*left, -right) ... simplified:\n // Actually: d = dot(pointOnPlane, normal)\n // pointOnPlane = pos + right*left (left is negative for standard ortho)\n // normal = -right\n // d = dot(pos + right*left, -right) = -posRight - left\n out[3] = -posRight - left;\n\n // Right: normal = right\n out[4] = rtX; out[5] = rtY; out[6] = rtZ;\n out[7] = posRight + right;\n\n // Top: normal = up\n out[16] = upX; out[17] = upY; out[18] = upZ;\n out[19] = posUp - bottom; // note: p5 top/bottom are swapped in sign convention\n\n // Bottom: normal = -up\n out[20] = -upX; out[21] = -upY; out[22] = -upZ;\n out[23] = -posUp + top;\n } else {\n // Left\n const hfovl = Math.atan2(left, near);\n const shfovl = Math.sin(hfovl), chfovl = Math.cos(hfovl);\n out[0] = vdX*shfovl - rtX*chfovl;\n out[1] = vdY*shfovl - rtY*chfovl;\n out[2] = vdZ*shfovl - rtZ*chfovl;\n out[3] = shfovl*posViewDir - chfovl*posRight;\n\n // Right\n const hfovr = Math.atan2(right, near);\n const shfovr = Math.sin(hfovr), chfovr = Math.cos(hfovr);\n out[4] = -vdX*shfovr + rtX*chfovr;\n out[5] = -vdY*shfovr + rtY*chfovr;\n out[6] = -vdZ*shfovr + rtZ*chfovr;\n out[7] = -shfovr*posViewDir + chfovr*posRight;\n\n // Top\n const fovt = Math.atan2(top, near);\n const sfovt = Math.sin(fovt), cfovt = Math.cos(fovt);\n out[16] = -vdX*sfovt + upX*cfovt;\n out[17] = -vdY*sfovt + upY*cfovt;\n out[18] = -vdZ*sfovt + upZ*cfovt;\n out[19] = -sfovt*posViewDir + cfovt*posUp;\n\n // Bottom\n const fovb = Math.atan2(bottom, near);\n const sfovb = Math.sin(fovb), cfovb = Math.cos(fovb);\n out[20] = vdX*sfovb - upX*cfovb;\n out[21] = vdY*sfovb - upY*cfovb;\n out[22] = vdZ*sfovb - upZ*cfovb;\n out[23] = sfovb*posViewDir - cfovb*posUp;\n }\n\n // Near plane: normal = −viewDir\n out[8] = -vdX; out[9] = -vdY; out[10] = -vdZ;\n out[11] = -posViewDir - near;\n\n // Far plane: normal = viewDir\n out[12] = vdX; out[13] = vdY; out[14] = vdZ;\n out[15] = posViewDir + far;\n\n return out;\n}\n\n/**\n * Signed distance from point to one frustum plane.\n * @param {Float64Array} planes 24-float planes buffer.\n * @param {number} planeIdx 0–5 (LEFT, RIGHT, NEAR, FAR, TOP, BOTTOM).\n * @param {number} px,py,pz Point coordinates.\n * @returns {number}\n */\nexport function distanceToPlane(planes, planeIdx, px, py, pz) {\n const b = planeIdx * 4;\n return planes[b]*px + planes[b+1]*py + planes[b+2]*pz - planes[b+3];\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function pointVisibility(planes, px, py, pz) {\n for (let i = 0; i < 6; i++) {\n if (distanceToPlane(planes, i, px, py, pz) > 0) return INVISIBLE;\n }\n return VISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function sphereVisibility(planes, cx, cy, cz, radius) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const d = distanceToPlane(planes, i, cx, cy, cz);\n if (d > radius) return INVISIBLE;\n if (d > 0 || -d < radius) allIn = false;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function boxVisibility(planes, x0, y0, z0, x1, y1, z1) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const b = i * 4;\n const a = planes[b], bv = planes[b+1], c = planes[b+2], d = planes[b+3];\n let allOut = true;\n for (let corner = 0; corner < 8; corner++) {\n const cx = (corner & 4) ? x0 : x1;\n const cy = (corner & 2) ? y0 : y1;\n const cz = (corner & 1) ? z0 : z1;\n const dist = a*cx + bv*cy + c*cz - d;\n if (dist > 0) { allIn = false; }\n else { allOut = false; }\n }\n if (allOut) return INVISIBLE;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n"],"names":[],"mappings":"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AAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,EAAE,GAAG,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,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AAC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;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CA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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/constants.js","../src/math.js","../src/track.js","../src/visibility.js"],"sourcesContent":["/**\n * @file Core constants — zero dependencies.\n * @module tree/constants\n * @license AGPL-3.0-only\n */\n\n// Coordinate spaces\nexport const WORLD = 'WORLD';\nexport const EYE = 'EYE';\nexport const NDC = 'NDC';\nexport const SCREEN = 'SCREEN';\nexport const MODEL = 'MODEL';\nexport const MATRIX = 'MATRIX';\n\n// NDC Z convention (only difference between backends)\nexport const WEBGL = -1; // z ∈ [−1, 1]\nexport const WEBGPU = 0; // z ∈ [0, 1]\n\n// Visibility results\nexport const INVISIBLE = 0;\nexport const VISIBLE = 1;\nexport const SEMIVISIBLE = 2;\n\n// Basis vectors (frozen plain arrays — duck-typed Vec3)\nexport const ORIGIN = Object.freeze([0, 0, 0]);\nexport const i = Object.freeze([1, 0, 0]);\nexport const j = Object.freeze([0, 1, 0]);\nexport const k = Object.freeze([0, 0, 1]);\nexport const _i = Object.freeze([-1, 0, 0]);\nexport const _j = Object.freeze([0, -1, 0]);\nexport const _k = Object.freeze([0, 0, -1]);\n","/**\n * @file Pure numeric math — mat4, mat3, projection queries, space transforms.\n * @module tree/math\n * @license AGPL-3.0-only\n *\n * CONVENTIONS (all functions in this module follow these):\n *\n * Storage: Column-major Float32Array / ArrayLike<number>.\n * Element [col*4 + row] = M[row, col].\n *\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n *\n * Pipeline: clip = P · V · M · v\n * P = projection (eye → clip)\n * V = view (world → eye)\n * M = model (local → world)\n *\n * PV: All functions expecting a \"pv\" matrix receive P · V.\n * This is what _worldToScreen, _ensurePV, etc. compute.\n *\n * Matrix stack (translate/rotate/scale in p5):\n * Each call post-multiplies: M = M · T, so:\n * translate(tx,ty,tz); rotateY(a); scale(s);\n * yields M = T · R · S. A vertex v is transformed as M·v = T·R·S·v\n * (scaled first, then rotated, then translated — last-written-first-applied).\n *\n * p5 bridge note (for implementors of host layers):\n * p5.Matrix.mult(B) computes B · this (pre-multiply, arg on LEFT).\n * p5 translate/rotate/scale do this · T (post-multiply, GL stack).\n * So p5's pvMatrix() = V.clone().mult(P) = P · V — same as ours.\n * The bridge extracts .mat4 (Float32Array) and feeds it directly,\n * or uses mat4Mul(out, proj, view) for the non-cached path.\n *\n * Every function uses only stack locals for intermediates (zero shared state).\n * Every mutating function writes to a caller-provided `out` and returns `out`.\n * Returns null on degeneracy (singular matrix, etc.).\n */\n\n'use strict';\n\nimport {\n WORLD, EYE, NDC, SCREEN, MATRIX,\n} from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 math\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major, standard math order) */\nexport function mat4Mul(out, A, B) {\n const a0=A[0],a1=A[1],a2=A[2],a3=A[3],\n a4=A[4],a5=A[5],a6=A[6],a7=A[7],\n a8=A[8],a9=A[9],a10=A[10],a11=A[11],\n a12=A[12],a13=A[13],a14=A[14],a15=A[15];\n let b0=B[0],b1=B[1],b2=B[2],b3=B[3];\n out[0]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[1]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[2]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[3]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[4];b1=B[5];b2=B[6];b3=B[7];\n out[4]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[5]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[6]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[7]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[8];b1=B[9];b2=B[10];b3=B[11];\n out[8]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[9]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[10]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[11]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[12];b1=B[13];b2=B[14];b3=B[15];\n out[12]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[13]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[14]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[15]=a3*b0+a7*b1+a11*b2+a15*b3;\n return out;\n}\n\n/** out = inverse(src). Returns null if singular. */\nexport function mat4Invert(out, src) {\n const s=src;\n const a00=s[0],a01=s[1],a02=s[2],a03=s[3],\n a10=s[4],a11=s[5],a12=s[6],a13=s[7],\n a20=s[8],a21=s[9],a22=s[10],a23=s[11],\n a30=s[12],a31=s[13],a32=s[14],a33=s[15];\n const b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,\n b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,\n b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,\n b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,\n b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,\n b10=a21*a33-a23*a31,b11=a22*a33-a23*a32;\n let det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n out[0]=(a11*b11-a12*b10+a13*b09)*det;\n out[1]=(a02*b10-a01*b11-a03*b09)*det;\n out[2]=(a31*b05-a32*b04+a33*b03)*det;\n out[3]=(a22*b04-a21*b05-a23*b03)*det;\n out[4]=(a12*b08-a10*b11-a13*b07)*det;\n out[5]=(a00*b11-a02*b08+a03*b07)*det;\n out[6]=(a32*b02-a30*b05-a33*b01)*det;\n out[7]=(a20*b05-a22*b02+a23*b01)*det;\n out[8]=(a10*b10-a11*b08+a13*b06)*det;\n out[9]=(a01*b08-a00*b10-a03*b06)*det;\n out[10]=(a30*b04-a31*b02+a33*b00)*det;\n out[11]=(a21*b02-a20*b04-a23*b00)*det;\n out[12]=(a11*b07-a10*b09-a12*b06)*det;\n out[13]=(a00*b09-a01*b07+a02*b06)*det;\n out[14]=(a31*b01-a30*b03-a32*b00)*det;\n out[15]=(a20*b03-a21*b01+a22*b00)*det;\n return out;\n}\n\n/** out = transpose(src) */\nexport function mat4Transpose(out, src) {\n if (out === src) {\n let t;\n t=src[1];out[1]=src[4];out[4]=t;\n t=src[2];out[2]=src[8];out[8]=t;\n t=src[3];out[3]=src[12];out[12]=t;\n t=src[6];out[6]=src[9];out[9]=t;\n t=src[7];out[7]=src[13];out[13]=t;\n t=src[11];out[11]=src[14];out[14]=t;\n } else {\n out[0]=src[0];out[1]=src[4];out[2]=src[8];out[3]=src[12];\n out[4]=src[1];out[5]=src[5];out[6]=src[9];out[7]=src[13];\n out[8]=src[2];out[9]=src[6];out[10]=src[10];out[11]=src[14];\n out[12]=src[3];out[13]=src[7];out[14]=src[11];out[15]=src[15];\n }\n return out;\n}\n\n/** out[0..8] = inverseTranspose(upper3×3(src)) (normal matrix) */\nexport function mat3NormalFromMat4(out, src) {\n const a00=src[0],a01=src[1],a02=src[2],\n a10=src[4],a11=src[5],a12=src[6],\n a20=src[8],a21=src[9],a22=src[10];\n const b01=a22*a11-a12*a21,\n b11=-a22*a01+a02*a21,\n b21=a12*a01-a02*a11;\n let det=a00*b01+a10*b11+a20*b21;\n if (Math.abs(det) < 1e-12) { for(let i=0;i<9;i++)out[i]=0; return out; }\n det=1/det;\n out[0]=b01*det;\n out[1]=(-a22*a10+a12*a20)*det;\n out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det;\n out[4]=(a22*a00-a02*a20)*det;\n out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det;\n out[7]=(-a12*a00+a02*a10)*det;\n out[8]=(a11*a00-a01*a10)*det;\n return out;\n}\n\n/** out = mat4 * [x,y,z,1], perspective-divides, writes xyz */\nexport function mat4MulPoint(out, m, x, y, z) {\n const rx = m[0]*x + m[4]*y + m[8]*z + m[12];\n const ry = m[1]*x + m[5]*y + m[9]*z + m[13];\n const rz = m[2]*x + m[6]*y + m[10]*z + m[14];\n const rw = m[3]*x + m[7]*y + m[11]*z + m[15];\n if (rw !== 0 && rw !== 1) {\n out[0] = rx/rw; out[1] = ry/rw; out[2] = rz/rw;\n } else {\n out[0] = rx; out[1] = ry; out[2] = rz;\n }\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Projection queries (read scalars from a projection mat4)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** @returns {boolean} true if orthographic */\nexport function projIsOrtho(p) { return p[15] !== 0; }\n\n/**\n * Near plane distance.\n * @param {ArrayLike<number>} p Projection Mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projNear(p, ndcZMin) {\n return p[15] === 0\n ? p[14] / (p[10] + ndcZMin)\n : (p[14] - ndcZMin) / p[10];\n}\n\n/** Far plane distance (convention-independent: far always maps to NDC z=1). */\nexport function projFar(p) {\n return p[15] === 0\n ? p[14] / (1 + p[10])\n : (p[14] - 1) / p[10];\n}\n\nexport function projLeft(p, ndcZMin) {\n return p[15] === 1\n ? -(1 + p[12]) / p[0]\n : projNear(p, ndcZMin) * (p[8] - 1) / p[0];\n}\n\nexport function projRight(p, ndcZMin) {\n return p[15] === 1\n ? (1 - p[12]) / p[0]\n : projNear(p, ndcZMin) * (1 + p[8]) / p[0];\n}\n\nexport function projTop(p, ndcZMin) {\n return p[15] === 1\n ? (p[13] - 1) / p[5]\n : projNear(p, ndcZMin) * (p[9] - 1) / p[5];\n}\n\nexport function projBottom(p, ndcZMin) {\n return p[15] === 1\n ? (1 + p[13]) / p[5]\n : projNear(p, ndcZMin) * (1 + p[9]) / p[5];\n}\n\n/** Vertical fov (radians, perspective only). */\nexport function projFov(p) {\n return Math.abs(2 * Math.atan(1 / p[5]));\n}\n\n/** Horizontal fov (radians, perspective only). */\nexport function projHfov(p) {\n return Math.abs(2 * Math.atan(1 / p[0]));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices (convenience)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Location / Direction transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Relative transform for locations (points): out = inv(to) · from.\n * @param {ArrayLike<number>} out 16-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if to is singular.\n */\nexport function mat4Location(out, from, to) {\n return mat4Invert(out, to) && mat4Mul(out, out, from);\n}\n\n/**\n * Relative transform for directions (vectors): out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks, ignoring translation.\n * @param {ArrayLike<number>} out 9-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if from is singular.\n */\nexport function mat3Direction(out, from, to) {\n const a00=from[0], a01=from[1], a02=from[2],\n a10=from[4], a11=from[5], a12=from[6],\n a20=from[8], a21=from[9], a22=from[10];\n const b01=a22*a11-a12*a21,\n b11=a12*a20-a22*a10,\n b21=a21*a10-a11*a20;\n let det=a00*b01+a01*b11+a02*b21;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n const i00=b01*det, i01=(a02*a21-a22*a01)*det, i02=(a12*a01-a02*a11)*det;\n const i10=b11*det, i11=(a22*a00-a02*a20)*det, i12=(a02*a10-a12*a00)*det;\n const i20=b21*det, i21=(a01*a20-a21*a00)*det, i22=(a11*a00-a01*a10)*det;\n const t00=to[0], t01=to[1], t02=to[2],\n t10=to[4], t11=to[5], t12=to[6],\n t20=to[8], t21=to[9], t22=to[10];\n const m00=t00*i00+t10*i01+t20*i02, m01=t01*i00+t11*i01+t21*i02, m02=t02*i00+t12*i01+t22*i02;\n const m10=t00*i10+t10*i11+t20*i12, m11=t01*i10+t11*i11+t21*i12, m12=t02*i10+t12*i11+t22*i12;\n const m20=t00*i20+t10*i21+t20*i22, m21=t01*i20+t11*i21+t21*i22, m22=t02*i20+t12*i21+t22*i22;\n out[0]=m00; out[1]=m10; out[2]=m20;\n out[3]=m01; out[4]=m11; out[5]=m21;\n out[6]=m02; out[7]=m12; out[8]=m22;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Space transforms — mapLocation / mapDirection\n// ═══════════════════════════════════════════════════════════════════════════\n//\n// FLAT DISPATCH: every from→to pair is a self-contained leaf.\n// No path calls back into mapLocation/mapDirection (no reentrancy).\n// All intermediates are stack locals (zero shared state).\n//\n// Matrices bag m:\n// {\n// pMatrix: Float32Array(16) — projection (eye → clip)\n// vMatrix: Float32Array(16) — view (world → eye)\n// eMatrix?: Float32Array(16) — eye (eye → world, inv view); lazy\n// pvMatrix?: Float32Array(16) — P · V; lazy\n// ipvMatrix?:Float32Array(16) — inv(P · V); lazy\n// fromFrame?:Float32Array(16) — MATRIX source frame (custom space)\n// toFrameInv?:Float32Array(16) — inv(MATRIX dest frame)\n// }\n//\n\n// ── Location leaf helpers ────────────────────────────────────────────────\n\nfunction _worldToScreen(out, px, py, pz, pv, vp, ndcZMin) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? x/w : x;\n const yi = (w !== 0 && w !== 1) ? y/w : y;\n const zi = (w !== 0 && w !== 1) ? z/w : z;\n const ndcZRange = 1 - ndcZMin;\n out[0] = (xi*0.5+0.5)*vp[2]+vp[0];\n out[1] = (yi*0.5+0.5)*vp[3]+vp[1];\n out[2] = (zi - ndcZMin) / ndcZRange;\n return out;\n}\n\nfunction _screenToWorld(out, px, py, pz, ipv, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n const nx = ((px-vp[0])/vp[2])*2-1;\n const ny = ((py-vp[1])/vp[3])*2-1;\n const nz = pz * ndcZRange + ndcZMin;\n const x = ipv[0]*nx+ipv[4]*ny+ipv[8]*nz+ipv[12];\n const y = ipv[1]*nx+ipv[5]*ny+ipv[9]*nz+ipv[13];\n const z = ipv[2]*nx+ipv[6]*ny+ipv[10]*nz+ipv[14];\n const w = ipv[3]*nx+ipv[7]*ny+ipv[11]*nz+ipv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _ndcToWorld(out, px, py, pz, ipv) {\n const x = ipv[0]*px+ipv[4]*py+ipv[8]*pz+ipv[12];\n const y = ipv[1]*px+ipv[5]*py+ipv[9]*pz+ipv[13];\n const z = ipv[2]*px+ipv[6]*py+ipv[10]*pz+ipv[14];\n const w = ipv[3]*px+ipv[7]*py+ipv[11]*pz+ipv[15];\n out[0]=x/w; out[1]=y/w; out[2]=z/w;\n return out;\n}\n\nfunction _screenToNDC(out, px, py, pz, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = ((px-vp[0])/vp[2])*2-1;\n out[1] = ((py-vp[1])/vp[3])*2-1;\n out[2] = pz * ndcZRange + ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, px, py, pz, vp, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = (px*0.5+0.5)*vp[2]+vp[0];\n out[1] = (py*0.5+0.5)*vp[3]+vp[1];\n out[2] = (pz - ndcZMin) / ndcZRange;\n return out;\n}\n\n// ── _ensurePV — return pvMatrix from bag, computing inline if absent ──────\n\nfunction _ensurePV(m) {\n if (m.pvMatrix) return m.pvMatrix;\n const p = m.pMatrix, v = m.vMatrix;\n return [\n p[0]*v[0]+p[4]*v[1]+p[8]*v[2]+p[12]*v[3],\n p[1]*v[0]+p[5]*v[1]+p[9]*v[2]+p[13]*v[3],\n p[2]*v[0]+p[6]*v[1]+p[10]*v[2]+p[14]*v[3],\n p[3]*v[0]+p[7]*v[1]+p[11]*v[2]+p[15]*v[3],\n p[0]*v[4]+p[4]*v[5]+p[8]*v[6]+p[12]*v[7],\n p[1]*v[4]+p[5]*v[5]+p[9]*v[6]+p[13]*v[7],\n p[2]*v[4]+p[6]*v[5]+p[10]*v[6]+p[14]*v[7],\n p[3]*v[4]+p[7]*v[5]+p[11]*v[6]+p[15]*v[7],\n p[0]*v[8]+p[4]*v[9]+p[8]*v[10]+p[12]*v[11],\n p[1]*v[8]+p[5]*v[9]+p[9]*v[10]+p[13]*v[11],\n p[2]*v[8]+p[6]*v[9]+p[10]*v[10]+p[14]*v[11],\n p[3]*v[8]+p[7]*v[9]+p[11]*v[10]+p[15]*v[11],\n p[0]*v[12]+p[4]*v[13]+p[8]*v[14]+p[12]*v[15],\n p[1]*v[12]+p[5]*v[13]+p[9]*v[14]+p[13]*v[15],\n p[2]*v[12]+p[6]*v[13]+p[10]*v[14]+p[14]*v[15],\n p[3]*v[12]+p[7]*v[13]+p[11]*v[14]+p[15]*v[15],\n ];\n}\n\n/**\n * Map a point between coordinate spaces.\n *\n * @param {Vec3} out Result written here.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space constant.\n * @param {string} to Target space constant.\n * @param {object} m Matrices bag:\n * { pMatrix, vMatrix, eMatrix?, pvMatrix?, ipvMatrix?, fromFrame?, toFrameInv? }\n * @param {Vec4} vp Viewport [x, y, width, height].\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreen(out, px,py,pz, _ensurePV(m), vp, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC)\n return _worldToNDC(out, px,py,pz, _ensurePV(m));\n if (from === NDC && to === WORLD)\n return _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDC(out, px,py,pz, vp, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreen(out, px,py,pz, vp, ndcZMin);\n\n // WORLD ↔ EYE\n if (from === WORLD && to === EYE)\n return mat4MulPoint(out, m.vMatrix, px,py,pz);\n if (from === EYE && to === WORLD)\n return mat4MulPoint(out, m.eMatrix, px,py,pz);\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToScreen(out, ex,ey,ez, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToNDC(out, ex,ey,ez, _ensurePV(m));\n }\n if (from === NDC && to === EYE) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX (custom frame) ↔ WORLD\n if (from === MATRIX && to === WORLD)\n return mat4MulPoint(out, m.fromFrame, px,py,pz);\n if (from === WORLD && to === MATRIX)\n return mat4MulPoint(out, m.toFrameInv, px,py,pz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.vMatrix, fx,fy,fz);\n }\n if (from === EYE && to === MATRIX) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return mat4MulPoint(out, m.toFrameInv, ex,ey,ez);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToScreen(out, fx,fy,fz, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToNDC(out, fx,fy,fz, _ensurePV(m));\n }\n if (from === NDC && to === MATRIX) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.toFrameInv, fx,fy,fz);\n }\n\n // Fallback\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction helpers ────────────────────────────────────────────────────\n\n/** Apply the 3×3 linear part of a mat4 (rotation/scale, no translation). */\nfunction _applyDir(out, mat, dx, dy, dz) {\n out[0]=mat[0]*dx+mat[4]*dy+mat[8]*dz;\n out[1]=mat[1]*dx+mat[5]*dy+mat[9]*dz;\n out[2]=mat[2]*dx+mat[6]*dy+mat[10]*dz;\n return out;\n}\n\nfunction _worldToScreenDir(out, dx, dy, dz, proj, view, vpW, vpH, ndcZMin) {\n const edx = view[0]*dx + view[4]*dy + view[8]*dz;\n const edy = view[1]*dx + view[5]*dy + view[9]*dz;\n const edz = view[2]*dx + view[6]*dy + view[10]*dz;\n const isPersp = proj[15] === 0;\n let sdx = edx, sdy = edy;\n if (isPersp) {\n const zEye = view[14];\n const halfTan = Math.tan(projFov(proj) / 2);\n const k = Math.abs(zEye * halfTan);\n const pixPerUnit = vpH / (2 * k);\n sdx *= pixPerUnit;\n sdy *= pixPerUnit;\n } else {\n const orthoW = Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin));\n sdx *= vpW / orthoW;\n sdy *= vpH / Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin));\n }\n const near = projNear(proj, ndcZMin), far = projFar(proj);\n const depthRange = near - far;\n let sdz;\n if (isPersp) {\n sdz = edz / (depthRange / Math.tan(projFov(proj) / 2));\n } else {\n sdz = edz / (depthRange / (Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin)) / vpW));\n }\n out[0] = sdx; out[1] = sdy; out[2] = sdz;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, view, eye, vpW, vpH, ndcZMin) {\n const isPersp = proj[15] === 0;\n let edx = dx, edy = dy;\n if (isPersp) {\n const zEye = view[14];\n const halfTan = Math.tan(projFov(proj) / 2);\n const k = Math.abs(zEye * halfTan);\n edx *= 2 * k / vpH;\n edy *= 2 * k / vpH;\n } else {\n const orthoW = Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin));\n edx *= orthoW / vpW;\n edy *= Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n const near = projNear(proj, ndcZMin), far = projFar(proj);\n const depthRange = near - far;\n let edz;\n if (isPersp) {\n edz = dz * (depthRange / Math.tan(projFov(proj) / 2));\n } else {\n edz = dz * (depthRange / (Math.abs(projRight(proj, ndcZMin) - projLeft(proj, ndcZMin)) / vpW));\n }\n _applyDir(out, eye, edx, edy, edz);\n return out;\n}\n\nfunction _screenToNDCDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = 2 * dx / vpW;\n out[1] = 2 * dy / vpH;\n out[2] = dz * ndcZRange;\n return out;\n}\n\nfunction _ndcToScreenDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n const ndcZRange = 1 - ndcZMin;\n out[0] = vpW * dx / 2;\n out[1] = vpH * dy / 2;\n out[2] = dz / ndcZRange;\n return out;\n}\n\n/**\n * Map a direction vector between coordinate spaces.\n * Same bag contract as mapLocation.\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW = Math.abs(vp[2]), vpH = Math.abs(vp[3]);\n\n // EYE ↔ WORLD (most common)\n if (from === EYE && to === WORLD) return _applyDir(out, m.eMatrix, dx, dy, dz);\n if (from === WORLD && to === EYE) return _applyDir(out, m.vMatrix, dx, dy, dz);\n\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDCDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC) {\n _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === WORLD) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n }\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === EYE) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX ↔ WORLD\n if (from === MATRIX && to === WORLD) return _applyDir(out, m.fromFrame, dx,dy,dz);\n if (from === WORLD && to === MATRIX) return _applyDir(out, m.toFrameInv, dx,dy,dz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n if (from === EYE && to === MATRIX) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === MATRIX) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.vMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // Fallback\n out[0]=dx; out[1]=dy; out[2]=dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// pixelRatio\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * World-units-per-pixel at a given eye-space Z depth.\n * @param {ArrayLike<number>} proj Projection mat4.\n * @param {number} vpH Viewport height (pixels).\n * @param {number} eyeZ Eye-space Z (negative for in-front-of camera).\n * @param {number} ndcZMin WEBGL or WEBGPU.\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n if (projIsOrtho(proj)) {\n return Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n return 2 * Math.abs(eyeZ) * Math.tan(projFov(proj) / 2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Apply the pick-matrix in-place: proj ← M_pick · proj\n *\n * Zooms the frustum so that pixel (px, py) maps to the full NDC square,\n * making a 1×1 framebuffer render contain exactly that pixel's content.\n * Convention-independent — correct for both perspective and orthographic.\n *\n * M_pick (column-major):\n * [ sx 0 0 tx ] sx = W, sy = H\n * [ 0 sy 0 ty ] cx = NDC X of pixel centre = 2*(px+0.5)/W − 1\n * [ 0 0 1 0 ] cy = NDC Y of pixel centre = 1 − 2*(py+0.5)/H\n * [ 0 0 0 1 ] tx = −cx·W, ty = −cy·H\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query X (CSS pixels).\n * @param {number} py Query Y (CSS pixels).\n * @param {number} W Canvas width (CSS pixels).\n * @param {number} H Canvas height (CSS pixels).\n * @returns {Float32Array} proj (same reference)\n */\nexport function applyPickMatrix(proj, px, py, W, H) {\n const cx = 2 * (px + 0.5) / W - 1;\n const cy = -2 * (py + 0.5) / H + 1; // Y flip: screen-down → NDC-up\n const sx = W;\n const sy = H;\n const tx = -cx * W;\n const ty = -cy * H;\n // P_pick = M_pick * P_orig (rows 2 and 3 are unchanged)\n for (let j = 0; j < 4; j++) {\n const a = proj[j * 4];\n const b = proj[j * 4 + 1];\n const d = proj[j * 4 + 3];\n proj[j * 4] = sx * a + tx * d;\n proj[j * 4 + 1] = sy * b + ty * d;\n }\n return proj;\n}\n","/**\n * @file Pure quaternion/spline math + track state machines.\n * @module tree/track\n * @license AGPL-3.0-only\n *\n * Zero dependencies. No p5, DOM, WebGL, or WebGPU usage.\n *\n * ── Exports ──────────────────────────────────────────────────────────────────\n * Quaternion helpers\n * qSet qCopy qDot qNormalize qNegate qMul qSlerp qNlerp\n * qFromAxisAngle qFromLookDir qFromRotMat3x3 qFromMat4 qToMat4\n * quatToAxisAngle\n * Spline / vector helpers\n * catmullRomVec3 lerpVec3\n * Transform / mat4 helpers\n * transformToMat4 mat4ToTransform\n * Tracks\n * PoseTrack — { pos, rot, scl } TRS keyframes\n * CameraTrack — { eye, center, up } lookat keyframes\n *\n * ── Class hierarchy ───────────────────────────────────────────────────────────\n * Track (unexported, never instantiated directly)\n * └── PoseTrack (exported)\n * └── CameraTrack (exported)\n *\n * Track holds all transport machinery: cursor, play/stop/seek/tick,\n * hooks, rate semantics. Subclasses add only keyframe storage and\n * add() / eval() for their respective data shape.\n *\n * ── Hook architecture ─────────────────────────────────────────────────────────\n * _onActivate / _onDeactivate — lib-space (underscore, set by host layer)\n * Fire on playing transitions: false→true / true→false.\n *\n * onPlay / onEnd / onStop — user-space (public)\n * onPlay : fires in play() on false→true transition.\n * onEnd : fires in tick() at natural boundary (once mode only).\n * onStop : fires in stop() / reset() — explicit deactivation.\n * onEnd and onStop are mutually exclusive per event.\n *\n * Firing order:\n * play() → onPlay → _onActivate\n * tick() → onEnd → _onDeactivate\n * stop() → onStop → _onDeactivate\n * reset() → onStop → _onDeactivate\n *\n * ── Playback semantics (rate) ─────────────────────────────────────────────────\n * rate > 0 forward\n * rate < 0 backward\n * rate === 0 frozen: tick() no-op; playing unchanged\n *\n * play() is the sole setter of playing = true.\n * stop() is the sole setter of playing = false.\n * Assigning rate never starts or stops playback.\n *\n * ── One-keyframe behaviour ────────────────────────────────────────────────────\n * play() with exactly one keyframe snaps eval() to that keyframe without\n * setting playing = true and without firing hooks.\n */\n\n'use strict';\n\n// =========================================================================\n// S1 Quaternion helpers (flat [x, y, z, w], w-last)\n// =========================================================================\n\n/** Set all four components. @returns {number[]} out */\nexport const qSet = (out, x, y, z, w) => {\n out[0] = x; out[1] = y; out[2] = z; out[3] = w; return out;\n};\n\n/** Copy quaternion a into out. @returns {number[]} out */\nexport const qCopy = (out, a) => {\n out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out;\n};\n\n/** Dot product of two quaternions. */\nexport const qDot = (a, b) => a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];\n\n/** Normalise quaternion in-place. @returns {number[]} out */\nexport const qNormalize = (out) => {\n const l = Math.sqrt(out[0]*out[0]+out[1]*out[1]+out[2]*out[2]+out[3]*out[3]) || 1;\n out[0]/=l; out[1]/=l; out[2]/=l; out[3]/=l; return out;\n};\n\n/** Negate quaternion (same rotation, different hemisphere). @returns {number[]} out */\nexport const qNegate = (out, a) => {\n out[0]=-a[0]; out[1]=-a[1]; out[2]=-a[2]; out[3]=-a[3]; return out;\n};\n\n/** Hamilton product out = a * b. @returns {number[]} out */\nexport const qMul = (out, a, b) => {\n const ax=a[0],ay=a[1],az=a[2],aw=a[3], bx=b[0],by=b[1],bz=b[2],bw=b[3];\n out[0]=aw*bx+ax*bw+ay*bz-az*by;\n out[1]=aw*by-ax*bz+ay*bw+az*bx;\n out[2]=aw*bz+ax*by-ay*bx+az*bw;\n out[3]=aw*bw-ax*bx-ay*by-az*bz;\n return out;\n};\n\n/** Spherical linear interpolation. @returns {number[]} out */\nexport const qSlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n let d = a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw;\n if (d < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; d=-d; }\n let f0, f1;\n if (1-d > 1e-10) {\n const th=Math.acos(d), st=Math.sin(th);\n f0=Math.sin((1-t)*th)/st; f1=Math.sin(t*th)/st;\n } else {\n f0=1-t; f1=t;\n }\n out[0]=a[0]*f0+bx*f1; out[1]=a[1]*f0+by*f1;\n out[2]=a[2]*f0+bz*f1; out[3]=a[3]*f0+bw*f1;\n return qNormalize(out);\n};\n\n/**\n * Normalised linear interpolation (nlerp).\n * Cheaper than slerp; slightly non-constant angular velocity.\n * Handles antipodal quats by flipping b when dot < 0.\n * @returns {number[]} out\n */\nexport const qNlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n if (a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; }\n out[0]=a[0]+t*(bx-a[0]); out[1]=a[1]+t*(by-a[1]);\n out[2]=a[2]+t*(bz-a[2]); out[3]=a[3]+t*(bw-a[3]);\n return qNormalize(out);\n};\n\n/**\n * Build a quaternion from axis-angle.\n * @param {number[]} out\n * @param {number} ax @param {number} ay @param {number} az Axis (need not be unit).\n * @param {number} angle Radians.\n * @returns {number[]} out\n */\nexport const qFromAxisAngle = (out, ax, ay, az, angle) => {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const len = Math.sqrt(ax*ax + ay*ay + az*az) || 1;\n out[0] = s * ax / len; out[1] = s * ay / len; out[2] = s * az / len;\n out[3] = Math.cos(half);\n return out;\n};\n\n/**\n * Build a quaternion from a look direction (−Z forward) and optional up (default +Y).\n * @param {number[]} out\n * @param {number[]} dir Forward direction [x,y,z].\n * @param {number[]} [up] Up vector [x,y,z].\n * @returns {number[]} out\n */\nexport const qFromLookDir = (out, dir, up) => {\n let fx=dir[0],fy=dir[1],fz=dir[2];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n fx/=fl; fy/=fl; fz/=fl;\n let ux=up?up[0]:0, uy=up?up[1]:1, uz=up?up[2]:0;\n let rx=uy*fz-uz*fy, ry=uz*fx-ux*fz, rz=ux*fy-uy*fx;\n const rl=Math.sqrt(rx*rx+ry*ry+rz*rz)||1;\n rx/=rl; ry/=rl; rz/=rl;\n ux=fy*rz-fz*ry; uy=fz*rx-fx*rz; uz=fx*ry-fy*rx;\n return qFromRotMat3x3(out, rx,ry,rz, ux,uy,uz, -fx,-fy,-fz);\n};\n\n/**\n * Build a quaternion from a 3×3 rotation matrix (9 row-major scalars).\n * @returns {number[]} out (normalised)\n */\nexport const qFromRotMat3x3 = (out, m00,m01,m02, m10,m11,m12, m20,m21,m22) => {\n const tr = m00+m11+m22;\n if (tr > 0) {\n const s=0.5/Math.sqrt(tr+1);\n out[3]=0.25/s; out[0]=(m21-m12)*s; out[1]=(m02-m20)*s; out[2]=(m10-m01)*s;\n } else if (m00>m11 && m00>m22) {\n const s=2*Math.sqrt(1+m00-m11-m22);\n out[3]=(m21-m12)/s; out[0]=0.25*s; out[1]=(m01+m10)/s; out[2]=(m02+m20)/s;\n } else if (m11>m22) {\n const s=2*Math.sqrt(1+m11-m00-m22);\n out[3]=(m02-m20)/s; out[0]=(m01+m10)/s; out[1]=0.25*s; out[2]=(m12+m21)/s;\n } else {\n const s=2*Math.sqrt(1+m22-m00-m11);\n out[3]=(m10-m01)/s; out[0]=(m02+m20)/s; out[1]=(m12+m21)/s; out[2]=0.25*s;\n }\n return qNormalize(out);\n};\n\n/**\n * Extract a unit quaternion from the upper-left 3×3 of a column-major mat4.\n * @param {number[]} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {number[]} out\n */\nexport const qFromMat4 = (out, m) =>\n qFromRotMat3x3(out, m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n\n/**\n * Write a quaternion into the rotation block of a column-major mat4.\n * Translation and perspective rows/cols are set to identity values.\n * @param {Float32Array|number[]} out 16-element array.\n * @param {number[]} q [x,y,z,w].\n * @returns {Float32Array|number[]} out\n */\nexport const qToMat4 = (out, q) => {\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const x2=x+x,y2=y+y,z2=z+z;\n const xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;\n out[0]=1-(yy+zz); out[1]=xy+wz; out[2]=xz-wy; out[3]=0;\n out[4]=xy-wz; out[5]=1-(xx+zz); out[6]=yz+wx; out[7]=0;\n out[8]=xz+wy; out[9]=yz-wx; out[10]=1-(xx+yy); out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n};\n\n/**\n * Decompose a unit quaternion into { axis:[x,y,z], angle } (radians).\n * @param {number[]} q [x,y,z,w].\n * @param {Object} [out]\n * @returns {{ axis: number[], angle: number }}\n */\nexport const quatToAxisAngle = (q, out) => {\n out = out || {};\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const sinHalf = Math.sqrt(x*x+y*y+z*z);\n if (sinHalf < 1e-8) { out.axis=[0,1,0]; out.angle=0; return out; }\n out.angle = 2*Math.atan2(sinHalf, w);\n out.axis = [x/sinHalf, y/sinHalf, z/sinHalf];\n return out;\n};\n\n// =========================================================================\n// S2 Spline / vector helpers\n// =========================================================================\n\nfunction _dist3(a, b) {\n const dx=a[0]-b[0], dy=a[1]-b[1], dz=a[2]-b[2];\n return Math.sqrt(dx*dx+dy*dy+dz*dz);\n}\n\n/**\n * Centripetal Catmull-Rom interpolation (alpha=0.5, Barry-Goldman).\n * out = interp(p0, p1, p2, p3, t) where t∈[0,1] maps p1→p2.\n * Boundary: p0===p1 or p2===p3 clamps the end tangent.\n * @param {number[]} out 3-element result.\n * @param {number[]} p0 Control point before p1.\n * @param {number[]} p1 Segment start.\n * @param {number[]} p2 Segment end.\n * @param {number[]} p3 Control point after p2.\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const catmullRomVec3 = (out, p0, p1, p2, p3, t) => {\n const alpha = 0.5;\n const dt0 = Math.pow(_dist3(p0,p1), alpha) || 1;\n const dt1 = Math.pow(_dist3(p1,p2), alpha) || 1;\n const dt2 = Math.pow(_dist3(p2,p3), alpha) || 1;\n for (let i = 0; i < 3; i++) {\n const t1_0 = (p1[i]-p0[i])/dt0 - (p2[i]-p0[i])/(dt0+dt1) + (p2[i]-p1[i])/dt1;\n const t2_0 = (p2[i]-p1[i])/dt1 - (p3[i]-p1[i])/(dt1+dt2) + (p3[i]-p2[i])/dt2;\n const m1=t1_0*dt1, m2=t2_0*dt1;\n const a= 2*p1[i]-2*p2[i]+m1+m2;\n const b=-3*p1[i]+3*p2[i]-2*m1-m2;\n out[i] = a*t*t*t + b*t*t + m1*t + p1[i];\n }\n return out;\n};\n\n/**\n * Linear interpolation between two vec3s.\n * @param {number[]} out\n * @param {number[]} a\n * @param {number[]} b\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const lerpVec3 = (out, a, b, t) => {\n out[0]=a[0]+t*(b[0]-a[0]);\n out[1]=a[1]+t*(b[1]-a[1]);\n out[2]=a[2]+t*(b[2]-a[2]);\n return out;\n};\n\n// =========================================================================\n// S3 Transform <-> Mat4\n// =========================================================================\n\n/**\n * Write a TRS transform into a column-major mat4.\n * @param {Float32Array|number[]} out 16-element column-major mat4.\n * @param {{ pos:number[], rot:number[], scl:number[] }} xform\n * @returns {Float32Array|number[]} out\n */\nexport const transformToMat4 = (out, xform) => {\n qToMat4(out, xform.rot);\n const sx=xform.scl[0], sy=xform.scl[1], sz=xform.scl[2];\n out[0]*=sx; out[1]*=sx; out[2]*=sx;\n out[4]*=sy; out[5]*=sy; out[6]*=sy;\n out[8]*=sz; out[9]*=sz; out[10]*=sz;\n out[12]=xform.pos[0]; out[13]=xform.pos[1]; out[14]=xform.pos[2];\n return out;\n};\n\n/**\n * Decompose a column-major mat4 into a TRS transform.\n * Assumes no shear. Scale extracted from column lengths.\n * @param {{ pos:number[], rot:number[], scl:number[] }} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\nexport const mat4ToTransform = (out, m) => {\n out.pos[0]=m[12]; out.pos[1]=m[13]; out.pos[2]=m[14];\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n out.scl[0]=sx; out.scl[1]=sy; out.scl[2]=sz;\n qFromRotMat3x3(out.rot,\n m[0]/sx,m[4]/sy,m[8]/sz,\n m[1]/sx,m[5]/sy,m[9]/sz,\n m[2]/sx,m[6]/sy,m[10]/sz);\n return out;\n};\n\n// =========================================================================\n// S4a Spec parser — PoseTrack\n// =========================================================================\n\nconst _isNum = (x) => typeof x === 'number' && Number.isFinite(x);\nconst _clamp01 = (x) => x < 0 ? 0 : (x > 1 ? 1 : x);\nconst _clampS = (x, lo, hi) => x < lo ? lo : (x > hi ? hi : x);\n\nfunction _parseVec3(v) {\n if (!v) return null;\n if (ArrayBuffer.isView(v) && v.length >= 3) return [v[0], v[1], v[2]];\n if (Array.isArray(v) && v.length >= 3 && v.every(n => typeof n === 'number')) return [v[0], v[1], v[2]];\n if (typeof v === 'object' && 'x' in v) return [v.x || 0, v.y || 0, v.z || 0];\n return null;\n}\n\n// Euler: unit axis vectors and the six valid intrinsic orderings.\nconst _EULER_AXES = { X:[1,0,0], Y:[0,1,0], Z:[0,0,1] };\nconst _EULER_ORDERS = new Set(['XYZ','XZY','YXZ','YZX','ZXY','ZYX']);\n\n/**\n * Parse any rotation representation into a unit quaternion [x,y,z,w].\n *\n * Accepted forms:\n *\n * [x,y,z,w]\n * Raw quaternion array.\n *\n * { axis:[x,y,z], angle }\n * Axis-angle. Axis need not be unit.\n *\n * { dir:[x,y,z], up?:[x,y,z] }\n * Object orientation — forward direction (−Z) with optional up hint.\n *\n * { eMatrix: mat4 }\n * Extract rotation block from an eye (eye→world) matrix.\n * Column-major Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { mat3: mat3 }\n * Column-major 3×3 rotation matrix — Float32Array(9) or plain Array.\n *\n * { euler:[rx,ry,rz], order?:'YXZ' }\n * Intrinsic Euler angles (radians). Angles are indexed by order position:\n * e[0] rotates around order[0] axis, e[1] around order[1], e[2] around order[2].\n * Supported orders: YXZ (default), XYZ, ZYX, ZXY, XZY, YZX.\n * Note: intrinsic ABC = extrinsic CBA with the same angles — to use\n * extrinsic order ABC, reverse the string and use intrinsic CBA.\n *\n * { from:[x,y,z], to:[x,y,z] }\n * Shortest-arc rotation from one direction onto another.\n * Both vectors are normalised internally.\n * Antiparallel input: 180° rotation around a perpendicular axis.\n *\n * @param {*} v\n * @returns {number[]|null} [x,y,z,w] or null if unparseable.\n */\nfunction _parseQuat(v) {\n if (!v) return null;\n \n // raw [x,y,z,w] — plain array or typed array\n if ((Array.isArray(v) || ArrayBuffer.isView(v)) && v.length === 4) return [v[0], v[1], v[2], v[3]];\n\n // { axis, angle }\n if (v.axis && typeof v.angle === 'number') {\n const a = Array.isArray(v.axis) ? v.axis : [v.axis.x||0, v.axis.y||0, v.axis.z||0];\n return qFromAxisAngle([0,0,0,1], a[0],a[1],a[2], v.angle);\n }\n\n // { dir, up? }\n if (v.dir) {\n const d = Array.isArray(v.dir) ? v.dir : [v.dir.x||0, v.dir.y||0, v.dir.z||0];\n const u = v.up ? (Array.isArray(v.up) ? v.up : [v.up.x||0, v.up.y||0, v.up.z||0]) : null;\n return qFromLookDir([0,0,0,1], d, u);\n }\n\n // { eMatrix } — rotation block from eye (eye→world) matrix, col-major mat4\n if (v.eMatrix != null) {\n const m = (ArrayBuffer.isView(v.eMatrix) || Array.isArray(v.eMatrix))\n ? v.eMatrix : (v.eMatrix.mat4 ?? null);\n if (m && m.length >= 16) return qFromMat4([0,0,0,1], m);\n }\n\n // { mat3 } — column-major 3×3 rotation matrix\n // col0=[m0,m1,m2], col1=[m3,m4,m5], col2=[m6,m7,m8]\n // row-major for qFromRotMat3x3: row0=[m0,m3,m6], row1=[m1,m4,m7], row2=[m2,m5,m8]\n if (v.mat3 != null) {\n const m = v.mat3;\n if ((ArrayBuffer.isView(m) || Array.isArray(m)) && m.length >= 9)\n return qFromRotMat3x3([0,0,0,1], m[0],m[3],m[6], m[1],m[4],m[7], m[2],m[5],m[8]);\n }\n\n // { euler, order? } — intrinsic Euler angles (radians), default order YXZ\n if (v.euler != null) {\n const e = v.euler;\n if (!Array.isArray(e) || e.length < 3) return null;\n const order = (typeof v.order === 'string' && _EULER_ORDERS.has(v.order))\n ? v.order : 'YXZ';\n const q = [0,0,0,1];\n const s = [0,0,0,1]; // scratch — reused each step\n for (let i = 0; i < 3; i++) {\n const ax = _EULER_AXES[order[i]];\n qMul(q, q, qFromAxisAngle(s, ax[0],ax[1],ax[2], e[i]));\n }\n return q;\n }\n\n // { from, to } — shortest-arc rotation from one direction onto another\n if (v.from != null && v.to != null) {\n const f = Array.isArray(v.from) ? v.from : [v.from.x||0, v.from.y||0, v.from.z||0];\n const t = Array.isArray(v.to) ? v.to : [v.to.x||0, v.to.y||0, v.to.z||0];\n const fl = Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]) || 1;\n const tl = Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]) || 1;\n const fx=f[0]/fl, fy=f[1]/fl, fz=f[2]/fl;\n const tx=t[0]/tl, ty=t[1]/tl, tz=t[2]/tl;\n const dot = fx*tx + fy*ty + fz*tz;\n // parallel — identity\n if (dot >= 1 - 1e-8) return [0,0,0,1];\n // antiparallel — 180° around any perpendicular axis\n if (dot <= -1 + 1e-8) {\n // cross(from, X=[1,0,0]) = [0, fz, -fy]\n let px=0, py=fz, pz=-fy;\n let pl = Math.sqrt(px*px+py*py+pz*pz);\n if (pl < 1e-8) {\n // from ≈ ±X; try cross(from, Z=[0,0,1]) = [fy, -fx, 0]\n px=fy; py=-fx; pz=0;\n pl = Math.sqrt(px*px+py*py+pz*pz);\n }\n if (pl < 1e-8) return [0,0,0,1];\n return qFromAxisAngle([0,0,0,1], px/pl,py/pl,pz/pl, Math.PI);\n }\n // general case — axis = normalize(cross(from, to))\n let ax=fy*tz-fz*ty, ay=fz*tx-fx*tz, az=fx*ty-fy*tx;\n const al = Math.sqrt(ax*ax+ay*ay+az*az) || 1;\n return qFromAxisAngle([0,0,0,1], ax/al,ay/al,az/al,\n Math.acos(Math.max(-1, Math.min(1, dot))));\n }\n\n return null;\n}\n\n/**\n * Parse a PoseTrack keyframe spec.\n *\n * Accepted forms:\n *\n * { mMatrix }\n * Decompose a column-major mat4 into TRS via mat4ToTransform.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n * pos from col3, scl from column lengths, rot from normalised rotation block.\n *\n * { pos, rot, scl }\n * Explicit TRS. pos and scl are vec3, rot accepts any form from _parseQuat.\n * All fields are optional — missing pos/scl default to [0,0,0] / [1,1,1],\n * missing rot defaults to identity.\n *\n * @param {Object} spec\n * @returns {{ pos:number[], rot:number[], scl:number[] }|null}\n */\nfunction _parseSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { mMatrix } — full TRS decomposition from model matrix\n if (spec.mMatrix != null) {\n const m = (ArrayBuffer.isView(spec.mMatrix) || Array.isArray(spec.mMatrix))\n ? spec.mMatrix : (spec.mMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n return mat4ToTransform({ pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }, m);\n }\n\n const pos = _parseVec3(spec.pos) || [0,0,0];\n const rot = _parseQuat(spec.rot) || [0,0,0,1];\n const scl = _parseVec3(spec.scl) || [1,1,1];\n return { pos, rot, scl };\n}\n\nfunction _sameTransform(a, b) {\n for (let i=0;i<3;i++) if (a.pos[i]!==b.pos[i]||a.scl[i]!==b.scl[i]) return false;\n for (let i=0;i<4;i++) if (a.rot[i]!==b.rot[i]) return false;\n return true;\n}\n\n// =========================================================================\n// S4b Spec parser — CameraTrack\n// =========================================================================\n\n/**\n * Parse a camera keyframe spec into internal { eye, center, up } form.\n *\n * Accepted forms:\n *\n * { eye, center?, up? }\n * Explicit lookat. center defaults to [0,0,0], up defaults to [0,1,0].\n * Both are normalised/stored as-is. eye must be a vec3.\n *\n * { vMatrix: mat4 }\n * Column-major view matrix (world→eye).\n * eye reconstructed via -R^T·t; center = eye + forward·1; up = [0,1,0].\n * The matrix's up_ortho (col1) is intentionally NOT used as up —\n * passing it to cam.camera() shifts orbitControl's orbit reference.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { eMatrix: mat4 }\n * Column-major eye matrix (eye→world, i.e. inverse view).\n * eye read directly from col3; center = eye + forward·1; up = [0,1,0].\n * Simpler extraction than vMatrix; prefer this form when eMatrix is available.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * @param {Object} spec\n * @returns {{ eye:number[], center:number[], up:number[] }|null}\n */\nfunction _parseCameraSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { vMatrix } — view matrix (world→eye); reconstruct eye via -R^T·t\n if (spec.vMatrix != null) {\n const m = (ArrayBuffer.isView(spec.vMatrix) || Array.isArray(spec.vMatrix))\n ? spec.vMatrix : (spec.vMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const ex = -(m[0]*m[12] + m[4]*m[13] + m[8]*m[14]);\n const ey = -(m[1]*m[12] + m[5]*m[13] + m[9]*m[14]);\n const ez = -(m[2]*m[12] + m[6]*m[13] + m[10]*m[14]);\n const fx=-m[8], fy=-m[9], fz=-m[10];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n return { eye:[ex,ey,ez], center:[ex+fx/fl,ey+fy/fl,ez+fz/fl], up:[0,1,0] };\n }\n\n // { eMatrix } — eye matrix (eye→world); eye = col3, forward = -col2\n if (spec.eMatrix != null) {\n const m = (ArrayBuffer.isView(spec.eMatrix) || Array.isArray(spec.eMatrix))\n ? spec.eMatrix : (spec.eMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const ex=m[12], ey=m[13], ez=m[14];\n const fx=-m[8], fy=-m[9], fz=-m[10];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n return { eye:[ex,ey,ez], center:[ex+fx/fl,ey+fy/fl,ez+fz/fl], up:[0,1,0] };\n }\n\n // { eye, center?, up? } — explicit lookat (eye is a vec3, not a mat4)\n const eye = _parseVec3(spec.eye);\n if (!eye) return null;\n const center = _parseVec3(spec.center) || [0,0,0];\n const upRaw = spec.up ? _parseVec3(spec.up) : null;\n const up = upRaw || [0,1,0];\n const ul = Math.sqrt(up[0]*up[0]+up[1]*up[1]+up[2]*up[2]) || 1;\n return { eye, center, up:[up[0]/ul, up[1]/ul, up[2]/ul] };\n}\n\nfunction _sameCameraKeyframe(a, b) {\n for (let i=0;i<3;i++) {\n if (a.eye[i]!==b.eye[i]) return false;\n if (a.center[i]!==b.center[i]) return false;\n if (a.up[i]!==b.up[i]) return false;\n }\n return true;\n}\n\n// =========================================================================\n// S5 Track — unexported base class (transport machinery only)\n// =========================================================================\n\nclass Track {\n constructor() {\n /** @type {Array} Keyframe array — shape depends on subclass. */\n this.keyframes = [];\n /** Whether playback is active. @type {boolean} */\n this.playing = false;\n /** Loop at boundaries. @type {boolean} */\n this.loop = false;\n /** Ping-pong bounce (takes precedence over loop). @type {boolean} */\n this.pingPong = false;\n /** Frames per segment (≥1). @type {number} */\n this.duration = 30;\n /** Current segment index. @type {number} */\n this.seg = 0;\n /** Frame offset within segment (can be fractional). @type {number} */\n this.f = 0;\n\n // Internal rate — never directly starts/stops playback\n this._rate = 1;\n\n // User-space hooks\n /** @type {Function|null} */ this.onPlay = null;\n /** @type {Function|null} */ this.onEnd = null;\n /** @type {Function|null} */ this.onStop = null;\n\n // Lib-space hooks (set by host layer, e.g. p5 bridge)\n /** @type {Function|null} */ this._onActivate = null;\n /** @type {Function|null} */ this._onDeactivate = null;\n }\n\n /** Playback rate. Assigning never starts/stops playback. @type {number} */\n get rate() { return this._rate; }\n set rate(v) { this._rate = (_isNum(v)) ? v : 1; }\n\n /** Number of interpolatable segments (keyframes.length − 1, min 0). @type {number} */\n get segments() { return Math.max(0, this.keyframes.length - 1); }\n\n /**\n * Start or update playback.\n * @param {number|Object} [rateOrOpts] Numeric rate or options object:\n * { rate, duration, loop, pingPong, onPlay, onEnd, onStop }\n * @returns {Track} this\n */\n play(rateOrOpts) {\n if (this.keyframes.length === 0) return this;\n\n // One keyframe: snap cursor, no animation\n if (this.keyframes.length === 1) {\n this.seg = 0; this.f = 0;\n return this;\n }\n\n if (typeof rateOrOpts === 'number' && Number.isFinite(rateOrOpts)) {\n this._rate = rateOrOpts;\n } else if (rateOrOpts && typeof rateOrOpts === 'object') {\n const o = rateOrOpts;\n if (_isNum(o.duration)) this.duration = Math.max(1, o.duration | 0);\n if ('loop' in o) this.loop = !!o.loop;\n if ('pingPong' in o) this.pingPong = !!o.pingPong;\n if (typeof o.onPlay === 'function') this.onPlay = o.onPlay;\n if (typeof o.onEnd === 'function') this.onEnd = o.onEnd;\n if (typeof o.onStop === 'function') this.onStop = o.onStop;\n if (_isNum(o.rate)) this._rate = o.rate;\n }\n\n const nSeg = this.segments, dur = Math.max(1, this.duration | 0);\n if (this.seg < 0) this.seg = 0;\n if (this.seg >= nSeg) this.seg = nSeg - 1;\n if (this.f < 0) this.f = 0;\n if (this.f > dur) this.f = dur;\n\n const wasPlaying = this.playing;\n this.playing = true;\n if (!wasPlaying) {\n if (typeof this.onPlay === 'function') { try { this.onPlay(this); } catch (_) {} }\n this._onActivate?.();\n }\n return this;\n }\n\n /**\n * Stop playback.\n * @param {boolean} [rewind=false] Seek to origin after stopping.\n * @returns {Track} this\n */\n stop(rewind) {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onDeactivate?.();\n if (rewind && this.keyframes.length > 1) this.seek(this._rate < 0 ? 1 : 0);\n }\n return this;\n }\n\n /**\n * Clear all keyframes and stop.\n * @returns {Track} this\n */\n reset() {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onDeactivate?.();\n }\n this.keyframes.length = 0;\n this.seg = 0; this.f = 0;\n return this;\n }\n\n /**\n * Remove the keyframe at index. Adjusts cursor if needed.\n * @param {number} index\n * @returns {boolean}\n */\n remove(index) {\n if (!_isNum(index)) return false;\n const i = index | 0;\n if (i < 0 || i >= this.keyframes.length) return false;\n this.keyframes.splice(i, 1);\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; }\n else if (this.seg >= nSeg) { this.seg = nSeg - 1; }\n return true;\n }\n\n /**\n * Seek to a normalised position [0,1] across the full path.\n * @param {number} t Normalised time [0, 1].\n * @param {number} [segIndex] Optional segment override.\n * @returns {Track} this\n */\n seek(t, segIndex) {\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; return this; }\n const dur = Math.max(1, this.duration | 0);\n if (_isNum(segIndex)) {\n this.seg = _clampS(segIndex | 0, 0, nSeg - 1);\n this.f = _clamp01(t) * dur;\n } else {\n this._setCursorFromScalar(_clamp01(t) * nSeg * dur);\n }\n return this;\n }\n\n /**\n * Normalised playback position [0,1].\n * @returns {number}\n */\n time() {\n const nSeg = this.segments;\n if (nSeg === 0) return 0;\n const dur = Math.max(1, this.duration | 0);\n return _clamp01((this.seg * dur + this.f) / (nSeg * dur));\n }\n\n /**\n * Snapshot of transport state.\n * @returns {Object}\n */\n info() {\n return {\n keyframes: this.keyframes.length,\n segments: this.segments,\n seg: this.seg,\n f: this.f,\n playing: this.playing,\n loop: this.loop,\n pingPong: this.pingPong,\n rate: this._rate,\n duration: this.duration,\n time: this.segments > 0 ? this.time() : 0\n };\n }\n\n /**\n * Advance cursor by rate frames.\n * Returns true while playing, false when stopping.\n * @returns {boolean}\n */\n tick() {\n if (!this.playing) return false;\n const nSeg = this.segments;\n if (nSeg === 0) {\n this.playing = false; this._onDeactivate?.(); return false;\n }\n if (this._rate === 0) return true;\n\n const dur = Math.max(1, this.duration | 0);\n const total = nSeg * dur;\n const s = _clampS(this.seg * dur + this.f, 0, total);\n const next = s + this._rate;\n\n if (this.pingPong) {\n let pos = next, flips = 0;\n while (pos < 0 || pos > total) {\n if (pos < 0) { pos = -pos; flips++; }\n else { pos = 2 * total - pos; flips++; }\n }\n if (flips & 1) this._rate = -this._rate;\n this._setCursorFromScalar(pos);\n return true;\n }\n\n if (this.loop) {\n this._setCursorFromScalar(((next % total) + total) % total);\n return true;\n }\n\n if (next <= 0) {\n this._setCursorFromScalar(0);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onDeactivate?.();\n return false;\n }\n if (next >= total) {\n this._setCursorFromScalar(total);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onDeactivate?.();\n return false;\n }\n\n this._setCursorFromScalar(next);\n return true;\n }\n\n /** @private */\n _setCursorFromScalar(s) {\n const dur = Math.max(1, this.duration | 0);\n const nSeg = this.segments;\n this.seg = Math.floor(s / dur);\n this.f = s - this.seg * dur;\n if (this.seg >= nSeg) { this.seg = nSeg - 1; this.f = dur; }\n if (this.seg < 0) { this.seg = 0; this.f = 0; }\n }\n}\n\n// =========================================================================\n// S6 PoseTrack\n// =========================================================================\n\n/**\n * Renderer-agnostic TRS keyframe track.\n *\n * Keyframe shape: { pos:[x,y,z], rot:[x,y,z,w], scl:[x,y,z] }\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { mMatrix } — full TRS from model matrix\n * { pos?, rot?, scl? } — direct TRS; all fields optional\n * { pos?, rot: [x,y,z,w] } — explicit quaternion\n * { pos?, rot: { axis, angle } } — axis-angle\n * { pos?, rot: { dir, up? } } — look direction\n * { pos?, rot: { eMatrix: mat4 } } — rotation from eye matrix\n * { pos?, rot: { mat3 } } — column-major 3×3 rotation matrix\n * { pos?, rot: { euler, order? } } — intrinsic Euler angles (default YXZ)\n * { pos?, rot: { from, to } } — shortest-arc between two directions\n * [ spec, spec, ... ] — bulk\n *\n * Missing fields default to: pos → [0,0,0], rot → [0,0,0,1], scl → [1,1,1].\n *\n * eval() writes { pos, rot, scl }:\n * pos — Catmull-Rom (posInterp='catmullrom') or lerp\n * rot — slerp (rotInterp='slerp') or nlerp\n * scl — lerp\n *\n * @example\n * const track = new PoseTrack()\n * track.add({ pos:[0,0,0] }) // identity rot, uniform scl\n * track.add({ pos:[100,0,0], rot: { euler:[0, Math.PI/2, 0] } })\n * track.add({ rot: { axis:[0,1,0], angle: Math.PI } }) // pos defaults to [0,0,0]\n * track.add({ mMatrix: someModelMatrix })\n * track.play({ loop: true })\n * // per frame:\n * track.tick()\n * const out = { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }\n * track.eval(out)\n */\nexport class PoseTrack extends Track {\n constructor() {\n super();\n /**\n * Position interpolation mode.\n * @type {'catmullrom'|'linear'}\n */\n this.posInterp = 'catmullrom';\n /**\n * Rotation interpolation mode.\n * - 'slerp' — constant angular velocity (default)\n * - 'nlerp' — normalised lerp; cheaper, slightly non-constant speed\n * @type {'slerp'|'nlerp'}\n */\n this.rotInterp = 'slerp';\n // Scratch for toMatrix() — avoids hot-path allocations\n this._pos = [0,0,0];\n this._rot = [0,0,0,1];\n this._scl = [1,1,1];\n }\n\n /**\n * Append one or more keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameTransform(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated TRS pose at current cursor.\n * @param {{ pos:number[], rot:number[], scl:number[] }} [out]\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\n eval(out) {\n out = out || { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.pos[0]=k.pos[0]; out.pos[1]=k.pos[1]; out.pos[2]=k.pos[2];\n out.rot[0]=k.rot[0]; out.rot[1]=k.rot[1]; out.rot[2]=k.rot[2]; out.rot[3]=k.rot[3];\n out.scl[0]=k.scl[0]; out.scl[1]=k.scl[1]; out.scl[2]=k.scl[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // pos — Catmull-Rom or lerp\n if (this.posInterp === 'catmullrom') {\n const p0 = seg > 0 ? this.keyframes[seg - 1].pos : k0.pos;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].pos : k1.pos;\n catmullRomVec3(out.pos, p0, k0.pos, k1.pos, p3, t);\n } else {\n lerpVec3(out.pos, k0.pos, k1.pos, t);\n }\n\n // rot — slerp or nlerp\n if (this.rotInterp === 'nlerp') {\n qNlerp(out.rot, k0.rot, k1.rot, t);\n } else {\n qSlerp(out.rot, k0.rot, k1.rot, t);\n }\n\n // scl — lerp\n lerpVec3(out.scl, k0.scl, k1.scl, t);\n\n return out;\n }\n\n /**\n * Evaluate into an existing column-major mat4.\n * @param {Float32Array|number[]} outMat4 16-element array.\n * @returns {Float32Array|number[]} outMat4\n */\n toMatrix(outMat4) {\n const xf = this.eval({ pos: this._pos, rot: this._rot, scl: this._scl });\n return transformToMat4(outMat4, xf);\n }\n}\n\n// =========================================================================\n// S7 CameraTrack\n// =========================================================================\n\n/**\n * Lookat camera keyframe track.\n *\n * Keyframe shape: { eye:[x,y,z], center:[x,y,z], up:[x,y,z] }\n *\n * Each field is independently interpolated — eye and center along their\n * own paths, up nlerped on the unit sphere. This correctly handles cameras\n * that always look at a fixed target (center stays at origin throughout)\n * as well as free-fly paths where center moves independently.\n * \n * Missing fields default to: center → [0,0,0], up → [0,1,0].\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { eye, center?, up? } explicit lookat; center defaults to [0,0,0], up to [0,1,0]\n * { vMatrix: mat4 } view matrix (world→eye); eye reconstructed via -R^T·t\n * { eMatrix: mat4 } eye matrix (eye→world); eye read from col3 directly\n * [ spec, spec, ... ] bulk\n *\n * Note on up for matrix forms:\n * up is always [0,1,0]. The matrix's col1 (up_ortho) is intentionally\n * not used — it differs from the hint [0,1,0] for upright cameras and\n * passing it to cam.camera() shifts orbitControl's orbit reference.\n * Use capturePose() (p5.tree bridge) when the real up hint is needed.\n *\n * eval() writes { eye, center, up }:\n * eye — Catmull-Rom (eyeInterp='catmullrom') or lerp\n * center — Catmull-Rom (centerInterp='catmullrom') or lerp\n * up — nlerp (normalize-after-lerp on unit sphere)\n *\n * @example\n * const track = new CameraTrack()\n * track.add({ eye:[0,0,500] }) // center defaults to [0,0,0]\n * track.add({ eye:[300,-150,0], center:[0,0,0] })\n * track.add({ eMatrix: myEyeMatrix })\n * track.add({ vMatrix: myViewMatrix })\n * track.play({ loop: true })\n * // per frame:\n * track.tick()\n * const out = { eye:[0,0,0], center:[0,0,0], up:[0,1,0] }\n * track.eval(out)\n * cam.camera(out.eye[0],out.eye[1],out.eye[2],\n * out.center[0],out.center[1],out.center[2],\n * out.up[0],out.up[1],out.up[2])\n */\nexport class CameraTrack extends Track {\n constructor() {\n super();\n /**\n * Eye position interpolation mode.\n * @type {'catmullrom'|'linear'}\n */\n this.eyeInterp = 'catmullrom';\n /**\n * Center (lookat target) interpolation mode.\n * 'linear' suits fixed or predictably moving targets.\n * 'catmullrom' gives smoother paths when center is also flying freely.\n * @type {'catmullrom'|'linear'}\n */\n this.centerInterp = 'linear';\n // Scratch for toCamera() — avoids hot-path allocations\n this._eye = [0,0,0];\n this._center = [0,0,0];\n this._up = [0,1,0];\n }\n\n /**\n * Append one or more camera keyframes. Adjacent duplicates are skipped by default.\n *\n * @param {Object|Object[]} spec\n * { eye, center?, up? } or { vMatrix: mat4 } or { eMatrix: mat4 } or an array of either.\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseCameraSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameCameraKeyframe(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseCameraSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated camera pose at current cursor.\n *\n * @param {{ eye:number[], center:number[], up:number[] }} [out]\n * @returns {{ eye:number[], center:number[], up:number[] }} out\n */\n eval(out) {\n out = out || { eye:[0,0,0], center:[0,0,0], up:[0,1,0] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.eye[0]=k.eye[0]; out.eye[1]=k.eye[1]; out.eye[2]=k.eye[2];\n out.center[0]=k.center[0]; out.center[1]=k.center[1]; out.center[2]=k.center[2];\n out.up[0]=k.up[0]; out.up[1]=k.up[1]; out.up[2]=k.up[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // eye — Catmull-Rom or lerp\n if (this.eyeInterp === 'catmullrom') {\n const p0 = seg > 0 ? this.keyframes[seg - 1].eye : k0.eye;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].eye : k1.eye;\n catmullRomVec3(out.eye, p0, k0.eye, k1.eye, p3, t);\n } else {\n lerpVec3(out.eye, k0.eye, k1.eye, t);\n }\n\n // center — Catmull-Rom or lerp (independent lookat target)\n if (this.centerInterp === 'catmullrom') {\n const c0 = seg > 0 ? this.keyframes[seg - 1].center : k0.center;\n const c3 = seg + 2 < n ? this.keyframes[seg + 2].center : k1.center;\n catmullRomVec3(out.center, c0, k0.center, k1.center, c3, t);\n } else {\n lerpVec3(out.center, k0.center, k1.center, t);\n }\n\n // up — nlerp (normalize after lerp; correct for typical near-upright cameras)\n const ux = k0.up[0] + t*(k1.up[0]-k0.up[0]);\n const uy = k0.up[1] + t*(k1.up[1]-k0.up[1]);\n const uz = k0.up[2] + t*(k1.up[2]-k0.up[2]);\n const ul = Math.sqrt(ux*ux+uy*uy+uz*uz) || 1;\n out.up[0]=ux/ul; out.up[1]=uy/ul; out.up[2]=uz/ul;\n\n return out;\n }\n}\n","/**\n * @file Frustum planes and visibility tests — zero allocations.\n * @module tree/visibility\n * @license AGPL-3.0-only\n *\n * Planes are a flat Float64Array(24): 6 planes × 4 floats [a, b, c, d].\n * All inputs are scalars. All outputs are INVISIBLE | VISIBLE | SEMIVISIBLE.\n */\n\nimport { INVISIBLE, VISIBLE, SEMIVISIBLE } from './constants.js';\n\n// Plane indices\nexport const PLANE_LEFT = 0, PLANE_RIGHT = 1, PLANE_NEAR = 2,\n PLANE_FAR = 3, PLANE_TOP = 4, PLANE_BOTTOM = 5;\n\n/**\n * Compute 6 frustum planes from camera basis (world space) + projection params.\n * All inputs are scalars — the addon extracts them from the inverse view matrix\n * and projection queries before calling.\n *\n * @param {Float64Array} out 24-float output.\n * @param {number} posX,posY,posZ Camera world position.\n * @param {number} vdX,vdY,vdZ View direction (−Z in eye space, world).\n * @param {number} upX,upY,upZ Camera up.\n * @param {number} rtX,rtY,rtZ Camera right.\n * @param {boolean} ortho true if orthographic.\n * @param {number} near,far,left,right,top,bottom Projection plane values.\n */\nexport function frustumPlanes(\n out,\n posX, posY, posZ,\n vdX, vdY, vdZ,\n upX, upY, upZ,\n rtX, rtY, rtZ,\n ortho,\n near, far, left, right, top, bottom\n) {\n const posViewDir = posX*vdX + posY*vdY + posZ*vdZ;\n const posRight = posX*rtX + posY*rtY + posZ*rtZ;\n const posUp = posX*upX + posY*upY + posZ*upZ;\n\n if (ortho) {\n // Left: normal = −right\n out[0] = -rtX; out[1] = -rtY; out[2] = -rtZ;\n out[3] = -(posRight - left) * -1; // dot(pos - right*left, -right) ... simplified:\n // Actually: d = dot(pointOnPlane, normal)\n // pointOnPlane = pos + right*left (left is negative for standard ortho)\n // normal = -right\n // d = dot(pos + right*left, -right) = -posRight - left\n out[3] = -posRight - left;\n\n // Right: normal = right\n out[4] = rtX; out[5] = rtY; out[6] = rtZ;\n out[7] = posRight + right;\n\n // Top: normal = up\n out[16] = upX; out[17] = upY; out[18] = upZ;\n out[19] = posUp - bottom; // note: p5 top/bottom are swapped in sign convention\n\n // Bottom: normal = -up\n out[20] = -upX; out[21] = -upY; out[22] = -upZ;\n out[23] = -posUp + top;\n } else {\n // Left\n const hfovl = Math.atan2(left, near);\n const shfovl = Math.sin(hfovl), chfovl = Math.cos(hfovl);\n out[0] = vdX*shfovl - rtX*chfovl;\n out[1] = vdY*shfovl - rtY*chfovl;\n out[2] = vdZ*shfovl - rtZ*chfovl;\n out[3] = shfovl*posViewDir - chfovl*posRight;\n\n // Right\n const hfovr = Math.atan2(right, near);\n const shfovr = Math.sin(hfovr), chfovr = Math.cos(hfovr);\n out[4] = -vdX*shfovr + rtX*chfovr;\n out[5] = -vdY*shfovr + rtY*chfovr;\n out[6] = -vdZ*shfovr + rtZ*chfovr;\n out[7] = -shfovr*posViewDir + chfovr*posRight;\n\n // Top\n const fovt = Math.atan2(top, near);\n const sfovt = Math.sin(fovt), cfovt = Math.cos(fovt);\n out[16] = -vdX*sfovt + upX*cfovt;\n out[17] = -vdY*sfovt + upY*cfovt;\n out[18] = -vdZ*sfovt + upZ*cfovt;\n out[19] = -sfovt*posViewDir + cfovt*posUp;\n\n // Bottom\n const fovb = Math.atan2(bottom, near);\n const sfovb = Math.sin(fovb), cfovb = Math.cos(fovb);\n out[20] = vdX*sfovb - upX*cfovb;\n out[21] = vdY*sfovb - upY*cfovb;\n out[22] = vdZ*sfovb - upZ*cfovb;\n out[23] = sfovb*posViewDir - cfovb*posUp;\n }\n\n // Near plane: normal = −viewDir\n out[8] = -vdX; out[9] = -vdY; out[10] = -vdZ;\n out[11] = -posViewDir - near;\n\n // Far plane: normal = viewDir\n out[12] = vdX; out[13] = vdY; out[14] = vdZ;\n out[15] = posViewDir + far;\n\n return out;\n}\n\n/**\n * Signed distance from point to one frustum plane.\n * @param {Float64Array} planes 24-float planes buffer.\n * @param {number} planeIdx 0–5 (LEFT, RIGHT, NEAR, FAR, TOP, BOTTOM).\n * @param {number} px,py,pz Point coordinates.\n * @returns {number}\n */\nexport function distanceToPlane(planes, planeIdx, px, py, pz) {\n const b = planeIdx * 4;\n return planes[b]*px + planes[b+1]*py + planes[b+2]*pz - planes[b+3];\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function pointVisibility(planes, px, py, pz) {\n for (let i = 0; i < 6; i++) {\n if (distanceToPlane(planes, i, px, py, pz) > 0) return INVISIBLE;\n }\n return VISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function sphereVisibility(planes, cx, cy, cz, radius) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const d = distanceToPlane(planes, i, cx, cy, cz);\n if (d > radius) return INVISIBLE;\n if (d > 0 || -d < radius) allIn = false;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function boxVisibility(planes, x0, y0, z0, x1, y1, z1) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const b = i * 4;\n const a = planes[b], bv = planes[b+1], c = planes[b+2], d = planes[b+3];\n let allOut = true;\n for (let corner = 0; corner < 8; corner++) {\n const cx = (corner & 4) ? x0 : x1;\n const cy = (corner & 2) ? y0 : y1;\n const cz = (corner & 1) ? z0 : z1;\n const dist = a*cx + bv*cy + c*cz - d;\n if (dist > 0) { allIn = false; }\n else { allOut = false; }\n }\n if (allOut) return INVISIBLE;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n"],"names":[],"mappings":"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AAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,EAAE,GAAG,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,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACtC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AAC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;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CA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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nakednous/tree",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "tree — pure numeric core. Zero dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"prepublishOnly": "npm run build"
|
|
19
19
|
},
|
|
20
20
|
"author": "Jean Pierre Charalambos <nakednous@gmail.com>",
|
|
21
|
-
"license": "
|
|
21
|
+
"license": "AGPL-3.0-only"
|
|
22
22
|
}
|