p5.tree 0.0.1
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/LICENSE +661 -0
- package/README.md +307 -0
- package/dist/p5.tree.esm.js +2751 -0
- package/dist/p5.tree.esm.js.map +1 -0
- package/dist/p5.tree.js +2754 -0
- package/dist/p5.tree.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p5.tree.js","sources":["../src/p5.tree.js"],"sourcesContent":["/**\n * @file Adds Tree rendering functions to the p5 prototype.\n * @version 0.0.1\n * @author JP Charalambos\n * @license GPL-3.0-only\n *\n * @description\n * A p5.js WEBGL addon for shader development and space transformations.\n * \n * Camera path recording/playback section.\n *\n * Requires WEBGL (p5.Camera).\n *\n * Camera API:\n * camera.path : p5.Camera[]\n * camera.addPath(...)\n * camera.playPath(...)\n * camera.stopPath(...)\n * camera.resetPath(...)\n * camera.seekPath(...)\n *\n * p5 wrappers (same names) forward to current active camera.\n *\n * Uses p5 lifecicle predraw hook to tick playback automatically.\n *\n * Projection safety:\n * p5.Camera.slerp requires that all cameras use the same projection.\n * We enforce this by comparing projMatrix.mat4 signatures.\n */\n\n/*\n TODO's\n i. beginHUD / endHUD text() issue (seems like an upstream matter)\n ii. treeLocation & treeDisplacement stress test\n iii. Port p5.treegl parseGeometry?\n iii. Shader & effects handling\n iv. p5.strands interface\n */\n\n'use strict';\n\nimport p5 from 'p5';\n\np5.registerAddon((p5, fn, lifecycles) => {\n // --- namespace (module shelf) ---\n p5.Tree ||= {};\n \n const CONST = value => ({ value, writable: false, enumerable: true, configurable: false });\n \n Object.defineProperties(p5.Tree, {\n VERSION: CONST('0.0.1'),\n \n NONE: CONST(0),\n \n // Spaces\n WORLD: CONST('WORLD'),\n EYE: CONST('EYE'),\n NDC: CONST('NDC'),\n SCREEN: CONST('SCREEN'),\n MODEL: CONST('MODEL'),\n \n // Points and vectors\n ORIGIN: CONST(Object.freeze([0, 0, 0])),\n \n i: CONST(Object.freeze([1, 0, 0])),\n j: CONST(Object.freeze([0, 1, 0])),\n k: CONST(Object.freeze([0, 0, 1])),\n \n _i: CONST(Object.freeze([-1, 0, 0])),\n _j: CONST(Object.freeze([0, -1, 0])),\n _k: CONST(Object.freeze([0, 0, -1])),\n \n // Axes / grid bits & styles\n X: CONST(1 << 0),\n _X: CONST(1 << 1),\n Y: CONST(1 << 2),\n _Y: CONST(1 << 3),\n Z: CONST(1 << 4),\n _Z: CONST(1 << 5),\n LABELS: CONST(1 << 6),\n \n DOTS: CONST(0),\n SOLID: CONST(1),\n \n // bullsEye\n CIRCLE: CONST(0),\n SQUARE: CONST(1),\n \n // View frustum bits\n NEAR: CONST(1 << 0),\n FAR: CONST(1 << 1),\n LEFT: CONST(1 << 2),\n RIGHT: CONST(1 << 3),\n BOTTOM: CONST(1 << 4),\n TOP: CONST(1 << 5),\n BODY: CONST(1 << 6),\n APEX: CONST(1 << 7),\n \n // Visibility\n INVISIBLE: CONST(0),\n VISIBLE: CONST(1),\n SEMIVISIBLE: CONST(2),\n });\n \n // ---------------------------------------------------------------------------\n // Matrix queries (p5.treegl -> p5.tree, p5-v2)\n // Rely on p5-v2, minimal safeties, cache-friendly.\n // ---------------------------------------------------------------------------\n\n /**\n * @private\n * Returns the WEBGL renderer or undefined.\n * @param {p5} pInst\n * @returns {p5.RendererGL|undefined}\n */\n const _rendererGL = function (pInst) {\n const r = pInst._renderer;\n return r instanceof p5.RendererGL ? r : undefined;\n };\n\n // ---------------------------------------------------------------------------\n // p5.Matrix operations (immutable)\n // ---------------------------------------------------------------------------\n \n /**\n * @private\n * Returns the inverse of a matrix (immutable).\n * p5-v2: invert(a) inverts 'a' into 'this' (gl-matrix style).\n * @param {p5.Matrix} matrix\n * @returns {p5.Matrix}\n */\n const _invert = function (matrix) {\n const out = matrix.clone();\n out.invert(matrix);\n return out;\n };\n\n /**\n * @private\n * Returns the transpose of a matrix (immutable).\n * Fast-path for mat4 / mat3 to match treegl semantics.\n * @param {p5.Matrix} matrix\n * @returns {p5.Matrix}\n */\n const _transpose = function (matrix) {\n const m4 = matrix.mat4;\n if (m4) {\n return new p5.Matrix([\n m4[0], m4[4], m4[8], m4[12],\n m4[1], m4[5], m4[9], m4[13],\n m4[2], m4[6], m4[10], m4[14],\n m4[3], m4[7], m4[11], m4[15]\n ]);\n }\n const m3 = matrix.mat3;\n if (m3) {\n return new p5.Matrix([\n m3[0], m3[3], m3[6],\n m3[1], m3[4], m3[7],\n m3[2], m3[5], m3[8]\n ]);\n }\n };\n \n p5.Matrix.prototype.mult4 = function (vector) {\n return new p5.Vector(...this._mult4([vector.x, vector.y, vector.z, 1]));\n };\n \n p5.Matrix.prototype._mult4 = function (vec4) {\n if (this.mat4 === undefined) {\n console.error('_mult4 only works with mat4');\n return;\n }\n return [\n this.mat4[0] * vec4[0] + this.mat4[4] * vec4[1] + this.mat4[8] * vec4[2] + this.mat4[12] * vec4[3],\n this.mat4[1] * vec4[0] + this.mat4[5] * vec4[1] + this.mat4[9] * vec4[2] + this.mat4[13] * vec4[3],\n this.mat4[2] * vec4[0] + this.mat4[6] * vec4[1] + this.mat4[10] * vec4[2] + this.mat4[14] * vec4[3],\n this.mat4[3] * vec4[0] + this.mat4[7] * vec4[1] + this.mat4[11] * vec4[2] + this.mat4[15] * vec4[3]\n ];\n };\n\n /**\n * Returns the transpose of a matrix (immutable).\n * @param {p5.Matrix} matrix\n * @returns {p5.Matrix}\n */\n fn.tMatrix = function (matrix) {\n return _transpose(matrix);\n };\n\n /**\n * Returns the inverse of a matrix.\n * @param {p5.Matrix} matrix\n * @returns {p5.Matrix}\n */\n fn.iMatrix = function (matrix) {\n return _invert(matrix);\n };\n\n /**\n * Returns A * B without mutating A (immutable).\n * @param {p5.Matrix} a\n * @param {p5.Matrix} b\n * @returns {p5.Matrix}\n */\n fn.axbMatrix = function (a, b) {\n return a.clone().mult(b);\n };\n \n /**\n * Creates a new p5.Matrix.\n * (Wrapper for `new p5.Matrix(...args)`.)\n *\n * - `createMatrix()` → identity 4×4\n * - `createMatrix(n)` → identity n×n (typically 3 or 4)\n * - `createMatrix(coeffs)` → matrix from coefficients (length 9 or 16)\n *\n * @param {...(number|Array<number>)} [args] Arguments forwarded to the p5.Matrix constructor.\n * @returns {p5.Matrix}\n */\n fn.createMatrix = (...args) => new p5.Matrix(...args);\n\n // ---------------------------------------------------------------------------\n // Matrix queries (immutable, cache-friendly)\n // ---------------------------------------------------------------------------\n\n /**\n * Returns the current projection matrix (immutable copy).\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.pMatrix = function () {\n return this.states.uPMatrix.clone();\n };\n\n /**\n * Returns the current projection matrix (immutable copy).\n * Requires WEBGL.\n * @returns {p5.Matrix}\n */\n fn.pMatrix = function () {\n return _rendererGL(this).pMatrix();\n };\n\n /**\n * Returns the current model matrix (immutable copy).\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.mMatrix = function () {\n return this.states.uModelMatrix.clone();\n };\n\n /**\n * Returns the current model matrix (immutable copy).\n * Requires WEBGL.\n * @returns {p5.Matrix}\n */\n fn.mMatrix = function () {\n return _rendererGL(this).mMatrix();\n };\n\n /**\n * Returns the view matrix (world -> camera) for this camera (immutable copy).\n * @returns {p5.Matrix}\n */\n p5.Camera.prototype.vMatrix = function () {\n return this.cameraMatrix.clone();\n };\n\n /**\n * Returns the eye matrix (camera -> world) for this camera (immutable).\n * @returns {p5.Matrix}\n */\n p5.Camera.prototype.eMatrix = function () {\n return _invert(this.cameraMatrix);\n };\n\n /**\n * Returns the current view matrix (world -> camera) (immutable copy).\n * Prefers the renderer cached view matrix when available.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.vMatrix = function () {\n return (this.states.uViewMatrix || this.states.curCamera.cameraMatrix).clone();\n };\n\n /**\n * Returns the current view matrix (world -> camera) (immutable copy).\n * Requires WEBGL.\n * @returns {p5.Matrix}\n */\n fn.vMatrix = function () {\n return _rendererGL(this).vMatrix();\n };\n\n /**\n * Returns the current eye matrix (camera -> world) (immutable).\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.eMatrix = function () {\n return _invert(this.states.uViewMatrix || this.states.curCamera.cameraMatrix);\n };\n\n /**\n * Returns the current eye matrix (camera -> world) (immutable).\n * Requires WEBGL.\n * @returns {p5.Matrix}\n */\n fn.eMatrix = function () {\n return _rendererGL(this).eMatrix();\n };\n\n /**\n * lMatrix({ from, to }):\n * Location transform (mat4) mapping points from `from` space to `to` space.\n * treegl semantics: to^-1 * from.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.from=new p5.Matrix()] Source frame matrix.\n * @param {p5.Matrix} [opts.to=this.eMatrix()] Target frame matrix.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.lMatrix = function ({\n from = new p5.Matrix(4),\n to = this.eMatrix()\n } = {}) {\n return _invert(to).mult(from);\n };\n\n /**\n * lMatrix({ from, to }):\n * Location transform (mat4) mapping points from `from` space to `to` space.\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.from]\n * @param {p5.Matrix} [opts.to]\n * @returns {p5.Matrix}\n */\n fn.lMatrix = function (opts = {}) {\n return _rendererGL(this).lMatrix(opts);\n };\n\n /**\n * dMatrix({ from, to, matrix }):\n * Direction transform (mat3) mapping vectors from `from` space to `to` space.\n * Translation ignored. treegl semantics: linear_part(from^-1 * to).\n * If `matrix` (mat4) is provided, uses linear_part(matrix).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.from=new p5.Matrix()] Source frame matrix.\n * @param {p5.Matrix} [opts.to=this.eMatrix()] Target frame matrix.\n * @param {p5.Matrix} [opts.matrix] Precomputed mat4 override.\n * @returns {p5.Matrix} mat3\n */\n p5.RendererGL.prototype.dMatrix = function ({\n from = new p5.Matrix(4),\n to = this.eMatrix(),\n matrix\n } = {}) {\n const m = (matrix || _invert(from).mult(to));\n const a = m.mat4 || m.matrix; // v2: mat4 getter if 4x4, else fallback\n // Note: this is the same \"mat4 -> mat3 transpose\" as treegl (baked into indices)\n return new p5.Matrix([\n a[0], a[4], a[8],\n a[1], a[5], a[9],\n a[2], a[6], a[10]\n ]);\n };\n\n /**\n * dMatrix({ from, to, matrix }):\n * Direction transform (mat3) mapping vectors from `from` space to `to` space.\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.from]\n * @param {p5.Matrix} [opts.to]\n * @param {p5.Matrix} [opts.matrix]\n * @returns {p5.Matrix} mat3\n */\n fn.dMatrix = function (opts = {}) {\n return _rendererGL(this).dMatrix(opts);\n };\n\n /**\n * mvMatrix({ vMatrix, mMatrix }):\n * ModelView matrix (mat4) = M * V (p5-v2 convention).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.vMatrix=this.vMatrix()] View matrix.\n * @param {p5.Matrix} [opts.mMatrix=this.mMatrix()] Model matrix.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.mvMatrix = function ({\n vMatrix = this.vMatrix(),\n mMatrix\n } = {}) {\n return (mMatrix || this.states.uModelMatrix).clone().mult(vMatrix);\n };\n\n /**\n * mvMatrix({ vMatrix, mMatrix }):\n * ModelView matrix (mat4) = M * V (p5-v2 convention).\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.vMatrix]\n * @param {p5.Matrix} [opts.mMatrix]\n * @returns {p5.Matrix}\n */\n fn.mvMatrix = function (opts = {}) {\n return _rendererGL(this).mvMatrix(opts);\n };\n\n /**\n * nMatrix({ vMatrix, mMatrix, mvMatrix }):\n * Normal matrix (mat3) = inverseTranspose(linear_part(MV)).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.vMatrix] Optional view matrix.\n * @param {p5.Matrix} [opts.mMatrix] Optional model matrix.\n * @param {p5.Matrix} [opts.mvMatrix=this.mvMatrix({ mMatrix, vMatrix })] Optional MV matrix override.\n * @returns {p5.Matrix} mat3\n */\n p5.RendererGL.prototype.nMatrix = function ({\n vMatrix,\n mMatrix,\n mvMatrix = this.mvMatrix({ mMatrix, vMatrix })\n } = {}) {\n return _transpose(_invert(mvMatrix.createSubMatrix3x3()));\n };\n\n /**\n * nMatrix({ vMatrix, mMatrix, mvMatrix }):\n * Normal matrix (mat3) = inverseTranspose(linear_part(MV)).\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.vMatrix]\n * @param {p5.Matrix} [opts.mMatrix]\n * @param {p5.Matrix} [opts.mvMatrix]\n * @returns {p5.Matrix} mat3\n */\n fn.nMatrix = function (opts = {}) {\n return _rendererGL(this).nMatrix(opts);\n };\n\n /**\n * pmvMatrix({ pMatrix, vMatrix, mMatrix, mvMatrix }):\n * PMV (mat4) = M * V * P (p5-v2 convention).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.pMatrix=this.pMatrix()] Projection matrix.\n * @param {p5.Matrix} [opts.vMatrix] Optional view matrix (used if mvMatrix is computed).\n * @param {p5.Matrix} [opts.mMatrix] Optional model matrix (used if mvMatrix is computed).\n * @param {p5.Matrix} [opts.mvMatrix=this.mvMatrix({ mMatrix, vMatrix })] Optional MV matrix override.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.pmvMatrix = function ({\n pMatrix = this.pMatrix(),\n vMatrix,\n mMatrix,\n mvMatrix\n } = {}) {\n return (mvMatrix ? mvMatrix.clone() : this.mvMatrix({ mMatrix, vMatrix })).mult(pMatrix);\n };\n\n /**\n * pmvMatrix({ pMatrix, vMatrix, mMatrix, mvMatrix }):\n * PMV (mat4) = M * V * P (p5-v2 convention).\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.pMatrix]\n * @param {p5.Matrix} [opts.vMatrix]\n * @param {p5.Matrix} [opts.mMatrix]\n * @param {p5.Matrix} [opts.mvMatrix]\n * @returns {p5.Matrix}\n */\n fn.pmvMatrix = function (opts = {}) {\n return _rendererGL(this).pmvMatrix(opts);\n };\n\n /**\n * pvMatrix({ pMatrix, vMatrix }):\n * PV (mat4) = V * P (p5-v2 convention).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.pMatrix=this.pMatrix()] Projection matrix.\n * @param {p5.Matrix} [opts.vMatrix=this.vMatrix()] View matrix.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.pvMatrix = function ({\n pMatrix = this.pMatrix(),\n vMatrix\n } = {}) {\n return (vMatrix || (this.states.uViewMatrix || this.states.curCamera.cameraMatrix)).clone().mult(pMatrix);\n };\n\n /**\n * pvMatrix({ pMatrix, vMatrix }):\n * PV (mat4) = V * P (p5-v2 convention).\n * Requires WEBGL.\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.pMatrix]\n * @param {p5.Matrix} [opts.vMatrix]\n * @returns {p5.Matrix}\n */\n fn.pvMatrix = function (opts = {}) {\n return _rendererGL(this).pvMatrix(opts);\n };\n \n /**\n * ipvMatrix({ pMatrix, vMatrix, pvMatrix }):\n * Inverse(PV) (mat4).\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.pMatrix] Optional projection matrix (used if pvMatrix is computed).\n * @param {p5.Matrix} [opts.vMatrix] Optional view matrix (used if pvMatrix is computed).\n * @param {p5.Matrix} [opts.pvMatrix=this.pvMatrix({ pMatrix, vMatrix })] Optional PV matrix override.\n * @returns {p5.Matrix}\n */\n p5.RendererGL.prototype.ipvMatrix = function ({\n pMatrix,\n vMatrix,\n pvMatrix = this.pvMatrix({ pMatrix, vMatrix })\n } = {}) {\n return _invert(pvMatrix);\n };\n \n /**\n * ipvMatrix({ pMatrix, vMatrix, pvMatrix }):\n * Inverse(PV) (mat4). Requires WEBGL.\n * @param {object} [opts]\n * @returns {p5.Matrix}\n */\n fn.ipvMatrix = function (opts = {}) {\n return _rendererGL(this).ipvMatrix(opts);\n };\n\n // ---------------------------------------------------------------------------\n // Projection matrix queries (isOrtho, planes, fov, hfov)\n // ---------------------------------------------------------------------------\n\n /**\n * Returns true if this projection matrix is orthographic.\n * @returns {boolean}\n */\n p5.Matrix.prototype.isOrtho = function () {\n return this.mat4[15] !== 0;\n };\n\n /**\n * Returns true if the current projection is orthographic.\n * @returns {boolean}\n */\n p5.RendererGL.prototype.isOrtho = function () {\n return this.pMatrix().isOrtho();\n };\n\n /**\n * Returns true if the current projection is orthographic.\n * Requires WEBGL.\n * @returns {boolean}\n */\n fn.isOrtho = function () {\n return _rendererGL(this).isOrtho();\n };\n\n /**\n * Near plane distance.\n * @returns {number}\n */\n p5.Matrix.prototype.nPlane = function () {\n const m = this.mat4;\n return m[15] === 0 ? m[14] / (m[10] - 1) : (1 + m[14]) / m[10];\n };\n\n /**\n * Far plane distance.\n * @returns {number}\n */\n p5.Matrix.prototype.fPlane = function () {\n const m = this.mat4;\n return m[15] === 0 ? m[14] / (1 + m[10]) : (m[14] - 1) / m[10];\n };\n\n /**\n * Left plane at the near plane.\n * @returns {number}\n */\n p5.Matrix.prototype.lPlane = function () {\n const m = this.mat4;\n return m[15] === 1 ? -(1 + m[12]) / m[0] : this.nPlane() * (m[8] - 1) / m[0];\n };\n\n /**\n * Right plane at the near plane.\n * @returns {number}\n */\n p5.Matrix.prototype.rPlane = function () {\n const m = this.mat4;\n return m[15] === 1 ? (1 - m[12]) / m[0] : this.nPlane() * (1 + m[8]) / m[0];\n };\n\n /**\n * Top plane at the near plane.\n * @returns {number}\n */\n p5.Matrix.prototype.tPlane = function () {\n const m = this.mat4;\n return m[15] === 1 ? (m[13] - 1) / m[5] : this.nPlane() * (m[9] - 1) / m[5];\n };\n\n /**\n * Bottom plane at the near plane.\n * @returns {number}\n */\n p5.Matrix.prototype.bPlane = function () {\n const m = this.mat4;\n return m[15] === 1 ? (1 + m[13]) / m[5] : this.nPlane() * (1 + m[9]) / m[5];\n };\n\n /**\n * Near plane distance for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.nPlane = function () {\n return this.pMatrix().nPlane();\n };\n\n /**\n * Far plane distance for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.fPlane = function () {\n return this.pMatrix().fPlane();\n };\n\n /**\n * Left plane for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.lPlane = function () {\n return this.pMatrix().lPlane();\n };\n\n /**\n * Right plane for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.rPlane = function () {\n return this.pMatrix().rPlane();\n };\n\n /**\n * Top plane for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.tPlane = function () {\n return this.pMatrix().tPlane();\n };\n\n /**\n * Bottom plane for the current projection.\n * @returns {number}\n */\n p5.RendererGL.prototype.bPlane = function () {\n return this.pMatrix().bPlane();\n };\n\n /**\n * Near plane distance for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.nPlane = function () {\n return _rendererGL(this).nPlane();\n };\n\n /**\n * Far plane distance for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.fPlane = function () {\n return _rendererGL(this).fPlane();\n };\n\n /**\n * Left plane for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.lPlane = function () {\n return _rendererGL(this).lPlane();\n };\n\n /**\n * Right plane for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.rPlane = function () {\n return _rendererGL(this).rPlane();\n };\n\n /**\n * Top plane for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.tPlane = function () {\n return _rendererGL(this).tPlane();\n };\n\n /**\n * Bottom plane for the current projection.\n * Requires WEBGL.\n * @returns {number}\n */\n fn.bPlane = function () {\n return _rendererGL(this).bPlane();\n };\n\n /**\n * Vertical field of view (radians), perspective only.\n * @returns {number|undefined}\n */\n p5.Matrix.prototype.fov = function () {\n if (this.mat4[15] !== 0) {\n console.error('[tree.matrix] fov only works for a perspective projection.');\n return;\n }\n return Math.abs(2 * Math.atan(1 / this.mat4[5]));\n };\n\n /**\n * Horizontal field of view (radians), perspective only.\n * @returns {number|undefined}\n */\n p5.Matrix.prototype.hfov = function () {\n if (this.mat4[15] !== 0) {\n console.error('[tree.matrix] hfov only works for a perspective projection.');\n return;\n }\n return Math.abs(2 * Math.atan(1 / this.mat4[0]));\n };\n\n /**\n * Vertical field of view (radians) of the current projection.\n * @returns {number|undefined}\n */\n p5.RendererGL.prototype.fov = function () {\n return this.pMatrix().fov();\n };\n\n /**\n * Horizontal field of view (radians) of the current projection.\n * @returns {number|undefined}\n */\n p5.RendererGL.prototype.hfov = function () {\n return this.pMatrix().hfov();\n };\n\n /**\n * Vertical field of view (radians) of the current projection.\n * Requires WEBGL.\n * @returns {number|undefined}\n */\n fn.fov = function () {\n return _rendererGL(this).fov();\n };\n\n /**\n * Horizontal field of view (radians) of the current projection.\n * Requires WEBGL.\n * @returns {number|undefined}\n */\n fn.hfov = function () {\n return _rendererGL(this).hfov();\n };\n\n // --- private keys (shared internal state across protos) ---\n const STATE_KEY = Symbol.for('tree.camera.path.state');\n const PLAYERS_KEY = Symbol.for('tree.camera.path.players');\n\n const clamp01 = function (x) {\n return x < 0 ? 0 : (x > 1 ? 1 : x);\n };\n\n const isFiniteNumber = function (x) {\n return typeof x === 'number' && Number.isFinite(x);\n };\n\n const warn = function (msg) {\n console.warn('[tree.camera.path] ' + msg);\n };\n\n const ensurePath = function (cam) {\n cam.path || (cam.path = []);\n return cam.path;\n };\n\n const segmentCount = function (path) {\n return Math.max(0, path.length - 1);\n };\n\n const getState = function (cam) {\n cam[STATE_KEY] || (cam[STATE_KEY] = {\n playing: false,\n loop: false,\n pingPong: false,\n onEnd: undefined,\n rate: 1,\n duration: 30, // frames per segment\n seg: 0,\n f: 0,\n pathIsOrtho: undefined\n });\n return cam[STATE_KEY];\n };\n\n const getPlayers = function (pInst) {\n pInst[PLAYERS_KEY] || (pInst[PLAYERS_KEY] = new Set());\n return pInst[PLAYERS_KEY];\n };\n \n const getActiveCamera = function (pInst) {\n const r = pInst && pInst._renderer;\n return (\n (r && r.states && r.states.curCamera) || // p5-v2 canonical\n (r && (r._curCamera || r.curCamera || r._camera)) || // fallbacks\n undefined\n );\n };\n\n /**\n * Build a stable projection signature from camera.projMatrix.mat4.\n * Returns undefined if unavailable (in which case we warn and do not reject).\n */\n const projSig = function (cam) {\n const pm = cam && cam.projMatrix;\n const m = pm && pm.mat4;\n if (!m || m.length !== 16) return undefined;\n let s = '';\n for (let i = 0; i < 16; i++) {\n const v = Math.round(m[i] * 1e6) / 1e6;\n s += (i ? ',' : '') + v;\n }\n return s;\n };\n\n /**\n * Interpolate camera pose at normalized global t in [0..1] along the whole path.\n * Also updates internal seg/f so playPath resumes from that location.\n */\n const seekGlobal = function (cam, t) {\n const path = ensurePath(cam);\n const nSeg = segmentCount(path);\n if (nSeg === 0) return;\n const st = getState(cam);\n const tt = clamp01(t);\n const x = tt * nSeg;\n const seg = Math.min(nSeg - 1, Math.floor(x));\n const amt = x - seg;\n cam.slerp(path[seg], path[seg + 1], amt);\n st.seg = seg;\n st.f = Math.round(amt * Math.max(1, st.duration | 0));\n };\n\n /**\n * Interpolate camera pose at amt in [0..1] within a specific segment index.\n */\n const seekSegment = function (cam, amt, segIndex) {\n const path = ensurePath(cam);\n const nSeg = segmentCount(path);\n if (nSeg === 0) return;\n const st = getState(cam);\n const seg = Math.max(0, Math.min(segIndex | 0, nSeg - 1));\n const a = clamp01(amt);\n cam.slerp(path[seg], path[seg + 1], a);\n st.seg = seg;\n st.f = Math.round(a * Math.max(1, st.duration | 0));\n };\n\n /**\n * Playback tick.\n *\n * Playback runs in \"frames per segment\" (`duration`), and `rate` is interpreted\n * as a speed multiplier applied per frame.\n *\n * Rate semantics:\n * - rate > 0 : forward playback\n * - rate < 0 : reverse playback\n * - rate === 0 : stopped\n *\n * The absolute value of `rate` is used as a per-frame advance amount.\n * Fractional rates are supported (e.g. 0.5 plays at half speed).\n *\n * Segment boundaries are handled according to playback mode:\n * - pingPong: bounce at the ends and reverse direction\n * - loop: wrap around to the opposite end\n * - otherwise: stop at the end and optionally invoke `onEnd`\n */\n const tick = function (cam) {\n const st = getState(cam);\n if (!st.playing) return;\n const path = ensurePath(cam);\n const nSeg = segmentCount(path);\n if (nSeg === 0) {\n st.playing = false;\n return;\n }\n const dur = Math.max(1, st.duration | 0);\n const speed = Math.abs(st.rate);\n if (speed === 0) {\n st.playing = false;\n return;\n }\n let dir = st.rate >= 0 ? 1 : -1;\n st.f += speed;\n while (st.f >= dur) {\n st.f -= dur;\n st.seg += dir;\n if (st.seg >= nSeg || st.seg < 0) {\n if (st.pingPong) {\n // Bounce at endpoints and flip direction.\n if (dir > 0) {\n st.seg = nSeg - 1;\n st.f = 0;\n st.rate = -speed;\n } else {\n st.seg = 0;\n st.f = 0;\n st.rate = speed;\n }\n dir = st.rate >= 0 ? 1 : -1;\n } else if (st.loop) {\n st.seg = dir > 0 ? 0 : (nSeg - 1);\n } else {\n st.playing = false;\n seekGlobal(cam, dir > 0 ? 1 : 0);\n const cb = st.onEnd;\n if (typeof cb === 'function') {\n try { cb(cam); } catch (e) { /* ignore user callback errors */ }\n }\n return;\n }\n }\n }\n const local = st.f / dur;\n const amt = dir > 0 ? local : (1 - local);\n cam.slerp(path[st.seg], path[st.seg + 1], amt);\n };\n\n // -----------------------\n // v2 addon lifecycle hook\n // -----------------------\n\n lifecycles.predraw = function () {\n const players = getPlayers(this);\n players.forEach(cam => {\n tick(cam);\n getState(cam).playing || players.delete(cam);\n });\n };\n\n lifecycles.remove = function () {\n const players = this[PLAYERS_KEY];\n players && players.clear();\n };\n\n // ----------\n // Camera API\n // ----------\n\n /**\n * addPath overloads (opts, if present, must be last; opts is the only allowed plain object):\n *\n * camera.addPath(); // snapshot this camera\n * camera.addPath(opts); // snapshot this camera (with opts)\n *\n * camera.addPath(otherCam, opts); // snapshot otherCam\n * camera.addPath([camA, camB, ...], opts); // bulk add (cameras)\n *\n * camera.addPath(eye, center, up, opts); // eye/center/up: p5.Vector or [x, y, z]\n *\n * camera.addPath(view, opts); // view: p5.Matrix (4x4) or mat4[16]\n * // (world -> camera), like p5.Camera.cameraMatrix\n * camera.addPath([viewA, viewB, ...], opts); // bulk add (views)\n *\n * Options:\n * - reset: boolean (default false) Clears the current path before adding.\n *\n * Notes:\n * - Keyframes are stored as camera snapshots (p5.Camera.copy()) so Camera.slerp() works.\n * - Projection compatibility is enforced (Camera.slerp requires same projection).\n *\n * @param {...any} args\n * @returns {p5.Camera} this\n */\n p5.Camera.prototype.addPath = function (...args) {\n const st = getState(this);\n const path = ensurePath(this);\n const isPlainObject = v => {\n if (!v || typeof v !== 'object') return false;\n if (Array.isArray(v)) return false;\n if (ArrayBuffer.isView(v)) return false;\n return Object.getPrototypeOf(v) === Object.prototype;\n };\n const isVec3 = v =>\n v instanceof p5.Vector ||\n (Array.isArray(v) && v.length === 3 && v.every(n => typeof n === 'number' && Number.isFinite(n)));\n const toVec3 = v => v instanceof p5.Vector ? [v.x, v.y, v.z] : [v[0], v[1], v[2]];\n const sameKeyframe = function (a, b) {\n if (!a || !b) return false;\n const aCM = a.cameraMatrix && a.cameraMatrix.mat4;\n const bCM = b.cameraMatrix && b.cameraMatrix.mat4;\n if (!aCM || !bCM) return false;\n for (let i = 0; i < 16; i++) if (aCM[i] !== bCM[i]) return false;\n return true;\n };\n const addSnapshot = c => {\n const last = path.length ? path[path.length - 1] : undefined;\n last && sameKeyframe(last, c) || path.push(c.copy());\n };\n const isOrthoCam = c => {\n const m = c && c.projMatrix && c.projMatrix.mat4;\n return m && m.length === 16 ? (m[15] !== 0) : undefined;\n };\n const initProjBaseline = c => {\n if (st.pathIsOrtho !== undefined) return;\n const v = isOrthoCam(c);\n st.pathIsOrtho = v;\n v === undefined && warn('addPath: unable to verify projection type (projMatrix.mat4 unavailable).');\n };\n const checkProjCompat = c => {\n initProjBaseline(c);\n const v = isOrthoCam(c);\n if (st.pathIsOrtho === undefined || v === undefined) {\n v === undefined && warn('addPath: unable to verify projection type (projMatrix.mat4 unavailable).');\n return true;\n }\n if (v !== st.pathIsOrtho) {\n warn('addPath rejected: keyframe has different projection type (ortho vs perspective).');\n return false;\n }\n return true;\n };\n const isMat4Array = v =>\n (Array.isArray(v) || ArrayBuffer.isView(v)) &&\n v.length === 16 &&\n Array.prototype.every.call(v, n => typeof n === 'number' && Number.isFinite(n));\n const isView = v => v instanceof p5.Matrix || isMat4Array(v);\n const toMat4 = v => v instanceof p5.Matrix ? v.mat4 : v;\n const dot3 = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n const len3 = v => Math.sqrt(dot3(v, v));\n const norm3 = v => {\n const l = len3(v) || 1;\n return [v[0] / l, v[1] / l, v[2] / l];\n };\n const importViewToCamera = view => {\n // view is a column-major mat4, world -> camera (p5.Camera.cameraMatrix).\n const m = toMat4(view);\n // Rows of rotation part (world->camera):\n const right = norm3([m[0], m[4], m[8]]);\n const up = norm3([m[1], m[5], m[9]]);\n const negFwd = norm3([m[2], m[6], m[10]]);\n const fwd = [-negFwd[0], -negFwd[1], -negFwd[2]];\n // Translation column: t = -R^T * eye\n const t = [m[12], m[13], m[14]];\n // eye = -(t0*right + t1*up) + t2*forward\n const eye = [\n -(t[0] * right[0] + t[1] * up[0]) + t[2] * fwd[0],\n -(t[0] * right[1] + t[1] * up[1]) + t[2] * fwd[1],\n -(t[0] * right[2] + t[1] * up[2]) + t[2] * fwd[2]\n ];\n // Enforce center using this camera’s current focus distance.\n const dist = Math.sqrt(\n (this.centerX - this.eyeX) * (this.centerX - this.eyeX) +\n (this.centerY - this.eyeY) * (this.centerY - this.eyeY) +\n (this.centerZ - this.eyeZ) * (this.centerZ - this.eyeZ)\n ) || 1;\n const center = [\n eye[0] + fwd[0] * dist,\n eye[1] + fwd[1] * dist,\n eye[2] + fwd[2] * dist\n ];\n // Important: use camera(...) so cameraMatrix stays consistent with eye/center/up.\n const c = this.copy();\n c.camera(\n eye[0], eye[1], eye[2],\n center[0], center[1], center[2],\n up[0], up[1], up[2]\n );\n return c;\n };\n // --- opts extraction (opts always last; only plain object is opts) ---\n const o = args.length && isPlainObject(args[args.length - 1]) ? args.pop() : {};\n if (o.reset) {\n path.length = 0;\n st.seg = 0;\n st.f = 0;\n st.pathIsOrtho = undefined;\n }\n initProjBaseline(this);\n // addPath() -> snapshot this\n if (args.length === 0) {\n addSnapshot(this);\n return this;\n }\n // addPath(view) OR addPath(camera) OR addPath([cameras]) OR addPath([views])\n if (args.length === 1) {\n const override = args[0];\n // single view\n if (isView(override)) {\n const c = importViewToCamera(override);\n checkProjCompat(c) && addSnapshot(c);\n return this;\n }\n // bulk: views or cameras\n if (Array.isArray(override)) {\n const list = override;\n // bulk views\n if (list.length && list.every(isView)) {\n for (let i = 0; i < list.length; i++) {\n const c = importViewToCamera(list[i]);\n checkProjCompat(c) && addSnapshot(c);\n }\n return this;\n }\n // bulk cameras (existing behavior)\n for (let i = 0; i < list.length; i++) {\n const c = list[i];\n if (!(c instanceof p5.Camera)) {\n warn('addPath: ignored non-camera value.');\n continue;\n }\n checkProjCompat(c) && addSnapshot(c);\n }\n return this;\n }\n // single camera\n if (override instanceof p5.Camera) {\n checkProjCompat(override) && addSnapshot(override);\n return this;\n }\n warn('addPath: ignored unsupported arguments.');\n return this;\n }\n // addPath(eye, center, up, opts)\n if (args.length === 3 && args.every(isVec3)) {\n const eye = toVec3(args[0]);\n const center = toVec3(args[1]);\n const up = norm3(toVec3(args[2]));\n // Important: use camera(...) so cameraMatrix stays consistent with eye/center/up.\n const c = this.copy();\n c.camera(\n eye[0], eye[1], eye[2],\n center[0], center[1], center[2],\n up[0], up[1], up[2]\n );\n checkProjCompat(c) && addSnapshot(c);\n return this;\n }\n warn('addPath: ignored unsupported arguments.');\n return this;\n };\n\n /**\n * playPath overloads:\n * camera.playPath(rate)\n * camera.playPath({ duration, loop, pingPong, onEnd, rate })\n *\n * Playback runs in \"frames per segment\" (duration), and rate is interpreted as a\n * simple speed multiplier:\n * - rate > 0 : forward\n * - rate < 0 : reverse\n * - rate === 0 : stopped (does not register for ticking)\n *\n * duration: frames per segment (default 30).\n * loop: wraps at ends (default false).\n * pingPong: bounces at ends (default false).\n * onEnd: called when playback naturally ends (non-looping, non-pingpong).\n *\n * Special case (single keyframe):\n * If camera.path has exactly 1 keyframe, playPath does not start playback.\n * It restores this camera pose to that keyframe (via p5.Camera.camera())\n * and ensures playback is stopped/unregistered.\n *\n * If both pingPong and loop are true, pingPong takes precedence.\n */\n p5.Camera.prototype.playPath = function (rateOrOpts) {\n const st = getState(this);\n const path = ensurePath(this);\n const pInst = this._renderer && this._renderer._pInst;\n const unregister = () => pInst && getPlayers(pInst).delete(this);\n const register = () => pInst && getPlayers(pInst).add(this);\n // 0 keyframes: nothing to do\n if (path.length === 0) {\n warn('playPath ignored: need at least 1 keyframe in camera.path.');\n st.playing = false;\n unregister();\n return this;\n }\n // 1 keyframe: restore pose only (no playback)\n if (path.length === 1) {\n const kf = path[0];\n st.playing = false;\n unregister();\n return this.camera(\n kf.eyeX, kf.eyeY, kf.eyeZ,\n kf.centerX, kf.centerY, kf.centerZ,\n kf.upX, kf.upY, kf.upZ\n );\n }\n const nSeg = segmentCount(path);\n if (nSeg === 0) {\n warn('playPath ignored: need at least 2 keyframes in camera.path.');\n st.playing = false;\n unregister();\n return this;\n }\n if (isFiniteNumber(rateOrOpts)) {\n st.rate = rateOrOpts;\n } else {\n const o = rateOrOpts || {};\n st.duration = isFiniteNumber(o.duration) ? o.duration : st.duration;\n st.loop = !!o.loop;\n st.pingPong = !!o.pingPong;\n st.onEnd = typeof o.onEnd === 'function' ? o.onEnd : st.onEnd;\n st.rate = isFiniteNumber(o.rate) ? o.rate : st.rate;\n }\n // rate === 0 means \"stop\" (don’t register for ticking)\n if (st.rate === 0) {\n st.playing = false;\n unregister();\n return this;\n }\n // If starting from stopped state, default to an endpoint depending on direction.\n // Important: do NOT use seekGlobal(cam, 1) for reverse start, because seekGlobal sets st.f = dur\n // and the next tick will immediately underflow the segment and stop (snap).\n if (!st.playing) {\n const forward = st.rate >= 0;\n st.seg = forward ? 0 : (nSeg - 1);\n st.f = 0;\n // Snap pose to the start/end of the current segment, but keep st.f = 0.\n this.slerp(path[st.seg], path[st.seg + 1], forward ? 0 : 1);\n } \n st.playing = true;\n register();\n return this;\n };\n\n /**\n * stopPath({ reset=false })\n * - Stops playback.\n * - If reset:true, seeks to start (forward) or end (reverse).\n */\n p5.Camera.prototype.stopPath = function (opts) {\n const st = getState(this);\n const o = opts || {};\n st.playing = false;\n const pInst = this._renderer && this._renderer._pInst;\n pInst && getPlayers(pInst).delete(this);\n if (o.reset) {\n const forward = st.rate >= 0;\n seekGlobal(this, forward ? 0 : 1);\n st.seg = forward ? 0 : Math.max(0, segmentCount(ensurePath(this)) - 1);\n st.f = 0;\n }\n return this;\n };\n\n /**\n * resetPath(n?)\n * - resetPath() clears all keyframes and stops.\n * - resetPath(n) keeps first n keyframes (truncate) and stops.\n */\n p5.Camera.prototype.resetPath = function (n) {\n const st = getState(this);\n const path = ensurePath(this);\n st.playing = false;\n st.seg = 0;\n st.f = 0;\n const pInst = this._renderer && this._renderer._pInst;\n pInst && getPlayers(pInst).delete(this);\n if (!isFiniteNumber(n)) {\n path.length = 0;\n st.pathIsOrtho = undefined;\n return this;\n }\n const nInt = n | 0;\n const keep = Math.max(0, Math.abs(nInt));\n if (keep === 0) {\n path.length = 0;\n st.pathIsOrtho = undefined;\n return this;\n }\n if (nInt >= 0) {\n path.length = Math.min(path.length, keep);\n } else if (path.length > keep) {\n path.splice(0, path.length - keep);\n }\n if (segmentCount(path) === 0) {\n st.pathIsOrtho = undefined;\n }\n return this;\n };\n\n /**\n * seekPath overloads:\n * camera.seekPath(t) // global t in [0..1]\n * camera.seekPath(amt, segIndex) // segment-local\n *\n * Seeking always stops playback.\n */\n p5.Camera.prototype.seekPath = function (t, segIndex) {\n const st = getState(this);\n st.playing = false;\n const pInst = this._renderer && this._renderer._pInst;\n pInst && getPlayers(pInst).delete(this);\n if (isFiniteNumber(segIndex)) {\n seekSegment(this, t, segIndex);\n return this;\n }\n seekGlobal(this, t);\n return this;\n };\n\n // ------------------------------------------------------------\n // p5 wrappers (same names, forward to active camera)\n // ------------------------------------------------------------\n\n fn.addPath = function (...args) {\n const cam = getActiveCamera(this);\n cam && cam.addPath(...args);\n return this;\n };\n\n fn.playPath = function (...args) {\n const cam = getActiveCamera(this);\n cam && cam.playPath(...args);\n return this;\n };\n \n fn.seekPath = function (...args) {\n const cam = getActiveCamera(this);\n cam && cam.seekPath(...args);\n return this;\n };\n \n fn.resetPath = function (...args) {\n const cam = getActiveCamera(this);\n cam && cam.resetPath(...args);\n return this;\n };\n \n fn.stopPath = function (...args) {\n const cam = getActiveCamera(this);\n cam && cam.stopPath(...args);\n return this;\n };\n \n // HUD\n\n fn.beginHUD = function (...args) {\n this._renderer?.beginHUD?.(...args);\n return this;\n }\n \n fn.endHUD = function (...args) {\n this._renderer?.endHUD?.(...args);\n return this;\n }\n \n /*\n // treegl approach:\n p5.RendererGL.prototype.beginHUD = function () {\n if (this._hudActive === true) return;\n const p = this._pInst;\n const gl = this.drawingContext;\n const states = this.states;\n if (!p || !gl || !states) return;\n // ------------------------------------------------------------------\n // Save world state (treegl: m, v, p)\n // ------------------------------------------------------------------\n this._hudPrevCamera = states.curCamera;\n // push isolates renderer state (tree-style equivalent of treegl push)\n p.push();\n p.resetShader();\n // Ensure HUD does not inherit model transforms\n p.resetMatrix();\n // ------------------------------------------------------------------\n // Depth state\n // ------------------------------------------------------------------\n this._hudDepthWasEnabled = gl.isEnabled(gl.DEPTH_TEST);\n gl.flush();\n gl.disable(gl.DEPTH_TEST);\n // ------------------------------------------------------------------\n // HUD camera\n // ------------------------------------------------------------------\n if (this._hudCam === undefined) {\n this._hudCam = p.createCamera();\n }\n const z = Number.MAX_VALUE;\n // HUD coordinates:\n // x ∈ [0, width], y ∈ [0, height], origin at top-left\n this._hudCam.ortho(0, p.width, -p.height, 0, -z, z);\n // this._hudCam.ortho(0, p.width, 0, -p.height, -z, z); // flipped variant\n this._hudCam.camera(0, 0, 1, 0, 0, 0, 0, 1, 0);\n p.setCamera(this._hudCam);\n this._hudActive = true;\n };\n \n p5.RendererGL.prototype.endHUD = function () {\n if (this._hudActive !== true) return;\n const p = this._pInst;\n const gl = this.drawingContext;\n const states = this.states;\n if (!p || !gl || !states) return;\n gl.flush();\n // Restore depth test\n this._hudDepthWasEnabled ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST);\n // Restore renderer state\n p.pop();\n // Restore camera (tree equivalent of restoring u* matrices)\n if (this._hudPrevCamera !== undefined) {\n p.setCamera(this._hudPrevCamera);\n }\n this._hudPrevCamera = undefined;\n this._hudDepthWasEnabled = undefined;\n this._hudActive = false;\n };\n */\n \n p5.RendererGL.prototype.beginHUD = function () {\n if (this._hudActive === true) return;\n const p = this._pInst;\n if (!p) return;\n const gl = this.drawingContext;\n const states = this.states;\n if (!gl || !states) return;\n p.push(); // isolate all subsequent HUD drawing from caller state\n p.resetShader();\n // Ensure HUD space does NOT inherit the user's current model transforms\n // (e.g. push()/translate()\n p.resetMatrix();\n // ---------------------\n // --- HUD setup ---\n this._hudPrevCam = states.curCamera;\n this._hudDepthWasEnabled = gl.isEnabled(gl.DEPTH_TEST);\n gl.flush();\n gl.disable(gl.DEPTH_TEST);\n if (this._hudCam === undefined) this._hudCam = p.createCamera();\n const z = 1e6;\n // HUD coordinates: x in [0, width], y in [0, height]\n this._hudCam.ortho(0, p.width, -p.height, 0, -z, z);\n // this._hudCam.ortho(0, p.width, 0, -p.height, -z, z); // <- flipped\n this._hudCam.camera(0, 0, 1, 0, 0, 0, 0, 1, 0);\n p.setCamera(this._hudCam);\n this._hudActive = true;\n };\n \n p5.RendererGL.prototype.endHUD = function () {\n if (this._hudActive !== true) return;\n const p = this._pInst;\n const gl = this.drawingContext;\n const states = this.states;\n if (p === undefined || gl === undefined || states === undefined) return;\n gl.flush();\n this._hudDepthWasEnabled ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST);\n p.pop(); // calls: this.pop(this._rendererState);\n this._hudPrevCam !== undefined && p.setCamera(this._hudPrevCam);\n this._hudPrevCam = undefined;\n this._hudDepthWasEnabled = undefined;\n this._hudActive = false;\n };\n \n // ---------------------------------------------------------------------------\n // Space transforms: transformPosition / transformDirection\n // ---------------------------------------------------------------------------\n \n p5.RendererGL.prototype._parseTransformArgs = function (defaultMainArg, ...args) {\n let mainArg = defaultMainArg;\n const options = {};\n for (const arg of args) {\n if (arg instanceof p5.Vector || Array.isArray(arg)) {\n mainArg = arg;\n } else if (arg && typeof arg === 'object') {\n Object.assign(options, arg);\n }\n }\n return { mainArg, options };\n };\n\n // ---------------------------------------------------------------------------\n // Points (positions)\n // ---------------------------------------------------------------------------\n \n fn.transformPosition = function (...args) {\n return _rendererGL(this)?.transformPosition(...args);\n };\n \n /**\n * Converts a point (location) from one space into another.\n *\n * @param {p5.Vector|number[]} [point=p5.Tree.ORIGIN]\n * @param {Object} [opts]\n * @param {p5.Matrix|string} [opts.from=p5.Tree.EYE]\n * @param {p5.Matrix|string} [opts.to=p5.Tree.WORLD]\n * @param {p5.Matrix} [opts.pMatrix]\n * @param {p5.Matrix} [opts.vMatrix]\n * @param {p5.Matrix} [opts.eMatrix]\n * @param {p5.Matrix} [opts.pvMatrix]\n * @param {p5.Matrix} [opts.ipvMatrix]\n * @returns {p5.Vector}\n */\n p5.RendererGL.prototype.transformPosition = function (...args) {\n const { mainArg, options } = this._parseTransformArgs(p5.Tree.ORIGIN, ...args);\n return this._position(mainArg, options);\n };\n \n p5.RendererGL.prototype._position = function (\n point = p5.Tree.ORIGIN,\n {\n from = p5.Tree.EYE,\n to = p5.Tree.WORLD,\n pMatrix,\n vMatrix,\n eMatrix,\n pvMatrix,\n ipvMatrix\n } = {}\n ) {\n if (Array.isArray(point)) {\n point = new p5.Vector(point[0] ?? 0, point[1] ?? 0, point[2] ?? 0);\n }\n if (from == p5.Tree.MODEL) {\n from = this.mMatrix({ eMatrix });\n }\n if (to == p5.Tree.MODEL) {\n to = this.mMatrix({ eMatrix });\n }\n if ((from == p5.Tree.WORLD) && (to == p5.Tree.SCREEN)) {\n return this._worldToScreenPosition({ point, pMatrix, vMatrix, pvMatrix });\n }\n if ((from == p5.Tree.SCREEN) && (to == p5.Tree.WORLD)) {\n return this._screenToWorldPosition({ point, pMatrix, vMatrix, pvMatrix, ipvMatrix });\n }\n if (from == p5.Tree.SCREEN && to == p5.Tree.NDC) {\n return this._screenToNDCPosition(point);\n }\n if (from == p5.Tree.NDC && to == p5.Tree.SCREEN) {\n return this._ndcToScreenPosition(point);\n }\n if (from == p5.Tree.WORLD && to == p5.Tree.NDC) {\n return this._screenToNDCPosition(\n this._worldToScreenPosition({ point, pMatrix, vMatrix, pvMatrix })\n );\n }\n if (from == p5.Tree.NDC && to == p5.Tree.WORLD) {\n return this._screenToWorldPosition({\n point: this._ndcToScreenPosition(point),\n pMatrix,\n vMatrix,\n pvMatrix,\n ipvMatrix\n });\n }\n if (from == p5.Tree.NDC && (to instanceof p5.Matrix || to == p5.Tree.EYE)) {\n return (to == p5.Tree.EYE\n ? (vMatrix ?? this.vMatrix())\n : to.copy().invert(to)\n ).mult4(\n this._screenToWorldPosition({\n point: this._ndcToScreenPosition(point),\n pMatrix,\n vMatrix,\n pvMatrix,\n ipvMatrix\n })\n );\n }\n if ((from instanceof p5.Matrix || from == p5.Tree.EYE) && to == p5.Tree.NDC) {\n return this._screenToNDCPosition(\n this._worldToScreenPosition({\n point: (from == p5.Tree.EYE\n ? (eMatrix ?? this.eMatrix())\n : from\n ).mult4(point),\n pMatrix,\n vMatrix,\n pvMatrix\n })\n );\n }\n if (from == p5.Tree.WORLD && (to instanceof p5.Matrix || to == p5.Tree.EYE)) {\n return (to == p5.Tree.EYE\n ? (vMatrix ?? this.vMatrix())\n : to.copy().invert(to)\n ).mult4(point);\n }\n if ((from instanceof p5.Matrix || from == p5.Tree.EYE) && to == p5.Tree.WORLD) {\n return (from == p5.Tree.EYE\n ? (eMatrix ?? this.eMatrix())\n : from\n ).mult4(point);\n }\n if (from instanceof p5.Matrix && to instanceof p5.Matrix) {\n return this.lMatrix({ from: from, to: to }).mult4(point);\n }\n if (from == p5.Tree.SCREEN && (to instanceof p5.Matrix || to == p5.Tree.EYE)) {\n return (to == p5.Tree.EYE\n ? (vMatrix ?? this.vMatrix())\n : to.copy().invert(to)\n ).mult4(\n this._screenToWorldPosition({ point, pMatrix, vMatrix, pvMatrix, ipvMatrix })\n );\n }\n if ((from instanceof p5.Matrix || from == p5.Tree.EYE) && to == p5.Tree.SCREEN) {\n return this._worldToScreenPosition({\n point: (from == p5.Tree.EYE\n ? (eMatrix ?? this.eMatrix())\n : from\n ).mult4(point),\n pMatrix,\n vMatrix,\n pvMatrix\n });\n }\n if (from instanceof p5.Matrix && to == p5.Tree.EYE) {\n return (vMatrix ?? this.vMatrix()).mult4(from.mult4(point));\n }\n if (from == p5.Tree.EYE && to instanceof p5.Matrix) {\n return to.copy().invert(to).mult4((eMatrix ?? this.eMatrix()).mult4(point));\n }\n console.error('couldn\\'t parse your transformPosition query!');\n return point;\n };\n \n p5.RendererGL.prototype._ndcToScreenPosition = function (point) {\n return new p5.Vector(\n p5.prototype.map(point.x, -1, 1, 0, this.width),\n p5.prototype.map(point.y, -1, 1, 0, this.height),\n p5.prototype.map(point.z, -1, 1, 0, 1)\n );\n };\n \n p5.RendererGL.prototype._screenToNDCPosition = function (point) {\n return new p5.Vector(\n p5.prototype.map(point.x, 0, this.width, -1, 1),\n p5.prototype.map(point.y, 0, this.height, -1, 1),\n p5.prototype.map(point.z, 0, 1, -1, 1)\n );\n };\n \n p5.RendererGL.prototype._worldToScreenPosition = function ({\n point = new p5.Vector(0, 0, 0.5),\n pMatrix,\n vMatrix,\n pvMatrix = this.pvMatrix({ pMatrix, vMatrix })\n } = {}) {\n let target = pvMatrix._mult4([point.x, point.y, point.z, 1]);\n if (target[3] === 0) {\n console.error('[p5.tree] World->Screen broken: check pvMatrix.');\n return point.copy();\n }\n const viewport = [0, this.height, this.width, -this.height];\n target[0] /= target[3];\n target[1] /= target[3];\n target[2] /= target[3];\n target[0] = target[0] * 0.5 + 0.5;\n target[1] = target[1] * 0.5 + 0.5;\n target[2] = target[2] * 0.5 + 0.5;\n target[0] = target[0] * viewport[2] + viewport[0];\n target[1] = target[1] * viewport[3] + viewport[1];\n return new p5.Vector(target[0], target[1], target[2]);\n };\n \n p5.RendererGL.prototype._screenToWorldPosition = function ({\n point = new p5.Vector(this.width / 2, this.height / 2, 0.5),\n pMatrix,\n vMatrix,\n pvMatrix,\n ipvMatrix = this.ipvMatrix({ pMatrix, vMatrix, pvMatrix })\n } = {}) {\n const viewport = [0, this.height, this.width, -this.height];\n const source = [point.x, point.y, point.z, 1];\n source[0] = (source[0] - viewport[0]) / viewport[2];\n source[1] = (source[1] - viewport[1]) / viewport[3];\n source[0] = source[0] * 2 - 1;\n source[1] = source[1] * 2 - 1;\n source[2] = source[2] * 2 - 1;\n let target = ipvMatrix._mult4(source);\n if (target[3] === 0) {\n console.error('[p5.tree] Screen->World broken: check ipvMatrix.');\n return point.copy();\n }\n target[0] /= target[3];\n target[1] /= target[3];\n target[2] /= target[3];\n return new p5.Vector(target[0], target[1], target[2]);\n };\n \n // ---------------------------------------------------------------------------\n // Directions (vector displacements)\n // ---------------------------------------------------------------------------\n \n fn.transformDirection = function (...args) {\n return _rendererGL(this)?.transformDirection(...args);\n };\n \n /**\n * Converts a vector displacement from one space into another.\n *\n * @param {p5.Vector|number[]} [vector=p5.Tree._k]\n * @param {Object} [opts]\n * @param {p5.Matrix|string} [opts.from=p5.Tree.EYE]\n * @param {p5.Matrix|string} [opts.to=p5.Tree.WORLD]\n * @param {p5.Matrix} [opts.vMatrix]\n * @param {p5.Matrix} [opts.eMatrix]\n * @param {p5.Matrix} [opts.pMatrix]\n * @returns {p5.Vector}\n */\n p5.RendererGL.prototype.transformDirection = function (...args) {\n const { mainArg, options } = this._parseTransformArgs(p5.Tree._k, ...args);\n return this._direction(mainArg, options);\n };\n \n p5.RendererGL.prototype._direction = function (\n vector = p5.Tree._k,\n {\n from = p5.Tree.EYE,\n to = p5.Tree.WORLD,\n vMatrix,\n eMatrix,\n pMatrix\n } = {}\n ) {\n if (Array.isArray(vector)) {\n vector = new p5.Vector(vector[0] ?? 0, vector[1] ?? 0, vector[2] ?? 0);\n }\n if (from === p5.Tree.MODEL) from = this.mMatrix({ eMatrix });\n if (to === p5.Tree.MODEL) to = this.mMatrix({ eMatrix });\n if (from === p5.Tree.WORLD && to === p5.Tree.SCREEN) return this._worldToScreenDirection(vector, pMatrix);\n if (from === p5.Tree.SCREEN && to === p5.Tree.WORLD) return this._screenToWorldDirection(vector, pMatrix);\n if (from === p5.Tree.SCREEN && to === p5.Tree.NDC) return this._screenToNDCDirection(vector);\n if (from === p5.Tree.NDC && to === p5.Tree.SCREEN) return this._ndcToScreenDirection(vector);\n if (from === p5.Tree.WORLD && to === p5.Tree.NDC) {\n return this._screenToNDCDirection(this._worldToScreenDirection(vector, pMatrix));\n }\n if (from === p5.Tree.NDC && to === p5.Tree.WORLD) {\n return this._screenToWorldDirection(this._ndcToScreenDirection(vector), pMatrix);\n }\n if (from === p5.Tree.NDC && to === p5.Tree.EYE) {\n const m = this.dMatrix({ matrix: eMatrix ?? this.eMatrix() }); // mat3\n return m.multiplyVec3(\n this._screenToWorldDirection(this._ndcToScreenDirection(vector), pMatrix)\n );\n }\n if (from === p5.Tree.EYE && to === p5.Tree.NDC) {\n const m = this.dMatrix({ matrix: vMatrix ?? this.vMatrix() }); // mat3\n return this._screenToNDCDirection(\n this._worldToScreenDirection(m.multiplyVec3(vector), pMatrix)\n );\n }\n if (from === p5.Tree.SCREEN && to instanceof p5.Matrix) {\n const m = this.dMatrix({ matrix: to }); // mat3\n return m.multiplyVec3(this._screenToWorldDirection(vector, pMatrix));\n }\n if (from instanceof p5.Matrix && to === p5.Tree.SCREEN) {\n const m = this.dMatrix({ matrix: _invert(from) }); // mat3\n return this._worldToScreenDirection(m.multiplyVec3(vector), pMatrix);\n }\n if (from instanceof p5.Matrix && to instanceof p5.Matrix) {\n return this.dMatrix({ from, to }).multiplyVec3(vector); // mat3\n }\n if (from === p5.Tree.EYE && to === p5.Tree.WORLD) {\n return this.dMatrix({ matrix: vMatrix ?? this.vMatrix() }).multiplyVec3(vector); // mat3\n }\n if (from === p5.Tree.WORLD && to === p5.Tree.EYE) {\n return this.dMatrix({ matrix: eMatrix ?? this.eMatrix() }).multiplyVec3(vector); // mat3\n }\n if (from === p5.Tree.EYE && to === p5.Tree.SCREEN) {\n return this._worldToScreenDirection(\n this.dMatrix({ matrix: vMatrix ?? this.vMatrix() }).multiplyVec3(vector),\n pMatrix\n );\n }\n if (from === p5.Tree.SCREEN && to === p5.Tree.EYE) {\n return this.dMatrix({ matrix: eMatrix ?? this.eMatrix() }).multiplyVec3(\n this._screenToWorldDirection(vector, pMatrix)\n );\n }\n if (from === p5.Tree.EYE && to instanceof p5.Matrix) {\n const m = this.dMatrix({ matrix: (vMatrix ?? this.vMatrix()).apply(to) }); // mat3\n return m.multiplyVec3(vector);\n }\n if (from instanceof p5.Matrix && to === p5.Tree.EYE) {\n const m = this.dMatrix({ matrix: _invert(from).apply(eMatrix ?? this.eMatrix()) }); // mat3\n return m.multiplyVec3(vector);\n }\n if (from === p5.Tree.WORLD && to instanceof p5.Matrix) {\n return this.dMatrix({ matrix: to }).multiplyVec3(vector); // mat3\n }\n if (from instanceof p5.Matrix && to === p5.Tree.WORLD) {\n return this.dMatrix({ matrix: _invert(from) }).multiplyVec3(vector); // mat3\n }\n \n if (from instanceof p5.Matrix && to === p5.Tree.NDC) {\n const m = this.dMatrix({ matrix: _invert(from) }); // mat3\n return this._screenToNDCDirection(this._worldToScreenDirection(m.multiplyVec3(vector), pMatrix));\n }\n if (from === p5.Tree.NDC && to instanceof p5.Matrix) {\n const m = this.dMatrix({ matrix: to }); // mat3\n return m.multiplyVec3(\n this._screenToWorldDirection(this._ndcToScreenDirection(vector), pMatrix)\n );\n }\n console.error('[p5.tree] transformDirection: could not parse query.');\n return vector;\n };\n \n p5.RendererGL.prototype._worldToScreenDirection = function (vector, pMatrix) {\n pMatrix = pMatrix ?? this.pMatrix();\n const eyeVector = this._direction(vector, { from: p5.Tree.WORLD, to: p5.Tree.EYE });\n let dx = eyeVector.x;\n let dy = eyeVector.y;\n const perspective = pMatrix.mat4[15] === 0;\n if (perspective) {\n const zEye = this._position(p5.Tree.ORIGIN, { from: p5.Tree.WORLD, to: p5.Tree.EYE }).z;\n const k = Math.abs(zEye * Math.tan(pMatrix.fov() / 2));\n dx /= 2 * k / this.height;\n dy /= 2 * k / this.height;\n }\n let dz = eyeVector.z;\n dz /= (pMatrix.nPlane() - pMatrix.fPlane()) / (\n perspective\n ? Math.tan(pMatrix.fov() / 2)\n : Math.abs(pMatrix.rPlane() - pMatrix.lPlane()) / this.width\n );\n return new p5.Vector(dx, dy, dz);\n };\n \n p5.RendererGL.prototype._screenToWorldDirection = function (vector, pMatrix) {\n pMatrix = pMatrix ?? this.pMatrix();\n \n let dx = vector.x;\n let dy = vector.y;\n \n const perspective = pMatrix.mat4[15] === 0;\n if (perspective) {\n const zEye = this._position(p5.Tree.ORIGIN, { from: p5.Tree.WORLD, to: p5.Tree.EYE }).z;\n const k = Math.abs(zEye * Math.tan(pMatrix.fov() / 2));\n dx *= 2 * k / this.height;\n dy *= 2 * k / this.height;\n }\n \n let dz = vector.z;\n dz *= (pMatrix.nPlane() - pMatrix.fPlane()) / (\n perspective\n ? Math.tan(pMatrix.fov() / 2)\n : Math.abs(pMatrix.rPlane() - pMatrix.lPlane()) / this.width\n );\n \n return this._direction(new p5.Vector(dx, dy, dz), { from: p5.Tree.EYE, to: p5.Tree.WORLD });\n };\n \n p5.RendererGL.prototype._ndcToScreenDirection = function (vector) {\n return new p5.Vector(this.width * vector.x / 2, this.height * vector.y / 2, vector.z / 2);\n };\n \n p5.RendererGL.prototype._screenToNDCDirection = function (vector) {\n return new p5.Vector(2 * vector.x / this.width, 2 * vector.y / this.height, 2 * vector.z);\n };\n \n // ---------------------------------------------------------------------------\n // Utilities\n // ---------------------------------------------------------------------------\n \n /**\n * Returns the world-to-pixel ratio units at a given world point position.\n *\n * A line of `n * pixelRatio(point)` world units will be projected with a\n * length of `n` pixels on screen (locally around that point).\n *\n * - In orthographic projection, the ratio is constant.\n * - In perspective projection, the ratio depends on eye-space depth.\n *\n * Requires WEBGL.\n *\n * @param {p5.Vector|number[]} [point=p5.Tree.ORIGIN] World-space point.\n * @returns {number|undefined} World units per pixel at the given point.\n */\n fn.pixelRatio = function (point) {\n return _rendererGL(this)?.pixelRatio(point);\n };\n \n /**\n * Returns the world-to-pixel ratio units at a given world point position.\n * @param {p5.Vector|number[]} [point=p5.Tree.ORIGIN]\n * @returns {number}\n */\n p5.RendererGL.prototype.pixelRatio = function (point = p5.Tree.ORIGIN) {\n return this.isOrtho()\n ? Math.abs(this.tPlane() - this.bPlane()) / this.height\n : 2 * Math.abs(\n this.transformPosition(point, { from: p5.Tree.WORLD, to: p5.Tree.EYE }).z\n ) * Math.tan(this.fov() / 2) / this.height;\n };\n\n /**\n * Returns the normalized texel size for an image/texture.\n * Useful for offsetting UVs by exactly one pixel.\n *\n * @param {p5.Image|p5.Framebuffer|Object} image Any object exposing `width` and `height`.\n * @returns {number[]} `[1 / width, 1 / height]`\n */\n fn.texOffset = function (image) {\n return [1 / image.width, 1 / image.height];\n };\n\n /**\n * Returns the current mouse position in *pixel* coordinates.\n * By default the y-axis is flipped so y=0 is at the bottom (HUD-style).\n *\n * @param {boolean} [flip=true] Whether to flip the y coordinate.\n * @returns {number[]} `[x, y]` in pixels (includes pixelDensity scaling).\n */\n fn.mousePosition = function (flip = true) {\n const pd = this.pixelDensity();\n return [pd * this.mouseX, pd * (flip ? this.height - this.mouseY : this.mouseY)];\n };\n\n /**\n * Returns a pointer position in *pixel* coordinates from an arbitrary (x, y) pair.\n * Delegates to the WEBGL renderer.\n *\n * Accepts parameters in any order:\n * - `number, number` → pointerX, pointerY\n * - optional `boolean` → `flip`\n *\n * @param {...(number|boolean)} args\n * @returns {number[]|undefined} `[x, y]` in pixels, or undefined if not in WEBGL.\n */\n fn.pointerPosition = function (...args) {\n return _rendererGL(this)?.pointerPosition(...args);\n };\n\n /**\n * Returns the canvas resolution in *pixel* coordinates.\n * Delegates to the WEBGL renderer.\n *\n * @returns {number[]|undefined} `[width, height]` in pixels, or undefined if not in WEBGL.\n */\n fn.resolution = function () {\n return _rendererGL(this)?.resolution();\n };\n\n /**\n * Returns a pointer position in *pixel* coordinates from an arbitrary (x, y) pair.\n *\n * Accepts parameters in any order:\n * - `number, number` → pointerX, pointerY\n * - optional `boolean` → `flip`\n *\n * @param {...(number|boolean)} args\n * @returns {number[]} `[x, y]` in pixels (includes pixelDensity scaling).\n */\n p5.RendererGL.prototype.pointerPosition = function (...args) {\n let pointerX;\n let pointerY;\n let flip = true;\n for (const arg of args) {\n if (typeof arg === 'number') {\n // First number is x, second is y.\n pointerX === undefined ? (pointerX = arg) : (pointerY = arg);\n } else if (typeof arg === 'boolean') {\n flip = arg;\n }\n }\n const pd = this.pixelDensity();\n return [pd * pointerX, pd * (flip ? this.height - pointerY : pointerY)];\n };\n\n /**\n * Returns the canvas resolution in *pixel* coordinates.\n * @returns {number[]} `[width, height]` in pixels (includes pixelDensity scaling).\n */\n p5.RendererGL.prototype.resolution = function () {\n const pd = this.pixelDensity();\n return [pd * this.width, pd * this.height];\n };\n \n // -------------------------------------------------------------------------\n // Drawing helpers (axes / grid)\n // -------------------------------------------------------------------------\n \n fn.axes = function (opts) {\n _rendererGL(this)?.axes(opts);\n return this;\n };\n \n p5.RendererGL.prototype.axes = function ({\n size = 100,\n colors = ['Red', 'Lime', 'DodgerBlue'],\n bits = p5.Tree.LABELS | p5.Tree.X | p5.Tree.Y | p5.Tree.Z\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n p.push();\n if ((bits & p5.Tree.LABELS) !== 0) {\n const charWidth = size / 40.0;\n const charHeight = size / 30.0;\n const charShift = 1.04 * size;\n // The X\n p.stroke(colors[0 % colors.length]);\n p.line(charShift, charWidth, -charHeight, charShift, -charWidth, charHeight);\n p.line(charShift, -charWidth, -charHeight, charShift, charWidth, charHeight);\n // The Y\n p.stroke(colors[1 % colors.length]);\n p.line(charWidth, charShift, charHeight, 0.0, charShift, 0.0);\n p.line(0.0, charShift, 0.0, -charWidth, charShift, charHeight);\n p.line(-charWidth, charShift, charHeight, 0.0, charShift, 0.0);\n p.line(0.0, charShift, 0.0, 0.0, charShift, -charHeight);\n // The Z\n p.stroke(colors[2 % colors.length]);\n p.line(-charWidth, -charHeight, charShift, charWidth, -charHeight, charShift);\n p.line(charWidth, -charHeight, charShift, -charWidth, charHeight, charShift);\n p.line(-charWidth, charHeight, charShift, charWidth, charHeight, charShift);\n }\n // X Axis\n p.stroke(colors[0 % colors.length]);\n (bits & p5.Tree.X) !== 0 && p.line(0, 0, 0, size, 0, 0);\n (bits & p5.Tree._X) !== 0 && p.line(0, 0, 0, -size, 0, 0);\n // Y Axis\n p.stroke(colors[1 % colors.length]);\n (bits & p5.Tree.Y) !== 0 && p.line(0, 0, 0, 0, size, 0);\n (bits & p5.Tree._Y) !== 0 && p.line(0, 0, 0, 0, -size, 0);\n // Z Axis\n p.stroke(colors[2 % colors.length]);\n (bits & p5.Tree.Z) !== 0 && p.line(0, 0, 0, 0, 0, size);\n (bits & p5.Tree._Z) !== 0 && p.line(0, 0, 0, 0, 0, -size);\n \n p.pop();\n };\n \n fn.grid = function (opts) {\n _rendererGL(this)?.grid(opts);\n return this;\n };\n \n p5.RendererGL.prototype.grid = function ({\n size = 100,\n subdivisions = 10,\n style = p5.Tree.SOLID,\n weight = 1,\n minorSubdivisions = 5\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n p.push();\n if (style === p5.Tree.DOTS) {\n let posi = 0;\n let posj = 0;\n p.strokeWeight(weight * 2);\n p.beginShape(p.POINTS);\n for (let i = 0; i <= subdivisions; ++i) {\n posi = size * (2.0 * i / subdivisions - 1.0);\n for (let j = 0; j <= subdivisions; ++j) {\n posj = size * (2.0 * j / subdivisions - 1.0);\n p.vertex(posi, posj, 0);\n }\n }\n p.endShape();\n const internalSub = Math.max(1, minorSubdivisions | 0);\n const subSubdivisions = subdivisions * internalSub;\n p.strokeWeight(weight);\n p.beginShape(p.POINTS);\n for (let i = 0; i <= subSubdivisions; ++i) {\n posi = size * (2.0 * i / subSubdivisions - 1.0);\n for (let j = 0; j <= subSubdivisions; ++j) {\n posj = size * (2.0 * j / subSubdivisions - 1.0);\n ((i % internalSub) !== 0 || (j % internalSub) !== 0) && p.vertex(posi, posj, 0);\n }\n }\n p.endShape();\n } else {\n for (let i = 0; i <= subdivisions; ++i) {\n const pos = size * (2.0 * i / subdivisions - 1.0);\n p.line(pos, -size, 0, pos, +size, 0);\n p.line(-size, pos, 0, size, pos, 0);\n }\n }\n p.pop();\n };\n \n // ---------------------------------------------------------------------------\n // Picking\n // ---------------------------------------------------------------------------\n \n /**\n * Returns `true` if the mouse is close enough to a target screen position.\n *\n * If `x`/`y` are not provided, they are derived by projecting `mMatrix` to\n * `p5.Tree.SCREEN`. In that case, `size` is interpreted in *world units* and\n * converted to pixels using `pixelRatio()` at the corresponding world point.\n *\n * Requires WEBGL.\n *\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.mMatrix] Model-space matrix origin to compute (x, y) from.\n * @param {number} [opts.x] Screen x coordinate in HUD space (pixels).\n * @param {number} [opts.y] Screen y coordinate in HUD space (pixels).\n * @param {number} [opts.size=50] Picking diameter (pixels in HUD space, or world units when deriving x/y).\n * @param {number} [opts.shape=p5.Tree.CIRCLE] Either `p5.Tree.CIRCLE` or `p5.Tree.SQUARE`.\n * @param {p5.Matrix} [opts.eMatrix] Eye matrix override.\n * @param {p5.Matrix} [opts.pMatrix] Projection matrix override.\n * @param {p5.Matrix} [opts.vMatrix] View (camera) matrix override.\n * @param {p5.Matrix} [opts.pvMatrix] Projection-view matrix override.\n * @returns {boolean|undefined}\n */\n fn.mousePicking = function (opts) {\n return _rendererGL(this)?.mousePicking(opts);\n };\n \n /**\n * Returns `true` if a pointer is close enough to a target screen position.\n *\n * If `x`/`y` are not provided, they are derived by projecting `mMatrix` to\n * `p5.Tree.SCREEN`. In that case, `size` is interpreted in *world units* and\n * converted to pixels using `pixelRatio()` at the corresponding world point.\n *\n * Requires WEBGL.\n *\n * @param {...any} args\n * @returns {boolean|undefined}\n */\n fn.pointerPicking = function (...args) {\n return _rendererGL(this)?.pointerPicking(...args);\n };\n \n p5.RendererGL.prototype.mousePicking = function ({\n mMatrix = this.mMatrix(),\n x,\n y,\n size = 50,\n shape = p5.Tree.CIRCLE,\n eMatrix,\n pMatrix,\n vMatrix,\n pvMatrix\n } = {}) {\n const p = this._pInst;\n if (!p) return false;\n return this.pointerPicking(p.mouseX, p.mouseY, { mMatrix, x, y, size, shape, eMatrix, pMatrix, vMatrix, pvMatrix });\n };\n \n /**\n * Returns `true` if pointer is close enough to a target screen position.\n *\n * Supported call patterns:\n * - `pointerPicking(pointerX, pointerY, opts)`\n * - `pointerPicking(opts)` (pointer defaults to current mouse if available)\n *\n * @param {...any} args\n * @returns {boolean}\n */\n p5.RendererGL.prototype.pointerPicking = function (...args) {\n let pointerX;\n let pointerY;\n const config = {};\n for (const arg of args) {\n if (typeof arg === 'number' && Number.isFinite(arg)) {\n pointerX == null ? pointerX = arg : pointerY = arg;\n } else if (arg && typeof arg === 'object') {\n Object.assign(config, arg);\n }\n }\n const p = this._pInst;\n if (pointerX == null) pointerX = p ? p.mouseX : this.width / 2;\n if (pointerY == null) pointerY = p ? p.mouseY : this.height / 2;\n let {\n mMatrix = this.mMatrix(),\n x,\n y,\n size = 50,\n shape = p5.Tree.CIRCLE,\n eMatrix,\n pMatrix,\n vMatrix,\n pvMatrix\n } = config;\n // If target screen position not provided, derive it from mMatrix.\n // In that case, treat `size` as world units and convert to pixels locally.\n if (x == null || y == null) {\n const screen = this.transformPosition({ from: mMatrix, to: p5.Tree.SCREEN, pMatrix, vMatrix, pvMatrix });\n x = screen.x;\n y = screen.y;\n const world = this.transformPosition({ from: mMatrix, to: p5.Tree.WORLD, eMatrix });\n size = size / this.pixelRatio(world);\n }\n const r = size / 2.0;\n const dx = x - pointerX;\n const dy = y - pointerY;\n return shape === p5.Tree.CIRCLE\n ? Math.sqrt(dx * dx + dy * dy) < r\n : (Math.abs(dx) < r && Math.abs(dy) < r);\n };\n \n // -------------------------------------------------------------------------\n // Drawing helpers (bullsEye / cross)\n // -------------------------------------------------------------------------\n \n /**\n * @private\n * Draws a circle primitive in the *current* renderer space.\n *\n * This is a geometry primitive (lines / triangles in the XY plane at z=0),\n * so it can be used in 3D *or* in HUD/screen space depending on the caller:\n * - Call inside `beginHUD()/endHUD()` to interpret `x,y,radius` in screen pixels.\n * - Call outside HUD to interpret them in the current 3D space units.\n *\n * @param {object} [opts]\n * @param {boolean} [opts.filled=false] Whether to fill the circle.\n * @param {number} [opts.x=width/2] Center x in current space.\n * @param {number} [opts.y=height/2] Center y in current space.\n * @param {number} [opts.radius=100] Radius in current space.\n * @param {number} [opts.detail=50] Segment count.\n */\n p5.RendererGL.prototype._circle = function ({\n filled = false,\n x = this.width / 2,\n y = this.height / 2,\n radius = 100,\n detail = 50\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n p.push();\n p.translate(x, y);\n if (filled) {\n p.beginShape(p.TRIANGLE_STRIP);\n for (let t = 0; t <= detail; t++) {\n const cx = Math.cos(t * (2 * Math.PI) / detail);\n const cy = Math.sin(t * (2 * Math.PI) / detail);\n p.vertex(0, 0, 0, 0.5, 0.5);\n p.vertex(radius * cx, radius * cy, 0, (cx * 0.5) + 0.5, (cy * 0.5) + 0.5);\n }\n p.endShape();\n } else {\n const angle = (2 * Math.PI) / detail;\n let last = { x: radius, y: 0 };\n for (let i = 1; i <= detail; i++) {\n const pos = { x: Math.cos(i * angle) * radius, y: Math.sin(i * angle) * radius };\n p.line(last.x, last.y, pos.x, pos.y);\n last = pos;\n }\n }\n p.pop();\n };\n \n /**\n * Draws a cross in HUD space (`x,y` in screen coordinates).\n *\n * If `x` and `y` are not provided, the cross is placed at the screen position\n * corresponding to the origin of `mMatrix`.\n *\n * If `mMatrix` is used (x/y omitted), `size` is interpreted in world units\n * and converted to pixels using `pixelRatio()` at the corresponding world point.\n *\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.mMatrix] Model-space matrix origin to compute (x, y) from.\n * @param {number} [opts.x] Screen x coordinate in HUD space (pixels).\n * @param {number} [opts.y] Screen y coordinate in HUD space (pixels).\n * @param {number} [opts.size=50] Cross size (pixels in HUD space, or world units when deriving x/y).\n * @param {p5.Matrix} [opts.eMatrix] Eye matrix override.\n * @param {p5.Matrix} [opts.pMatrix] Projection matrix override.\n * @param {p5.Matrix} [opts.vMatrix] View (camera) matrix override.\n * @param {p5.Matrix} [opts.pvMatrix] Projection-view matrix override.\n */\n fn.cross = function (opts) {\n _rendererGL(this)?.cross(opts);\n return this;\n };\n \n p5.RendererGL.prototype.cross = function ({\n mMatrix = this.mMatrix(),\n x,\n y,\n size = 50,\n eMatrix,\n pMatrix,\n vMatrix,\n pvMatrix\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n \n if (x == null || y == null) {\n const screen = this.transformPosition({ from: mMatrix, to: p5.Tree.SCREEN, pMatrix, vMatrix, pvMatrix });\n x = screen.x;\n y = screen.y;\n const world = this.transformPosition({ from: mMatrix, to: p5.Tree.WORLD, eMatrix });\n size = size / this.pixelRatio(world);\n }\n const half = size / 2.0;\n this.beginHUD();\n p.line(x - half, y, x + half, y);\n p.line(x, y - half, x, y + half);\n this.endHUD();\n };\n \n /**\n * Draws a bulls-eye on the screen (HUD space): either a circle or square-corners,\n * plus a center cross.\n *\n * If `x` and `y` are not provided, the bulls-eye is placed at the screen position\n * corresponding to the origin of `mMatrix`.\n *\n * If `mMatrix` is used (x/y omitted), `size` is interpreted in world units\n * and converted to pixels using `pixelRatio()` at the corresponding world point.\n *\n * @param {object} [opts]\n * @param {p5.Matrix} [opts.mMatrix] Model-space matrix origin to compute (x, y) from.\n * @param {number} [opts.x] Screen x coordinate in HUD space (pixels).\n * @param {number} [opts.y] Screen y coordinate in HUD space (pixels).\n * @param {number} [opts.size=50] Bulls-eye diameter (pixels in HUD space, or world units when deriving x/y).\n * @param {number} [opts.shape=p5.Tree.CIRCLE] Either `p5.Tree.CIRCLE` or `p5.Tree.SQUARE`.\n * @param {p5.Matrix} [opts.eMatrix] Eye matrix override.\n * @param {p5.Matrix} [opts.pMatrix] Projection matrix override.\n * @param {p5.Matrix} [opts.vMatrix] View (camera) matrix override.\n * @param {p5.Matrix} [opts.pvMatrix] Projection-view matrix override.\n */\n fn.bullsEye = function (opts) {\n _rendererGL(this)?.bullsEye(opts);\n return this;\n };\n \n p5.RendererGL.prototype.bullsEye = function ({\n mMatrix = this.mMatrix(),\n x,\n y,\n size = 50,\n shape = p5.Tree.CIRCLE,\n eMatrix,\n pMatrix,\n vMatrix,\n pvMatrix\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n if (x == null || y == null) {\n const screen = this.transformPosition({ from: mMatrix, to: p5.Tree.SCREEN, pMatrix, vMatrix, pvMatrix });\n x = screen.x;\n y = screen.y;\n const world = this.transformPosition({ from: mMatrix, to: p5.Tree.WORLD, eMatrix });\n size = size / this.pixelRatio(world);\n }\n const half = size / 2.0;\n const corner = 0.6 * half;\n this.beginHUD();\n if (shape === p5.Tree.CIRCLE) {\n this._circle({ x, y, radius: half });\n } else {\n p.line(x - half, y - half + corner, x - half, y - half);\n p.line(x - half, y - half, x - half + corner, y - half);\n p.line(x + half - corner, y - half, x + half, y - half);\n p.line(x + half, y - half, x + half, y - half + corner);\n p.line(x + half, y + half - corner, x + half, y + half);\n p.line(x + half, y + half, x + half - corner, y + half);\n p.line(x - half + corner, y + half, x - half, y + half);\n p.line(x - half, y + half, x - half, y + half - corner);\n }\n // Center cross (0.6 * size), in HUD space.\n const crossHalf = 0.6 * half;\n p.line(x - crossHalf, y, x + crossHalf, y);\n p.line(x, y - crossHalf, x, y + crossHalf);\n this.endHUD();\n };\n \n // ---------------------------------------------------------------------------\n // View frustum (pg frustum display)\n // ---------------------------------------------------------------------------\n \n fn.viewFrustum = function (opts) {\n _rendererGL(this)?.viewFrustum(opts);\n return this;\n };\n \n /**\n * Displays a view frustum, either from a pg (p5.Graphics / p5.RendererGL) or from eMatrix/pMatrix.\n *\n * @param {Object} [opts]\n * @param {p5.Matrix} [opts.vMatrix=this.vMatrix()] desired view matrix (world -> this eye) for drawing the frustum.\n * @param {p5.RendererGL|p5.Graphics} [opts.pg] renderer/pg whose frustum is to be displayed.\n * @param {p5.Matrix} [opts.eMatrix=pg?.eMatrix()] eye matrix defining frustum pose (eye -> world).\n * @param {p5.Matrix} [opts.pMatrix=pg?.pMatrix()] projection matrix defining frustum projection.\n * @param {number} [opts.bits=p5.Tree.NEAR|p5.Tree.FAR] bitmask (NEAR/FAR/BODY/APEX).\n * @param {Function|false|null} [opts.viewer=...] callback drawn at the frustum origin (in frustum space).\n */\n p5.RendererGL.prototype.viewFrustum = function ({\n vMatrix = this.vMatrix(),\n pg,\n eMatrix = pg?.eMatrix(),\n pMatrix = pg?.pMatrix(),\n bits = p5.Tree.NEAR | p5.Tree.FAR,\n viewer = () => this.axes({ size: 50, bits: p5.Tree.X | p5.Tree._X | p5.Tree.Y | p5.Tree._Y | p5.Tree.Z | p5.Tree._Z })\n } = {}) {\n const p = this._pInst;\n if (!p) return;\n if (this === pg) {\n console.error('displaying viewFrustum requires a pg different than this');\n return;\n }\n if (!pMatrix || !eMatrix) {\n console.error('displaying viewFrustum requires either a pg or projection and eye matrices');\n return;\n }\n const states = this.states;\n const uView = states?.uViewMatrix;\n if (!uView) return;\n p.push();\n p.resetMatrix();\n // Override view matrix in-place (fast path: no inversion).\n // Save previous values so we can restore them after drawing.\n const prevView = uView.copy();\n uView.set(vMatrix);\n // Apply frustum camera pose (eye -> world) as a model transform.\n this.applyMatrix(...eMatrix.mat4);\n // Optional viewer at frustum origin\n typeof viewer === 'function' && viewer();\n const isOrtho = pMatrix.isOrtho();\n const apex = !isOrtho && ((bits & p5.Tree.APEX) !== 0);\n const n = -pMatrix.nPlane();\n const f = -pMatrix.fPlane();\n const l = pMatrix.lPlane();\n const r = pMatrix.rPlane();\n // hack preserved (sign handling for t/b differs in ortho vs persp)\n const t = isOrtho ? -pMatrix.tPlane() : pMatrix.tPlane();\n const b = isOrtho ? -pMatrix.bPlane() : pMatrix.bPlane();\n // far plane corners\n const ratio = isOrtho ? 1 : f / n;\n const _l = ratio * l;\n const _r = ratio * r;\n const _b = ratio * b;\n const _t = ratio * t;\n // FAR plane\n if ((bits & p5.Tree.FAR) !== 0) {\n this.beginShape();\n this.vertex(_l, _t, f);\n this.vertex(_r, _t, f);\n this.vertex(_r, _b, f);\n this.vertex(_l, _b, f);\n this.endShape(p5.prototype.CLOSE);\n } else {\n this.line(_l, _t, f, _r, _t, f);\n this.line(_r, _t, f, _r, _b, f);\n this.line(_r, _b, f, _l, _b, f);\n this.line(_l, _b, f, _l, _t, f);\n }\n // BODY\n if ((bits & p5.Tree.BODY) !== 0) {\n this.beginShape();\n this.vertex(_l, _t, f);\n this.vertex(l, t, n);\n this.vertex(r, t, n);\n this.vertex(_r, _t, f);\n this.endShape();\n this.beginShape();\n this.vertex(_r, _t, f);\n this.vertex(r, t, n);\n this.vertex(r, b, n);\n this.vertex(_r, _b, f);\n this.endShape();\n this.beginShape();\n this.vertex(_r, _b, f);\n this.vertex(r, b, n);\n this.vertex(l, b, n);\n this.vertex(_l, _b, f);\n this.endShape();\n this.beginShape();\n this.vertex(l, t, n);\n this.vertex(_l, _t, f);\n this.vertex(_l, _b, f);\n this.vertex(l, b, n);\n this.endShape();\n if (apex) {\n this.line(0, 0, 0, r, t, n);\n this.line(0, 0, 0, l, t, n);\n this.line(0, 0, 0, l, b, n);\n this.line(0, 0, 0, r, b, n);\n }\n } else {\n this.line(apex ? 0 : r, apex ? 0 : t, apex ? 0 : n, _r, _t, f);\n this.line(apex ? 0 : l, apex ? 0 : t, apex ? 0 : n, _l, _t, f);\n this.line(apex ? 0 : l, apex ? 0 : b, apex ? 0 : n, _l, _b, f);\n this.line(apex ? 0 : r, apex ? 0 : b, apex ? 0 : n, _r, _b, f);\n }\n // NEAR plane\n if ((bits & p5.Tree.NEAR) !== 0) {\n this.beginShape();\n this.vertex(l, t, n);\n this.vertex(r, t, n);\n this.vertex(r, b, n);\n this.vertex(l, b, n);\n this.endShape(p5.prototype.CLOSE);\n } else {\n this.line(l, t, n, r, t, n);\n this.line(r, t, n, r, b, n);\n this.line(r, b, n, l, b, n);\n this.line(l, b, n, l, t, n);\n }\n // Restore previous view matrix (no try/finally as requested).\n uView.set(prevView);\n p.pop();\n };\n \n // ---------------------------------------------------------------------------\n // Visibility (frustum culling queries)\n // ---------------------------------------------------------------------------\n \n /**\n * Returns object visibility with respect to the current view frustum.\n * Object may be either:\n * - a point (center),\n * - a sphere (center + radius),\n * - or an axis-aligned box (corner1 + corner2).\n *\n * @returns {number} One of p5.Tree.VISIBLE, p5.Tree.INVISIBLE, p5.Tree.SEMIVISIBLE.\n */\n fn.visibility = function (...args) {\n return _rendererGL(this).visibility(...args);\n };\n \n /**\n * Returns the 6 plane equations of the view frustum in world space.\n * @returns {Object}\n */\n fn.bounds = function (opts = {}) {\n return _rendererGL(this).bounds(opts);\n };\n \n /**\n * Returns signed distance from a point to a frustum plane.\n * @returns {number}\n */\n fn.distanceToBound = function (...args) {\n return _rendererGL(this).distanceToBound(...args);\n };\n \n /**\n * Parses visibility query arguments.\n * Supports:\n * - visibility({ corner1, corner2, center, radius, bounds })\n * - visibility(center[, radius][, bounds])\n * - visibility(corner1, corner2[, bounds])\n *\n * @private\n */\n p5.RendererGL.prototype._parseVisibilityArgs = function (...args) {\n let corner1;\n let corner2;\n let center;\n let radius;\n let pendingRadius;\n let bounds;\n const vecs = [];\n const isPlainObject = v => {\n if (!v || typeof v !== 'object') return false;\n if (Array.isArray(v)) return false;\n if (ArrayBuffer.isView(v)) return false;\n return Object.getPrototypeOf(v) === Object.prototype;\n };\n for (const arg of args) {\n if (arg instanceof p5.Vector || Array.isArray(arg)) {\n vecs.push(arg);\n continue;\n }\n if (typeof arg === 'number' && Number.isFinite(arg) && radius === undefined) {\n // Only accept a radius if we already have (or will infer) a center.\n center ? (radius = arg) : (pendingRadius = arg);\n continue;\n }\n if (isPlainObject(arg)) {\n if ('corner1' in arg || 'corner2' in arg || 'center' in arg || 'radius' in arg || 'bounds' in arg) {\n corner1 = arg.corner1 ?? corner1;\n corner2 = arg.corner2 ?? corner2;\n center = arg.center ?? center;\n radius = arg.radius ?? radius;\n bounds = arg.bounds ?? bounds;\n } else {\n bounds = arg;\n }\n }\n }\n // Ordering rule: if 2 vectors are provided, first is corner1, second is corner2.\n if (!corner1 && !corner2) {\n if (!center && vecs.length === 1) {\n center = vecs[0];\n } else if (!corner1 && !corner2 && vecs.length >= 2) {\n corner1 = vecs[0];\n corner2 = vecs[1];\n }\n }\n // Commit leading radius only if we ended up with a center (supports visibility(radius, center[, bounds])).\n if (radius === undefined && pendingRadius !== undefined && center) {\n radius = pendingRadius;\n }\n return { corner1, corner2, center, radius, bounds };\n };\n \n /**\n * Returns object visibility with respect to the current view frustum.\n *\n * Supported forms:\n * - visibility(center[, radius][, bounds])\n * - visibility(radius, center[, bounds])\n * - visibility(corner1, corner2[, bounds])\n * - visibility({ corner1, corner2, center, radius, bounds })\n *\n * @param {Object} [opts]\n * @param {p5.Vector|number[]} [opts.corner1] First box corner (use with corner2).\n * @param {p5.Vector|number[]} [opts.corner2] Second box corner (use with corner1).\n * @param {p5.Vector|number[]} [opts.center] Sphere (or point) center.\n * @param {number} [opts.radius] Sphere radius (if omitted, center is treated as point).\n * @param {Object} [opts.bounds] Frustum plane equations (defaults to this.bounds()).\n * @returns {number} One of p5.Tree.VISIBLE, p5.Tree.INVISIBLE, p5.Tree.SEMIVISIBLE.\n */\n p5.RendererGL.prototype.visibility = function (...args) {\n const { corner1, corner2, center, radius, bounds } = this._parseVisibilityArgs(...args);\n const b = bounds ?? this.bounds();\n return center ? (radius ? this._ballVisibility(center, radius, b) : this._pointVisibility(center, b))\n : (corner1 && corner2 ? this._boxVisibility(corner1, corner2, b)\n : (console.error('[p5.tree] visibility: could not parse query.'), p5.Tree.INVISIBLE));\n };\n \n p5.RendererGL.prototype._pointVisibility = function (point, bounds = this.bounds()) {\n for (const key in bounds) {\n const d = this.distanceToBound(point, key, bounds);\n if (d > 0) return p5.Tree.INVISIBLE;\n if (d === 0) return p5.Tree.SEMIVISIBLE;\n }\n return p5.Tree.VISIBLE;\n };\n \n p5.RendererGL.prototype._ballVisibility = function (center, radius, bounds = this.bounds()) {\n let allInForAllPlanes = true;\n for (const key in bounds) {\n const d = this.distanceToBound(center, key, bounds);\n if (d > radius) return p5.Tree.INVISIBLE;\n if (d > 0 || -d < radius) allInForAllPlanes = false;\n }\n return allInForAllPlanes ? p5.Tree.VISIBLE : p5.Tree.SEMIVISIBLE;\n };\n \n p5.RendererGL.prototype._boxVisibility = function (corner1, corner2, bounds = this.bounds()) {\n const asVec3 = v =>\n v instanceof p5.Vector ? v : new p5.Vector(v?.[0] ?? 0, v?.[1] ?? 0, v?.[2] ?? 0);\n corner1 = asVec3(corner1);\n corner2 = asVec3(corner2);\n let allInForAllPlanes = true;\n for (const key in bounds) {\n let allOut = true;\n for (let c = 0; c < 8; ++c) {\n const pos = new p5.Vector(\n (c & 4) !== 0 ? corner1.x : corner2.x,\n (c & 2) !== 0 ? corner1.y : corner2.y,\n (c & 1) !== 0 ? corner1.z : corner2.z\n );\n if (this.distanceToBound(pos, key, bounds) > 0) {\n allInForAllPlanes = false;\n } else {\n allOut = false;\n }\n }\n if (allOut) return p5.Tree.INVISIBLE;\n }\n return allInForAllPlanes ? p5.Tree.VISIBLE : p5.Tree.SEMIVISIBLE;\n };\n \n /**\n * Returns the 6 plane equations of the view frustum bounds defined in world space.\n * Each plane equation is of the form:\n * a*x + b*y + c*z + d = 0\n *\n * @param {Object} [opts]\n * @param {p5.Matrix} [opts.vMatrix] View matrix (world -> eye).\n * @param {p5.Matrix} [opts.eMatrix] Eye matrix (eye -> world).\n * @returns {Object} Object keyed by p5.Tree.LEFT/RIGHT/NEAR/FAR/TOP/BOTTOM.\n */\n p5.RendererGL.prototype.bounds = function ({\n vMatrix,\n eMatrix\n } = {}) {\n const n = this.nPlane();\n const f = this.fPlane();\n const l = this.lPlane();\n const r = this.rPlane();\n const b = this.bPlane();\n const t = this.tPlane();\n const normals = Array(6);\n const distances = Array(6);\n // Camera position and basis in world space.\n const pos = this._position([0, 0, 0], { from: p5.Tree.EYE, to: p5.Tree.WORLD, eMatrix });\n const viewDir = this._direction([0, 0, -1], { from: p5.Tree.EYE, to: p5.Tree.WORLD, vMatrix });\n const up = this._direction([0, 1, 0], { from: p5.Tree.EYE, to: p5.Tree.WORLD, vMatrix });\n const right = this._direction([1, 0, 0], { from: p5.Tree.EYE, to: p5.Tree.WORLD, vMatrix });\n const posViewDir = p5.Vector.dot(pos, viewDir);\n if (this.isOrtho()) {\n normals[0] = p5.Vector.mult(right, -1);\n normals[1] = right;\n normals[4] = up;\n normals[5] = p5.Vector.mult(up, -1);\n distances[0] = p5.Vector.dot(p5.Vector.sub(pos, p5.Vector.mult(right, -l)), normals[0]);\n distances[1] = p5.Vector.dot(p5.Vector.add(pos, p5.Vector.mult(right, r)), normals[1]);\n distances[4] = p5.Vector.dot(p5.Vector.add(pos, p5.Vector.mult(up, -b)), normals[4]);\n distances[5] = p5.Vector.dot(p5.Vector.sub(pos, p5.Vector.mult(up, t)), normals[5]);\n } else {\n const hfovr = Math.atan2(r, n);\n const shfovr = Math.sin(hfovr);\n const chfovr = Math.cos(hfovr);\n const hfovl = Math.atan2(l, n);\n const shfovl = Math.sin(hfovl);\n const chfovl = Math.cos(hfovl);\n normals[0] = p5.Vector.add(p5.Vector.mult(viewDir, shfovl), p5.Vector.mult(right, -chfovl));\n normals[1] = p5.Vector.add(p5.Vector.mult(viewDir, -shfovr), p5.Vector.mult(right, chfovr));\n const fovt = Math.atan2(t, n);\n const sfovt = Math.sin(fovt);\n const cfovt = Math.cos(fovt);\n const fovb = Math.atan2(b, n);\n const sfovb = Math.sin(fovb);\n const cfovb = Math.cos(fovb);\n normals[4] = p5.Vector.add(p5.Vector.mult(viewDir, -sfovt), p5.Vector.mult(up, cfovt));\n normals[5] = p5.Vector.add(p5.Vector.mult(viewDir, sfovb), p5.Vector.mult(up, -cfovb));\n distances[0] = shfovl * posViewDir - chfovl * p5.Vector.dot(pos, right);\n distances[1] = -shfovr * posViewDir + chfovr * p5.Vector.dot(pos, right);\n distances[4] = -sfovt * posViewDir + cfovt * p5.Vector.dot(pos, up);\n distances[5] = sfovb * posViewDir - cfovb * p5.Vector.dot(pos, up);\n }\n // Near/far planes (common to ortho and perspective).\n normals[2] = p5.Vector.mult(viewDir, -1);\n normals[3] = viewDir;\n distances[2] = -posViewDir - n;\n distances[3] = posViewDir + f;\n const bounds = {};\n bounds[p5.Tree.LEFT] = { a: normals[0].x, b: normals[0].y, c: normals[0].z, d: distances[0] };\n bounds[p5.Tree.RIGHT] = { a: normals[1].x, b: normals[1].y, c: normals[1].z, d: distances[1] };\n bounds[p5.Tree.NEAR] = { a: normals[2].x, b: normals[2].y, c: normals[2].z, d: distances[2] };\n bounds[p5.Tree.FAR] = { a: normals[3].x, b: normals[3].y, c: normals[3].z, d: distances[3] };\n bounds[p5.Tree.TOP] = { a: normals[4].x, b: normals[4].y, c: normals[4].z, d: distances[4] };\n bounds[p5.Tree.BOTTOM] = { a: normals[5].x, b: normals[5].y, c: normals[5].z, d: distances[5] };\n return bounds;\n };\n \n /**\n * Returns signed distance between a point and a frustum plane.\n *\n * @param {p5.Vector|number[]} point\n * @param {number|string} key One of p5.Tree.LEFT/RIGHT/BOTTOM/TOP/NEAR/FAR.\n * @param {Object} [bounds] Plane equations (defaults to this.bounds()).\n * @returns {number}\n */\n p5.RendererGL.prototype.distanceToBound = function (...args) {\n let point;\n let key;\n let bounds = this.bounds();\n const asVec3 = v =>\n v instanceof p5.Vector ? v : new p5.Vector(v?.[0] ?? 0, v?.[1] ?? 0, v?.[2] ?? 0);\n for (const arg of args) {\n if (arg instanceof p5.Vector || Array.isArray(arg)) {\n point = asVec3(arg);\n } else if (typeof arg === 'string' || typeof arg === 'number') {\n key = arg;\n } else if (arg && typeof arg === 'object' && !Array.isArray(arg)) {\n bounds = arg;\n }\n }\n if (!point || key === undefined) {\n console.error('[p5.tree] distanceToBound: could not parse query.');\n return 0;\n }\n const eq = bounds[key];\n return p5.Vector.dot(point, new p5.Vector(eq.a, eq.b, eq.c)) - eq.d;\n };\n});\n"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "p5.tree",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Shader development and space transformations WEBGL addon library.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/p5.tree.esm.js",
|
|
7
|
+
"module": "dist/p5.tree.esm.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/p5.tree.esm.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "rollup -c",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"p5",
|
|
22
|
+
"p5.js",
|
|
23
|
+
"webgl",
|
|
24
|
+
"graphics",
|
|
25
|
+
"tree",
|
|
26
|
+
"shader",
|
|
27
|
+
"addon",
|
|
28
|
+
"spaces",
|
|
29
|
+
"camera",
|
|
30
|
+
"keyframes",
|
|
31
|
+
"geometry"
|
|
32
|
+
],
|
|
33
|
+
"author": "JP Charalambos <jpcharalambos@unal.edu.co>",
|
|
34
|
+
"license": "GPL-3.0-only",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/VisualComputing/p5.tree.git"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"p5": "^2.2.0-rc.5"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
44
|
+
"rollup": "^4.55.1"
|
|
45
|
+
}
|
|
46
|
+
}
|