@nakednous/tree 0.0.3 → 0.0.4
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 +45 -19
- package/dist/index.js +349 -327
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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 */\n\nimport {\n WORLD, EYE, NDC, SCREEN, MODEL, MATRIX, WEBGL\n} from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 operations\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = identity 4×4 */\nexport function mat4Identity(out) {\n out[0]=1;out[1]=0;out[2]=0;out[3]=0;\n out[4]=0;out[5]=1;out[6]=0;out[7]=0;\n out[8]=0;out[9]=0;out[10]=1;out[11]=0;\n out[12]=0;out[13]=0;out[14]=0;out[15]=1;\n return out;\n}\n\n/** out = a * b (column-major) */\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,b1,b2,b3;\n 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/** out = mat4 * [x,y,z,0] (direction, no translation) */\nexport function mat4MulDir(out, m, x, y, z) {\n out[0] = m[0]*x + m[4]*y + m[8]*z;\n out[1] = m[1]*x + m[5]*y + m[9]*z;\n out[2] = m[2]*x + m[6]*y + m[10]*z;\n return out;\n}\n\n/** out = upper-left 3×3 transposed from mat4 (direction / dMatrix extraction) */\nexport function mat3FromMat4T(out, m) {\n out[0]=m[0]; out[1]=m[4]; out[2]=m[8];\n out[3]=m[1]; out[4]=m[5]; out[5]=m[9];\n out[6]=m[2]; out[7]=m[6]; out[8]=m[10];\n return out;\n}\n\n/** out = mat3 * vec3 */\nexport function mat3MulVec3(out, m, x, y, z) {\n out[0] = m[0]*x + m[3]*y + m[6]*z;\n out[1] = m[1]*x + m[4]*y + m[7]*z;\n out[2] = m[2]*x + m[5]*y + m[8]*z;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Projection queries\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 = proj * view = P · V (standard GL) */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n\n/** out = view * model = V · M (standard GL) */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n/** out = proj * view * model = P · V · M (standard GL) */\nexport function mat4PMV(out, proj, model, view) {\n // MV = view * model (V · M)\n const t0=view[0],t1=view[1],t2=view[2],t3=view[3],\n t4=view[4],t5=view[5],t6=view[6],t7=view[7],\n t8=view[8],t9=view[9],t10=view[10],t11=view[11],\n t12=view[12],t13=view[13],t14=view[14],t15=view[15];\n let b0,b1,b2,b3;\n b0=model[0];b1=model[1];b2=model[2];b3=model[3];\n const mv0=t0*b0+t4*b1+t8*b2+t12*b3, mv1=t1*b0+t5*b1+t9*b2+t13*b3,\n mv2=t2*b0+t6*b1+t10*b2+t14*b3, mv3=t3*b0+t7*b1+t11*b2+t15*b3;\n b0=model[4];b1=model[5];b2=model[6];b3=model[7];\n const mv4=t0*b0+t4*b1+t8*b2+t12*b3, mv5=t1*b0+t5*b1+t9*b2+t13*b3,\n mv6=t2*b0+t6*b1+t10*b2+t14*b3, mv7=t3*b0+t7*b1+t11*b2+t15*b3;\n b0=model[8];b1=model[9];b2=model[10];b3=model[11];\n const mv8=t0*b0+t4*b1+t8*b2+t12*b3, mv9=t1*b0+t5*b1+t9*b2+t13*b3,\n mv10=t2*b0+t6*b1+t10*b2+t14*b3, mv11=t3*b0+t7*b1+t11*b2+t15*b3;\n b0=model[12];b1=model[13];b2=model[14];b3=model[15];\n const mv12=t0*b0+t4*b1+t8*b2+t12*b3, mv13=t1*b0+t5*b1+t9*b2+t13*b3,\n mv14=t2*b0+t6*b1+t10*b2+t14*b3, mv15=t3*b0+t7*b1+t11*b2+t15*b3;\n // PMV = proj * MV (P · V · M)\n const p0=proj[0],p1=proj[1],p2=proj[2],p3=proj[3],\n p4=proj[4],p5=proj[5],p6=proj[6],p7=proj[7],\n p8=proj[8],p9=proj[9],p10=proj[10],p11=proj[11],\n p12=proj[12],p13=proj[13],p14=proj[14],p15=proj[15];\n out[0]=p0*mv0+p4*mv1+p8*mv2+p12*mv3;\n out[1]=p1*mv0+p5*mv1+p9*mv2+p13*mv3;\n out[2]=p2*mv0+p6*mv1+p10*mv2+p14*mv3;\n out[3]=p3*mv0+p7*mv1+p11*mv2+p15*mv3;\n out[4]=p0*mv4+p4*mv5+p8*mv6+p12*mv7;\n out[5]=p1*mv4+p5*mv5+p9*mv6+p13*mv7;\n out[6]=p2*mv4+p6*mv5+p10*mv6+p14*mv7;\n out[7]=p3*mv4+p7*mv5+p11*mv6+p15*mv7;\n out[8]=p0*mv8+p4*mv9+p8*mv10+p12*mv11;\n out[9]=p1*mv8+p5*mv9+p9*mv10+p13*mv11;\n out[10]=p2*mv8+p6*mv9+p10*mv10+p14*mv11;\n out[11]=p3*mv8+p7*mv9+p11*mv10+p15*mv11;\n out[12]=p0*mv12+p4*mv13+p8*mv14+p12*mv15;\n out[13]=p1*mv12+p5*mv13+p9*mv14+p13*mv15;\n out[14]=p2*mv12+p6*mv13+p10*mv14+p14*mv15;\n out[15]=p3*mv12+p7*mv13+p11*mv14+p15*mv15;\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\n// ── Location Transform ───────────────────────────────────────────────────\n\n/**\n * Relative transform for locations (points).\n *\n * out = inv(to) · from\n *\n * Maps a point from the `from` frame into the `to` frame:\n *\n * p_to = out · p_from\n *\n * @param {ArrayLike<number>} out Destination 4×4 matrix (length 16).\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// ── Direction Transform ──────────────────────────────────────────────────\n\n/**\n * Relative transform for directions (vectors).\n *\n * Uses only the upper-left 3×3 blocks, ignoring translation.\n *\n * Corresponds to:\n *\n * out = to₃ · inv(from₃)\n *\n * and maps directions as:\n *\n * d_to = out · d_from\n *\n * Note: the final write is transposed so the result matches this module's\n * matrix layout and multiplication convention.\n *\n * @param {ArrayLike<number>} out Destination 3×3 matrix (length 9).\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;\n const i01=(a02*a21-a22*a01)*det;\n const i02=(a12*a01-a02*a11)*det;\n const i10=b11*det;\n const i11=(a22*a00-a02*a20)*det;\n const i12=(a02*a10-a12*a00)*det;\n const i20=b21*det;\n const i21=(a01*a20-a21*a00)*det;\n const 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;\n const m01=t01*i00+t11*i01+t21*i02;\n const m02=t02*i00+t12*i01+t22*i02;\n const m10=t00*i10+t10*i11+t20*i12;\n const m11=t01*i10+t11*i11+t21*i12;\n const m12=t02*i10+t12*i11+t22*i12;\n const m20=t00*i20+t10*i21+t20*i22;\n const m21=t01*i20+t11*i21+t21*i22;\n const 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// ── 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 if (w === 0) { out[0]=px; out[1]=py; out[2]=pz; return out; }\n const nx=x/w, ny=y/w, nz=z/w;\n const ndcZRange = 1 - ndcZMin;\n out[0] = (nx*0.5+0.5)*vp[2]+vp[0];\n out[1] = (ny*0.5+0.5)*vp[3]+vp[1];\n out[2] = (nz - ndcZMin) / ndcZRange;\n return out;\n}\n\nfunction _screenToWorld(out, px, py, pz, ipv, vp, ndcZMin) {\n const sx=(px-vp[0])/vp[2], sy=(py-vp[1])/vp[3];\n const nx=sx*2-1, ny=sy*2-1;\n const ndcZRange = 1 - ndcZMin;\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 if (w === 0) { out[0]=px; out[1]=py; out[2]=pz; return out; }\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 if (w === 0) { out[0]=px; out[1]=py; out[2]=pz; return out; }\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 if (w === 0) { out[0]=px; out[1]=py; out[2]=pz; return out; }\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// ── Inline PV and IPV helpers (stack-local, for paths that need them) ────\n\nfunction _ensurePV(m) {\n if (m.pv) return m.pv;\n // Inline P · V (standard GL: clip = P · V · world_point)\n const p = m.proj, v = m.view;\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.\n * @param {string} to Target space.\n * @param {object} m Matrices bag { proj, view, eye?, pv?, ipv?, model?,\n * 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.ipv, 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.ipv);\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.view, px,py,pz);\n if (from === EYE && to === WORLD)\n return mat4MulPoint(out, m.eye, px,py,pz);\n\n // EYE ↔ SCREEN (inline: eye→world→screen / screen→world→eye)\n if (from === EYE && to === SCREEN) {\n const ex=m.eye[0]*px+m.eye[4]*py+m.eye[8]*pz+m.eye[12],\n ey=m.eye[1]*px+m.eye[5]*py+m.eye[9]*pz+m.eye[13],\n ez=m.eye[2]*px+m.eye[6]*py+m.eye[10]*pz+m.eye[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.ipv, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.view, wx,wy,wz);\n }\n\n // EYE ↔ NDC (inline: eye→world→ndc / ndc→world→eye)\n if (from === EYE && to === NDC) {\n const ex=m.eye[0]*px+m.eye[4]*py+m.eye[8]*pz+m.eye[12],\n ey=m.eye[1]*px+m.eye[5]*py+m.eye[9]*pz+m.eye[13],\n ez=m.eye[2]*px+m.eye[6]*py+m.eye[10]*pz+m.eye[14];\n return _worldToNDC(out, ex,ey,ez, _ensurePV(m));\n }\n if (from === NDC && to === EYE) {\n _ndcToWorld(out, px,py,pz, m.ipv);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.view, 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 fx=m.fromFrame[0]*px+m.fromFrame[4]*py+m.fromFrame[8]*pz+m.fromFrame[12],\n fy=m.fromFrame[1]*px+m.fromFrame[5]*py+m.fromFrame[9]*pz+m.fromFrame[13],\n fz=m.fromFrame[2]*px+m.fromFrame[6]*py+m.fromFrame[10]*pz+m.fromFrame[14];\n return mat4MulPoint(out, m.view, fx,fy,fz);\n }\n if (from === EYE && to === MATRIX) {\n const ex=m.eye[0]*px+m.eye[4]*py+m.eye[8]*pz+m.eye[12],\n ey=m.eye[1]*px+m.eye[5]*py+m.eye[9]*pz+m.eye[13],\n ez=m.eye[2]*px+m.eye[6]*py+m.eye[10]*pz+m.eye[14];\n return mat4MulPoint(out, m.toFrameInv, ex,ey,ez);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n const fx=m.fromFrame[0]*px+m.fromFrame[4]*py+m.fromFrame[8]*pz+m.fromFrame[12],\n fy=m.fromFrame[1]*px+m.fromFrame[5]*py+m.fromFrame[9]*pz+m.fromFrame[13],\n fz=m.fromFrame[2]*px+m.fromFrame[6]*py+m.fromFrame[10]*pz+m.fromFrame[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.ipv, 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 fx=m.fromFrame[0]*px+m.fromFrame[4]*py+m.fromFrame[8]*pz+m.fromFrame[12],\n fy=m.fromFrame[1]*px+m.fromFrame[5]*py+m.fromFrame[9]*pz+m.fromFrame[13],\n fz=m.fromFrame[2]*px+m.fromFrame[6]*py+m.fromFrame[10]*pz+m.fromFrame[14];\n return _worldToNDC(out, fx,fy,fz, _ensurePV(m));\n }\n if (from === NDC && to === MATRIX) {\n _ndcToWorld(out, px,py,pz, m.ipv);\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 fx=m.fromFrame[0]*px+m.fromFrame[4]*py+m.fromFrame[8]*pz+m.fromFrame[12],\n fy=m.fromFrame[1]*px+m.fromFrame[5]*py+m.fromFrame[9]*pz+m.fromFrame[13],\n fz=m.fromFrame[2]*px+m.fromFrame[6]*py+m.fromFrame[10]*pz+m.fromFrame[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\n/**\n * World→Screen direction. Self-contained: reads proj scalars + view mat.\n * The existing p5.tree code nested _direction and _location calls here;\n * this version inlines all math with stack locals.\n */\nfunction _worldToScreenDir(out, dx, dy, dz, proj, view, vpW, vpH, ndcZMin) {\n // 1. World → Eye direction: R · d (standard column-major mat × vec)\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\n const isPersp = proj[15] === 0;\n let sdx = edx, sdy = edy;\n\n if (isPersp) {\n // Camera-eye Z of world origin (inline WORLD→EYE for [0,0,0]):\n // view * [0,0,0,1] = column 3 of view\n const zEye = view[8]*0 + view[9]*0 + view[10]*0 + view[14]; // = 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 // Ortho: pixels per world unit along X/Y\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\n // Z: map eye-space dz to screen-space dz\n const near = projNear(proj, ndcZMin), far = projFar(proj);\n const depthRange = near - far;\n const ndcZRange = 1 - ndcZMin;\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\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\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\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\n // Eye → World direction (dMatrix = upper-left 3×3 of eye = inv(view))\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 between coordinate spaces.\n * Same flat-dispatch 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: dMatrix operation)\n if (from === EYE && to === WORLD) return _applyDir(out, m.eye, dx, dy, dz);\n if (from === WORLD && to === EYE) return _applyDir(out, m.view, dx, dy, dz);\n\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreenDir(out, dx,dy,dz, m.proj, m.view, vpW, vpH, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorldDir(out, dx,dy,dz, m.proj, m.view, m.eye, 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 (chain: world→screen→ndc / ndc→screen→world)\n if (from === WORLD && to === NDC) {\n _worldToScreenDir(out, dx,dy,dz, m.proj, m.view, 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.proj, m.view, m.eye, vpW, vpH, ndcZMin);\n }\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n // eye→world→screen\n _applyDir(out, m.eye, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.proj, m.view, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorldDir(out, dx,dy,dz, m.proj, m.view, m.eye, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.view, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n _applyDir(out, m.eye, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.proj, m.view, 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.proj, m.view, m.eye, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.view, 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.view, wx,wy,wz);\n }\n if (from === EYE && to === MATRIX) {\n _applyDir(out, m.eye, 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.proj, m.view, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorldDir(out, dx,dy,dz, m.proj, m.view, m.eye, 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.proj, m.view, 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.proj, m.view, m.eye, 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 of the point (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 * @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 (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\nfunction _parseQuat(v) {\n if (!v) return null;\n if (Array.isArray(v) && v.length === 4 && v.every(n => typeof n === 'number')) return [v[0],v[1],v[2],v[3]];\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 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 // { view } — column-major mat4 or {mat4} wrapper\n if (v.view != null) {\n const m = (ArrayBuffer.isView(v.view) || Array.isArray(v.view)) ? v.view : (v.view.mat4 ?? null);\n if (m && m.length === 16) return qFromMat4([0,0,0,1], m);\n }\n // { eye, center, up? } — lookat shorthand matching CameraTrack input\n if (v.eye && v.center) {\n const eye = _parseVec3(v.eye), ctr = _parseVec3(v.center);\n if (eye && ctr) {\n const up = (v.up ? _parseVec3(v.up) : null) || [0,1,0];\n let fx=ctr[0]-eye[0], fy=ctr[1]-eye[1], fz=ctr[2]-eye[2];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1; fx/=fl; fy/=fl; fz/=fl;\n let rx=fy*up[2]-fz*up[1], ry=fz*up[0]-fx*up[2], rz=fx*up[1]-fy*up[0];\n const rl=Math.sqrt(rx*rx+ry*ry+rz*rz)||1; rx/=rl; ry/=rl; rz/=rl;\n const ux=ry*fz-rz*fy, uy=rz*fx-rx*fz, uz=rx*fy-ry*fx;\n return qFromRotMat3x3([0,0,0,1], rx,ux,-fx, ry,uy,-fy, rz,uz,-fz);\n }\n }\n return null;\n}\n\nfunction _parseSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\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. up defaults to [0,1,0] and is normalised on storage.\n *\n * { view: mat4 }\n * Column-major view matrix (Float32Array(16), plain Array, or {mat4} wrapper).\n * eye is extracted from the matrix translation block.\n * center = eye + forward * 1 (unit distance — sufficient for interpolation).\n * up defaults to [0,1,0]. The matrix's up_ortho (col1) is intentionally\n * NOT extracted; using up_ortho as the hint causes orbitControl drift.\n * If you need to preserve roll from a rolled camera, pass the live\n * camera's up hint via capturePose() instead of using { view }.\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 // { view } form\n if (spec.view != null) {\n const m = (ArrayBuffer.isView(spec.view) || Array.isArray(spec.view))\n ? spec.view\n : (spec.view.mat4 ?? null);\n if (!m || m.length < 16) return null;\n // Extract eye position: eye = -R^T * t\n // Column-major view mat: col0=right, col1=up_ortho, col2=-fwd, col3=translation\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 // forward = -col2 = [-m[8], -m[9], -m[10]]\n const fx=-m[8], fy=-m[9], fz=-m[10];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n // center = eye + normalized_fwd * 1\n const cx=ex+fx/fl, cy=ey+fy/fl, cz=ez+fz/fl;\n return { eye:[ex,ey,ez], center:[cx,cy,cz], up:[0,1,0] };\n }\n\n // { eye, center, up? } form\n const eye = _parseVec3(spec.eye);\n const center = _parseVec3(spec.center);\n if (!eye || !center) return null;\n\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 * { pos, rot, scl } direct TRS\n * { pos, rot: [x,y,z,w] } explicit quaternion\n * { pos, rot: { axis, angle } } axis-angle\n * { pos, rot: { dir, up? } } look direction (object orientation)\n * { pos, rot: { view: mat4 } } from view matrix rotation block\n * { pos, rot: { eye, center, up? } } lookat shorthand\n * [ spec, spec, ... ] bulk\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], rot:[0,0,0,1], scl:[1,1,1] })\n * track.add({ pos:[100,0,0], rot:[0,0,0,1], scl:[1,1,1] })\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 * add() accepts individual specs or a bulk array of specs:\n * { eye, center, up? } explicit lookat; up defaults to [0,1,0]\n * { view: mat4 } view matrix; eye extracted, center = eye+fwd*1,\n * up = [0,1,0] (safe default — see note below)\n * [ spec, spec, ... ] bulk\n *\n * Note on up for { view: mat4 }:\n * The view matrix's col1 (up_ortho) is intentionally not used as up.\n * For upright cameras up_ortho differs from the hint [0,1,0], and\n * passing it to cam.camera() would shift orbitControl's orbit reference.\n * Use capturePose() when you need to preserve the real up hint.\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:[0,0,0] })\n * track.add({ eye:[300,-150,0], center:[0,0,0] })\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 { view: 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":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACY,MAAC,KAAK,IAAI;AACV,MAAC,GAAG,MAAM;AACV,MAAC,GAAG,MAAM;AACV,MAAC,MAAM,GAAG;AACV,MAAC,KAAK,IAAI;AACV,MAAC,MAAM,GAAG;;AAEtB;AACY,MAAC,KAAK,IAAI,GAAG;AACb,MAAC,MAAM,IAAI,EAAE;;AAEzB;AACY,MAAC,SAAS,KAAK;AACf,MAAC,OAAO,OAAO;AACf,MAAC,WAAW,GAAG;;AAE3B;AACY,MAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjC,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AC9B1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAMA;AACA;AACA;;AAEA;AACO,SAAS,YAAY,CAAC,GAAG,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,EAAE,OAAO,GAAG;AACZ;;AAEA;AACO,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACnC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;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,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;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,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,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,OAAO,GAAG;AACZ;;AAEA;AACO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;AACrC,EAAE,MAAM,CAAC,CAAC,GAAG;AACb,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAA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AC,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,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,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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 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, MODEL, MATRIX,\n WEBGL, WEBGPU,\n INVISIBLE, VISIBLE, SEMIVISIBLE,\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 * @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 (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]\n if (Array.isArray(v) && v.length === 4 && v.every(n => typeof n === 'number'))\n 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. up defaults to [0,1,0] and is normalised on storage.\n * Note: eye here is a vec3 — distinguished from { eMatrix } by length.\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 const center = _parseVec3(spec.center);\n if (!eye || !center) return null;\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\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 * 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], rot:[0,0,0,1], scl:[1,1,1] })\n * track.add({ pos:[100,0,0], rot: { euler:[0, Math.PI/2, 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 * add() accepts individual specs or a bulk array of specs:\n *\n * { eye, center, up? } explicit lookat; up defaults 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:[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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"}
|