From f4a6b214c3237de4c694ecf9fb59af314a276004 Mon Sep 17 00:00:00 2001 From: greggman Date: Tue, 14 May 2024 14:54:45 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20greggman?= =?UTF-8?q?/wgpu-matrix@023174b0de565b967a9a198fceac3f8dc1f7c086=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/2.x/mat4-impl.d.ts | 40 ++++++ dist/2.x/wgpu-matrix.js | 105 +++++++++++++- dist/2.x/wgpu-matrix.js.map | 2 +- dist/2.x/wgpu-matrix.min.js | 31 +++-- dist/2.x/wgpu-matrix.module.js | 105 +++++++++++++- dist/2.x/wgpu-matrix.module.js.map | 2 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/functions/mat4.frustumReverseZ.html | 17 +++ docs/functions/mat4.perspectiveReverseZ.html | 19 +++ docs/modules/mat4.html | 2 + package-lock.json | 4 +- package.json | 2 +- src/mat4-impl.ts | 112 ++++++++++++++- test/tests/mat4-test.js | 139 +++++++++++++++++++ 15 files changed, 551 insertions(+), 33 deletions(-) create mode 100644 docs/functions/mat4.frustumReverseZ.html create mode 100644 docs/functions/mat4.perspectiveReverseZ.html diff --git a/dist/2.x/mat4-impl.d.ts b/dist/2.x/mat4-impl.d.ts index 2f16fd3..63d25fb 100644 --- a/dist/2.x/mat4-impl.d.ts +++ b/dist/2.x/mat4-impl.d.ts @@ -242,6 +242,27 @@ export declare function getScaling(m: Mat4, dst?: Vec3): Vec3; * @returns The perspective matrix. */ export declare function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: Mat4): Mat4; +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 1 (at -zNear) to 0 (at -zFar) in the z dimension. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. (default = Infinity) + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */ export declare function perspectiveReverseZ(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar?: number, dst?: Mat4): Mat4; /** * Computes a 4-by-4 orthogonal transformation matrix that transforms from * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y @@ -277,6 +298,25 @@ export declare function ortho(left: number, right: number, bottom: number, top: * @returns The perspective projection matrix. */ export declare function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4; +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ +export declare function frustumReverseZ(left: number, right: number, bottom: number, top: number, near: number, far?: number, dst?: Mat4): Mat4; /** * Computes a 4-by-4 aim transformation. * diff --git a/dist/2.x/wgpu-matrix.js b/dist/2.x/wgpu-matrix.js index 85066d1..2f7dc21 100644 --- a/dist/2.x/wgpu-matrix.js +++ b/dist/2.x/wgpu-matrix.js @@ -1,4 +1,4 @@ -/* wgpu-matrix@2.8.3, license MIT */ +/* wgpu-matrix@2.9.0, license MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : @@ -3345,13 +3345,61 @@ dst[12] = 0; dst[13] = 0; dst[15] = 0; - if (zFar === Infinity) { + if (Number.isFinite(zFar)) { + const rangeInv = 1 / (zNear - zFar); + dst[10] = zFar * rangeInv; + dst[14] = zFar * zNear * rangeInv; + } + else { dst[10] = -1; dst[14] = -zNear; } + return dst; + } + /** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 1 (at -zNear) to 0 (at -zFar) in the z dimension. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. (default = Infinity) + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */ function perspectiveReverseZ(fieldOfViewYInRadians, aspect, zNear, zFar = Infinity, dst) { + dst = dst || new MatType(16); + const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5); + dst[0] = f / aspect; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + dst[4] = 0; + dst[5] = f; + dst[6] = 0; + dst[7] = 0; + dst[8] = 0; + dst[9] = 0; + dst[11] = -1; + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + if (zFar === Infinity) { + dst[10] = 0; + dst[14] = zNear; + } else { - const rangeInv = 1 / (zNear - zFar); - dst[10] = zFar * rangeInv; + const rangeInv = 1 / (zFar - zNear); + dst[10] = zNear * rangeInv; dst[14] = zFar * zNear * rangeInv; } return dst; @@ -3432,6 +3480,53 @@ dst[15] = 0; return dst; } + /** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ + function frustumReverseZ(left, right, bottom, top, near, far = Infinity, dst) { + dst = dst || new MatType(16); + const dx = (right - left); + const dy = (top - bottom); + dst[0] = 2 * near / dx; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + dst[4] = 0; + dst[5] = 2 * near / dy; + dst[6] = 0; + dst[7] = 0; + dst[8] = (left + right) / dx; + dst[9] = (top + bottom) / dy; + dst[11] = -1; + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + if (far === Infinity) { + dst[10] = 0; + dst[14] = near; + } + else { + const rangeInv = 1 / (far - near); + dst[10] = near * rangeInv; + dst[14] = far * near * rangeInv; + } + return dst; + } let xAxis; let yAxis; let zAxis; @@ -4099,6 +4194,7 @@ fromMat3: fromMat3, fromQuat: fromQuat, frustum: frustum, + frustumReverseZ: frustumReverseZ, getAxis: getAxis, getScaling: getScaling, getTranslation: getTranslation, @@ -4111,6 +4207,7 @@ negate: negate$1, ortho: ortho, perspective: perspective, + perspectiveReverseZ: perspectiveReverseZ, rotate: rotate, rotateX: rotateX$1, rotateY: rotateY$1, diff --git a/dist/2.x/wgpu-matrix.js.map b/dist/2.x/wgpu-matrix.js.map index 4a2e1f0..3c9a94e 100644 --- a/dist/2.x/wgpu-matrix.js.map +++ b/dist/2.x/wgpu-matrix.js.map @@ -1 +1 @@ -{"version":3,"file":"wgpu-matrix.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = b[0];\n const by = b[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec2, b: Vec2): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec2, b: Vec2): boolean {\n return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec2, b: Vec2, t: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec2, b: Vec2, t: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec2, b: Vec2, dst?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n *\n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n\n/**\n * Treat a 2D vector as a direction and set it's length\n *\n * @param a The vec2 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec2, len: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec2 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec2, maxLen: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n return lerp(a, b, 0.5, dst);\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec3, b: Vec3): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec3, b: Vec3): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec3, b: Vec3, t: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec3, b: Vec3, t: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec3, b: Vec3): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n\n return dst;\n}\n\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nexport function transformMat4Upper3x3(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec3, m: Mat3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nexport function transformQuat(v: Vec3, q: Quat, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec3) {\n dst = dst || new VecType(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst: Vec3) {\n dst = dst || new VecType(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Treat a 3D vector as a direction and set it's length\n *\n * @param a The vec3 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec3, len: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec3 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec3, maxLen: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n return lerp(a, b, 0.5, dst);\n}\n","\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\nimport Vec3, * as vec3 from './vec3-impl';\nimport * as utils from './utils';\n\nexport default Mat4;\n\nexport type Mat4LikeCtor = new (n: number) => Mat4;\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat4LikeCtor = Float32Array;\n\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nexport function setDefaultType(ctor: new (n: number) => Mat4) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number, v3?: number,\n v4?: number, v5?: number, v6?: number, v7?: number,\n v8?: number, v9?: number, v10?: number, v11?: number,\n v12?: number, v13?: number, v14?: number, v15?: number): Mat4 {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nexport function set(\n v0: number, v1: number, v2: number, v3: number,\n v4: number, v5: number, v6: number, v7: number,\n v8: number, v9: number, v10: number, v11: number,\n v12: number, v13: number, v14: number, v15: number,\n dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v0; dst[ 1] = v1; dst[ 2] = v2; dst[ 3] = v3;\n dst[ 4] = v4; dst[ 5] = v5; dst[ 6] = v6; dst[ 7] = v7;\n dst[ 8] = v8; dst[ 9] = v9; dst[10] = v10; dst[11] = v11;\n dst[12] = v12; dst[13] = v13; dst[14] = v14; dst[15] = v15;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nexport function fromMat3(m3: Mat3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m3[0]; dst[ 1] = m3[1]; dst[ 2] = m3[ 2]; dst[ 3] = 0;\n dst[ 4] = m3[4]; dst[ 5] = m3[5]; dst[ 6] = m3[ 6]; dst[ 7] = 0;\n dst[ 8] = m3[8]; dst[ 9] = m3[9]; dst[10] = m3[10]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2]; dst[ 3] = -m[ 3];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6]; dst[ 7] = -m[ 7];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10]; dst[11] = -m[11];\n dst[12] = -m[12]; dst[13] = -m[13]; dst[14] = -m[14]; dst[15] = -m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2]; dst[ 3] = m[ 3];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6]; dst[ 7] = m[ 7];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10]; dst[11] = m[11];\n dst[12] = m[12]; dst[13] = m[13]; dst[14] = m[14]; dst[15] = m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat4, b: Mat4): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 3] - b[ 3]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 7] - b[ 7]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON &&\n Math.abs(a[11] - b[11]) < utils.EPSILON &&\n Math.abs(a[12] - b[12]) < utils.EPSILON &&\n Math.abs(a[13] - b[13]) < utils.EPSILON &&\n Math.abs(a[14] - b[14]) < utils.EPSILON &&\n Math.abs(a[15] - b[15]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat4, b: Mat4): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 3] === b[ 3] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 7] === b[ 7] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nexport function identity(dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20; dst[ 3] = m30;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21; dst[ 7] = m31;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22; dst[11] = m32;\n dst[12] = m03; dst[13] = m13; dst[14] = m23; dst[15] = m33;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n\n dst[ 0] = d * t0;\n dst[ 1] = d * t1;\n dst[ 2] = d * t2;\n dst[ 3] = d * t3;\n dst[ 4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[ 5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[ 6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[ 7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[ 8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[ 9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat4): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat4, b: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a13 = a[ 4 + 3];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const a23 = a[ 8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b13 = b[ 4 + 3];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n const b23 = b[ 8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[ 3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[ 7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n\n return dst;\n}\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 3] = a[ 3];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n dst[ 7] = a[ 7];\n dst[ 8] = a[ 8];\n dst[ 9] = a[ 9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nexport function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n } else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nexport function ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n\n return dst;\n}\n\nlet xAxis: Vec3;\nlet yAxis: Vec3;\nlet zAxis: Vec3;\n\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function aim(position: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(target, position, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = position[0]; dst[13] = position[1]; dst[14] = position[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function cameraAim(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = eye[0]; dst[13] = eye[1]; dst[14] = eye[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nexport function lookAt(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = yAxis[0]; dst[ 2] = zAxis[0]; dst[ 3] = 0;\n dst[ 4] = xAxis[1]; dst[ 5] = yAxis[1]; dst[ 6] = zAxis[1]; dst[ 7] = 0;\n dst[ 8] = xAxis[2]; dst[ 9] = yAxis[2]; dst[10] = zAxis[2]; dst[11] = 0;\n\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = v[0]; dst[13] = v[1]; dst[14] = v[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 3] = m03;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n dst[ 7] = m13;\n dst[ 8] = m20;\n dst[ 9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationX(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = c; dst[ 6] = s; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = -s; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateX(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n\n if (m !== dst) {\n dst[ 0] = m[ 0];\n dst[ 1] = m[ 1];\n dst[ 2] = m[ 2];\n dst[ 3] = m[ 3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationY(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = 0; dst[ 2] = -s; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = s; dst[ 9] = 0; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateY(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 - s * m20;\n dst[ 1] = c * m01 - s * m21;\n dst[ 2] = c * m02 - s * m22;\n dst[ 3] = c * m03 - s * m23;\n dst[ 8] = c * m20 + s * m00;\n dst[ 9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n\n if (m !== dst) {\n dst[ 4] = m[ 4];\n dst[ 5] = m[ 5];\n dst[ 6] = m[ 6];\n dst[ 7] = m[ 7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationZ(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateZ(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n dst[ 3] = c * m03 + s * m13;\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n dst[ 7] = c * m13 - s * m03;\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport function axisRotation(axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n dst[ 0] = xx + (1 - xx) * c;\n dst[ 1] = x * y * oneMinusCosine + z * s;\n dst[ 2] = x * z * oneMinusCosine - y * s;\n dst[ 3] = 0;\n dst[ 4] = x * y * oneMinusCosine - z * s;\n dst[ 5] = yy + (1 - yy) * c;\n dst[ 6] = y * z * oneMinusCosine + x * s;\n dst[ 7] = 0;\n dst[ 8] = x * z * oneMinusCosine + y * s;\n dst[ 9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport const rotation = axisRotation;\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function axisRotate(m: Mat4, axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n\n dst[ 0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[ 1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[ 2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[ 3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[ 4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[ 5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[ 6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[ 7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[ 8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[ 9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport const rotate = axisRotate;\n\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = v[2]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n dst[ 3] = v0 * m[0 * 4 + 3];\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n dst[ 7] = v1 * m[1 * 4 + 3];\n dst[ 8] = v2 * m[2 * 4 + 0];\n dst[ 9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = s; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat4, s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n dst[ 3] = s * m[0 * 4 + 3];\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n dst[ 7] = s * m[1 * 4 + 3];\n dst[ 8] = s * m[2 * 4 + 0];\n dst[ 9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link quat.setDefaultType}.\n */\nexport type Quat = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let QuatType: new (n: number) => Quat = Float32Array;\n\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nexport function setDefaultType(ctor: new (n: number) => Quat) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Quat {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Quat, create, setDefaultType, QuatType } from './quat';\nimport { Mat3 } from './mat3.js';\nimport { Mat4 } from './mat4.js';\nimport { Vec3 } from './vec3.js';\nimport * as vec3 from './vec3-impl.js';\n\nexport type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx';\n\nexport default Quat;\nexport { create, setDefaultType };\n\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Quat) {\n dst = dst || new QuatType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nexport function fromAxisAngle(axis: Vec3, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n\n return dst;\n}\n\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nexport function toAxisAngle(q: Quat, dst?: Vec3): { angle: number, axis: Vec3 } {\n dst = dst || vec3.create(4);\n\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > utils.EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n } else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n return { angle, axis: dst };\n}\n\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nexport function angle(a: Quat, b: Quat) {\n const d = dot(a, b);\n return Math.acos(2 * d * d - 1);\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function multiply(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n\n return dst;\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport const mul = multiply;\n\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateX(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateY(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateZ(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n\n return dst;\n}\n\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function slerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n let scale0;\n let scale1;\n\n if (1.0 - cosOmega > utils.EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n\n return dst;\n}\n\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nexport function inverse(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n\n return dst;\n}\n\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nexport function conjugate(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function fromMat(m: Mat3 | Mat4, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n\n 0 1 2\n 4 5 6\n 8 9 10\n */\n\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n } else {\n // |w| <= 1/2\n let i = 0;\n\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n\n const invRoot = 0.5 / root;\n\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nexport function fromEuler(\n xAngleInRadians: number,\n yAngleInRadians: number,\n zAngleInRadians: number,\n order: RotationOrder,\n dst?: Quat) {\n dst = dst || new QuatType(4);\n\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n\n return dst;\n}\n\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nexport function copy(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nexport const clone = copy;\n\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nexport function add(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport function subtract(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function mulScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function divScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nexport function dot(a: Quat, b: Quat): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport function length(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport function lengthSq(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nexport function normalize(v: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nexport function equalsApproximately(a: Quat, b: Quat): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nexport function equals(a: Quat, b: Quat): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nexport function identity(dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n}\n\nlet tempVec3: Vec3;\nlet xUnitVec3: Vec3;\nlet yUnitVec3: Vec3;\n\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function rotationTo(aUnit: Vec3, bUnit: Vec3, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempVec3 = tempVec3 || vec3.create();\n xUnitVec3 = xUnitVec3 || vec3.create(1, 0, 0);\n yUnitVec3 = yUnitVec3 || vec3.create(0, 1, 0);\n\n const dot = vec3.dot(aUnit, bUnit);\n if (dot < -0.999999) {\n vec3.cross(xUnitVec3, aUnit, tempVec3);\n if (vec3.len(tempVec3) < 0.000001) {\n vec3.cross(yUnitVec3, aUnit, tempVec3);\n }\n\n vec3.normalize(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n\n return dst;\n } else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n } else {\n vec3.cross(aUnit, bUnit, tempVec3);\n\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n\n return normalize(dst, dst);\n }\n}\n\nlet tempQuat1: Quat;\nlet tempQuat2: Quat;\n\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nexport function sqlerp(\n a: Quat,\n b: Quat,\n c: Quat,\n d: Quat,\n t: number,\n dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec4.setDefaultType}.\n */\nexport type Vec4 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec4 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nexport function setDefaultType(ctor: new (n: number) => Vec4) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Vec4 {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec4, create, setDefaultType, VecType } from './vec4';\nimport { Mat4 } from './mat4';\n\nexport default Vec4;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec4, min = 0, max = 1, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec4, b: Vec4, scale: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec4, b: Vec4): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec4, b: Vec4): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec4, b: Vec4, t: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec4, b: Vec4, t: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec4, b: Vec4): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec4, m: Mat4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n\n dst[0] = m[0] * x + m[4] * y + m[ 8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[ 9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n\n return dst;\n}\n\n\n/**\n * Treat a 4D vector as a direction and set it's length\n *\n * @param a The vec4 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec4, len: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec4 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec4, maxLen: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n return lerp(a, b, 0.5, dst);\n}\n","import Mat3, * as mat3 from './mat3-impl';\nimport Mat4, * as mat4 from './mat4-impl';\nimport Quat, * as quat from './quat-impl';\nimport Vec2, * as vec2 from './vec2-impl';\nimport Vec3, * as vec3 from './vec3-impl';\nimport Vec4, * as vec4 from './vec4-impl';\nimport * as utils from './utils';\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nexport function setDefaultType(ctor: new (n: number) => Float32Array | Float64Array | number[]) {\n mat3.setDefaultType(ctor);\n mat4.setDefaultType(ctor);\n quat.setDefaultType(ctor);\n vec2.setDefaultType(ctor);\n vec3.setDefaultType(ctor);\n vec4.setDefaultType(ctor);\n}\n\nexport {\n Mat3,\n mat3,\n Mat4,\n mat4,\n Quat,\n quat,\n utils,\n Vec2,\n vec2,\n Vec3,\n vec3,\n Vec4,\n vec4,\n};"],"names":["lerp","VecType","setDefaultType","create","fromValues","set","ceil","floor","round","clamp","add","addScaled","angle","dot","subtract","sub","equalsApproximately","utils.EPSILON","equals","lerpV","max","min","mulScalar","scale","divScalar","inverse","invert","cross","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","setLength","truncate","midpoint","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GA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CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,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"} \ No newline at end of file +{"version":3,"file":"wgpu-matrix.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = b[0];\n const by = b[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec2, b: Vec2): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec2, b: Vec2): boolean {\n return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec2, b: Vec2, t: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec2, b: Vec2, t: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec2, b: Vec2, dst?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n *\n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n\n/**\n * Treat a 2D vector as a direction and set it's length\n *\n * @param a The vec2 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec2, len: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec2 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec2, maxLen: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n return lerp(a, b, 0.5, dst);\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec3, b: Vec3): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec3, b: Vec3): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec3, b: Vec3, t: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec3, b: Vec3, t: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec3, b: Vec3): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n\n return dst;\n}\n\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nexport function transformMat4Upper3x3(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec3, m: Mat3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nexport function transformQuat(v: Vec3, q: Quat, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec3) {\n dst = dst || new VecType(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst: Vec3) {\n dst = dst || new VecType(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Treat a 3D vector as a direction and set it's length\n *\n * @param a The vec3 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec3, len: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec3 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec3, maxLen: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n return lerp(a, b, 0.5, dst);\n}\n","\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\nimport Vec3, * as vec3 from './vec3-impl';\nimport * as utils from './utils';\n\nexport default Mat4;\n\nexport type Mat4LikeCtor = new (n: number) => Mat4;\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat4LikeCtor = Float32Array;\n\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nexport function setDefaultType(ctor: new (n: number) => Mat4) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number, v3?: number,\n v4?: number, v5?: number, v6?: number, v7?: number,\n v8?: number, v9?: number, v10?: number, v11?: number,\n v12?: number, v13?: number, v14?: number, v15?: number): Mat4 {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nexport function set(\n v0: number, v1: number, v2: number, v3: number,\n v4: number, v5: number, v6: number, v7: number,\n v8: number, v9: number, v10: number, v11: number,\n v12: number, v13: number, v14: number, v15: number,\n dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v0; dst[ 1] = v1; dst[ 2] = v2; dst[ 3] = v3;\n dst[ 4] = v4; dst[ 5] = v5; dst[ 6] = v6; dst[ 7] = v7;\n dst[ 8] = v8; dst[ 9] = v9; dst[10] = v10; dst[11] = v11;\n dst[12] = v12; dst[13] = v13; dst[14] = v14; dst[15] = v15;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nexport function fromMat3(m3: Mat3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m3[0]; dst[ 1] = m3[1]; dst[ 2] = m3[ 2]; dst[ 3] = 0;\n dst[ 4] = m3[4]; dst[ 5] = m3[5]; dst[ 6] = m3[ 6]; dst[ 7] = 0;\n dst[ 8] = m3[8]; dst[ 9] = m3[9]; dst[10] = m3[10]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2]; dst[ 3] = -m[ 3];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6]; dst[ 7] = -m[ 7];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10]; dst[11] = -m[11];\n dst[12] = -m[12]; dst[13] = -m[13]; dst[14] = -m[14]; dst[15] = -m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2]; dst[ 3] = m[ 3];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6]; dst[ 7] = m[ 7];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10]; dst[11] = m[11];\n dst[12] = m[12]; dst[13] = m[13]; dst[14] = m[14]; dst[15] = m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat4, b: Mat4): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 3] - b[ 3]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 7] - b[ 7]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON &&\n Math.abs(a[11] - b[11]) < utils.EPSILON &&\n Math.abs(a[12] - b[12]) < utils.EPSILON &&\n Math.abs(a[13] - b[13]) < utils.EPSILON &&\n Math.abs(a[14] - b[14]) < utils.EPSILON &&\n Math.abs(a[15] - b[15]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat4, b: Mat4): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 3] === b[ 3] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 7] === b[ 7] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nexport function identity(dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20; dst[ 3] = m30;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21; dst[ 7] = m31;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22; dst[11] = m32;\n dst[12] = m03; dst[13] = m13; dst[14] = m23; dst[15] = m33;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n\n dst[ 0] = d * t0;\n dst[ 1] = d * t1;\n dst[ 2] = d * t2;\n dst[ 3] = d * t3;\n dst[ 4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[ 5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[ 6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[ 7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[ 8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[ 9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat4): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat4, b: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a13 = a[ 4 + 3];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const a23 = a[ 8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b13 = b[ 4 + 3];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n const b23 = b[ 8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[ 3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[ 7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n\n return dst;\n}\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 3] = a[ 3];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n dst[ 7] = a[ 7];\n dst[ 8] = a[ 8];\n dst[ 9] = a[ 9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nexport function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (Number.isFinite(zFar)) {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n } else {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 1 (at -zNear) to 0 (at -zFar) in the z dimension.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane. (default = Infinity)\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */export function perspectiveReverseZ(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar = Infinity, dst?: Mat4) {\n dst = dst || new MatType(16);\n\n const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5);\n\n dst[ 0] = f / aspect;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n\n dst[ 4] = 0;\n dst[ 5] = f;\n dst[ 6] = 0;\n dst[ 7] = 0;\n\n dst[ 8] = 0;\n dst[ 9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (zFar === Infinity) {\n dst[10] = 0;\n dst[14] = zNear;\n } else {\n const rangeInv = 1 / (zFar - zNear);\n dst[10] = zNear * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nexport function ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustumReverseZ(left: number, right: number, bottom: number, top: number, near: number, far = Infinity, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (far === Infinity) {\n dst[10] = 0;\n dst[14] = near;\n } else {\n const rangeInv = 1 / (far - near);\n dst[10] = near * rangeInv;\n dst[14] = far * near * rangeInv;\n }\n\n return dst;\n}\n\nlet xAxis: Vec3;\nlet yAxis: Vec3;\nlet zAxis: Vec3;\n\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function aim(position: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(target, position, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = position[0]; dst[13] = position[1]; dst[14] = position[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function cameraAim(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = eye[0]; dst[13] = eye[1]; dst[14] = eye[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nexport function lookAt(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = yAxis[0]; dst[ 2] = zAxis[0]; dst[ 3] = 0;\n dst[ 4] = xAxis[1]; dst[ 5] = yAxis[1]; dst[ 6] = zAxis[1]; dst[ 7] = 0;\n dst[ 8] = xAxis[2]; dst[ 9] = yAxis[2]; dst[10] = zAxis[2]; dst[11] = 0;\n\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = v[0]; dst[13] = v[1]; dst[14] = v[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 3] = m03;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n dst[ 7] = m13;\n dst[ 8] = m20;\n dst[ 9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationX(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = c; dst[ 6] = s; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = -s; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateX(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n\n if (m !== dst) {\n dst[ 0] = m[ 0];\n dst[ 1] = m[ 1];\n dst[ 2] = m[ 2];\n dst[ 3] = m[ 3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationY(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = 0; dst[ 2] = -s; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = s; dst[ 9] = 0; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateY(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 - s * m20;\n dst[ 1] = c * m01 - s * m21;\n dst[ 2] = c * m02 - s * m22;\n dst[ 3] = c * m03 - s * m23;\n dst[ 8] = c * m20 + s * m00;\n dst[ 9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n\n if (m !== dst) {\n dst[ 4] = m[ 4];\n dst[ 5] = m[ 5];\n dst[ 6] = m[ 6];\n dst[ 7] = m[ 7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationZ(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateZ(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n dst[ 3] = c * m03 + s * m13;\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n dst[ 7] = c * m13 - s * m03;\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport function axisRotation(axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n dst[ 0] = xx + (1 - xx) * c;\n dst[ 1] = x * y * oneMinusCosine + z * s;\n dst[ 2] = x * z * oneMinusCosine - y * s;\n dst[ 3] = 0;\n dst[ 4] = x * y * oneMinusCosine - z * s;\n dst[ 5] = yy + (1 - yy) * c;\n dst[ 6] = y * z * oneMinusCosine + x * s;\n dst[ 7] = 0;\n dst[ 8] = x * z * oneMinusCosine + y * s;\n dst[ 9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport const rotation = axisRotation;\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function axisRotate(m: Mat4, axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n\n dst[ 0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[ 1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[ 2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[ 3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[ 4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[ 5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[ 6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[ 7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[ 8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[ 9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport const rotate = axisRotate;\n\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = v[2]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n dst[ 3] = v0 * m[0 * 4 + 3];\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n dst[ 7] = v1 * m[1 * 4 + 3];\n dst[ 8] = v2 * m[2 * 4 + 0];\n dst[ 9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = s; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat4, s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n dst[ 3] = s * m[0 * 4 + 3];\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n dst[ 7] = s * m[1 * 4 + 3];\n dst[ 8] = s * m[2 * 4 + 0];\n dst[ 9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link quat.setDefaultType}.\n */\nexport type Quat = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let QuatType: new (n: number) => Quat = Float32Array;\n\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nexport function setDefaultType(ctor: new (n: number) => Quat) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Quat {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Quat, create, setDefaultType, QuatType } from './quat';\nimport { Mat3 } from './mat3.js';\nimport { Mat4 } from './mat4.js';\nimport { Vec3 } from './vec3.js';\nimport * as vec3 from './vec3-impl.js';\n\nexport type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx';\n\nexport default Quat;\nexport { create, setDefaultType };\n\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Quat) {\n dst = dst || new QuatType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nexport function fromAxisAngle(axis: Vec3, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n\n return dst;\n}\n\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nexport function toAxisAngle(q: Quat, dst?: Vec3): { angle: number, axis: Vec3 } {\n dst = dst || vec3.create(4);\n\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > utils.EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n } else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n return { angle, axis: dst };\n}\n\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nexport function angle(a: Quat, b: Quat) {\n const d = dot(a, b);\n return Math.acos(2 * d * d - 1);\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function multiply(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n\n return dst;\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport const mul = multiply;\n\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateX(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateY(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateZ(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n\n return dst;\n}\n\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function slerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n let scale0;\n let scale1;\n\n if (1.0 - cosOmega > utils.EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n\n return dst;\n}\n\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nexport function inverse(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n\n return dst;\n}\n\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nexport function conjugate(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function fromMat(m: Mat3 | Mat4, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n\n 0 1 2\n 4 5 6\n 8 9 10\n */\n\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n } else {\n // |w| <= 1/2\n let i = 0;\n\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n\n const invRoot = 0.5 / root;\n\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nexport function fromEuler(\n xAngleInRadians: number,\n yAngleInRadians: number,\n zAngleInRadians: number,\n order: RotationOrder,\n dst?: Quat) {\n dst = dst || new QuatType(4);\n\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n\n return dst;\n}\n\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nexport function copy(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nexport const clone = copy;\n\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nexport function add(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport function subtract(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function mulScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function divScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nexport function dot(a: Quat, b: Quat): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport function length(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport function lengthSq(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nexport function normalize(v: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nexport function equalsApproximately(a: Quat, b: Quat): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nexport function equals(a: Quat, b: Quat): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nexport function identity(dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n}\n\nlet tempVec3: Vec3;\nlet xUnitVec3: Vec3;\nlet yUnitVec3: Vec3;\n\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function rotationTo(aUnit: Vec3, bUnit: Vec3, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempVec3 = tempVec3 || vec3.create();\n xUnitVec3 = xUnitVec3 || vec3.create(1, 0, 0);\n yUnitVec3 = yUnitVec3 || vec3.create(0, 1, 0);\n\n const dot = vec3.dot(aUnit, bUnit);\n if (dot < -0.999999) {\n vec3.cross(xUnitVec3, aUnit, tempVec3);\n if (vec3.len(tempVec3) < 0.000001) {\n vec3.cross(yUnitVec3, aUnit, tempVec3);\n }\n\n vec3.normalize(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n\n return dst;\n } else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n } else {\n vec3.cross(aUnit, bUnit, tempVec3);\n\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n\n return normalize(dst, dst);\n }\n}\n\nlet tempQuat1: Quat;\nlet tempQuat2: Quat;\n\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nexport function sqlerp(\n a: Quat,\n b: Quat,\n c: Quat,\n d: Quat,\n t: number,\n dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec4.setDefaultType}.\n */\nexport type Vec4 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec4 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nexport function setDefaultType(ctor: new (n: number) => Vec4) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Vec4 {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec4, create, setDefaultType, VecType } from './vec4';\nimport { Mat4 } from './mat4';\n\nexport default Vec4;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec4, min = 0, max = 1, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec4, b: Vec4, scale: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec4, b: Vec4): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec4, b: Vec4): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec4, b: Vec4, t: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec4, b: Vec4, t: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec4, b: Vec4): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec4, m: Mat4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n\n dst[0] = m[0] * x + m[4] * y + m[ 8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[ 9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n\n return dst;\n}\n\n\n/**\n * Treat a 4D vector as a direction and set it's length\n *\n * @param a The vec4 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec4, len: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec4 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec4, maxLen: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n return lerp(a, b, 0.5, dst);\n}\n","import Mat3, * as mat3 from './mat3-impl';\nimport Mat4, * as mat4 from './mat4-impl';\nimport Quat, * as quat from './quat-impl';\nimport Vec2, * as vec2 from './vec2-impl';\nimport Vec3, * as vec3 from './vec3-impl';\nimport Vec4, * as vec4 from './vec4-impl';\nimport * as utils from './utils';\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nexport function setDefaultType(ctor: new (n: number) => Float32Array | Float64Array | number[]) {\n mat3.setDefaultType(ctor);\n mat4.setDefaultType(ctor);\n quat.setDefaultType(ctor);\n vec2.setDefaultType(ctor);\n vec3.setDefaultType(ctor);\n vec4.setDefaultType(ctor);\n}\n\nexport {\n Mat3,\n mat3,\n Mat4,\n mat4,\n Quat,\n quat,\n utils,\n Vec2,\n vec2,\n Vec3,\n vec3,\n Vec4,\n vec4,\n};"],"names":["lerp","VecType","setDefaultType","create","fromValues","set","ceil","floor","round","clamp","add","addScaled","angle","dot","subtract","sub","equalsApproximately","utils.EPSILON","equals","lerpV","max","min","mulScalar","scale","divScalar","inverse","invert","cross","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","setLength","truncate","midpoint","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;IACxB,IAAA,MAAM,IAAI,GA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CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,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"} \ No newline at end of file diff --git a/dist/2.x/wgpu-matrix.min.js b/dist/2.x/wgpu-matrix.min.js index d477e47..918b224 100644 --- a/dist/2.x/wgpu-matrix.min.js +++ b/dist/2.x/wgpu-matrix.min.js @@ -1,4 +1,4 @@ -/* wgpu-matrix@2.8.3, license MIT */ +/* wgpu-matrix@2.9.0, license MIT */ (function(M,aa){"object"===typeof exports&&"undefined"!==typeof module?aa(exports):"function"===typeof define&&define.amd?define(["exports"],aa):(M="undefined"!==typeof globalThis?globalThis:M||self,aa(M.wgpuMatrix={}))})(this,function(M){function aa(a){const b=y;y=a;return b}function ba(a=0,b=0){const c=new y(2);void 0!==a&&(c[0]=a,void 0!==b&&(c[1]=b));return c}function Da(a){const b=u;u=a;return b}function H(a,b,c){const d=new u(3);void 0!==a&&(d[0]=a,void 0!==b&&(d[1]=b,void 0!==c&&(d[2]=c))); return d}function Ea(a,b,c){c=c||new y(2);c[0]=a[0]-b[0];c[1]=a[1]-b[1];return c}function Fa(a,b,c,d){d=d||new y(2);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);return d}function qa(a,b,c){c=c||new y(2);c[0]=a[0]*b;c[1]=a[1]*b;return c}function Ga(a,b){b=b||new y(2);b[0]=1/a[0];b[1]=1/a[1];return b}function Ha(a,b){return a[0]*b[0]+a[1]*b[1]}function ra(a){const b=a[0];a=a[1];return Math.sqrt(b*b+a*a)}function Ia(a){const b=a[0];a=a[1];return b*b+a*a}function Ja(a,b){const c=a[0]-b[0];a=a[1]-b[1]; return Math.sqrt(c*c+a*a)}function Ka(a,b){const c=a[0]-b[0];a=a[1]-b[1];return c*c+a*a}function La(a,b){b=b||new y(2);const c=a[0];a=a[1];const d=Math.sqrt(c*c+a*a);1E-5a[0]&&(c=1);a[10]>a[4*c+c]&&(c=2);const e=(c+1)%3,f=(c+2)%3;var d=Math.sqrt(a[4*c+c]-a[4*e+e]-a[4*f+f]+1);b[c]=.5*d;d=.5/d;b[3]=(a[4*e+f]-a[4*f+e])*d;b[e]=(a[4*e+c]+a[4*c+e])*d;b[f]=(a[4*f+c]+a[4*c+f])*d}return b},fromValues:lb,identity:function(a){a=a||new C(4);a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a},inverse:function(a, b){b=b||new C(4);const c=a[0],d=a[1],e=a[2];a=a[3];var f=c*c+d*d+e*e+a*a;f=f?1/f:0;b[0]=-c*f;b[1]=-d*f;b[2]=-e*f;b[3]=a*f;return b},len:sb,lenSq:tb,length:sb,lengthSq:tb,lerp:function(a,b,c,d){d=d||new C(4);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);d[3]=a[3]+c*(b[3]-a[3]);return d},mul:nb,mulScalar:qb,multiply:nb,normalize:ub,rotateX:function(a,b,c){c=c||new C(4);var d=.5*b;b=a[0];const e=a[1],f=a[2];a=a[3];const g=Math.sin(d);d=Math.cos(d);c[0]=b*d+a*g;c[1]=e*d+f*g; c[2]=f*d-e*g;c[3]=a*d-b*g;return c},rotateY:function(a,b,c){c=c||new C(4);var d=.5*b;b=a[0];const e=a[1],f=a[2];a=a[3];const g=Math.sin(d);d=Math.cos(d);c[0]=b*d-f*g;c[1]=e*d+a*g;c[2]=f*d+b*g;c[3]=a*d-e*g;return c},rotateZ:function(a,b,c){c=c||new C(4);var d=.5*b;b=a[0];const e=a[1],f=a[2];a=a[3];const g=Math.sin(d);d=Math.cos(d);c[0]=b*d+e*g;c[1]=e*d-b*g;c[2]=f*d+a*g;c[3]=a*d-f*g;return c},rotationTo:function(a,b,c){c=c||new C(4);O=O||H();Ba=Ba||H(1,0,0);Ca=Ca||H(0,1,0);const d=va(a,b);if(-.999999> diff --git a/dist/2.x/wgpu-matrix.module.js b/dist/2.x/wgpu-matrix.module.js index 1bbd75f..c05fa92 100644 --- a/dist/2.x/wgpu-matrix.module.js +++ b/dist/2.x/wgpu-matrix.module.js @@ -1,4 +1,4 @@ -/* wgpu-matrix@2.8.3, license MIT */ +/* wgpu-matrix@2.9.0, license MIT */ /* * Copyright 2022 Gregg Tavares * @@ -3339,13 +3339,61 @@ function perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) { dst[12] = 0; dst[13] = 0; dst[15] = 0; - if (zFar === Infinity) { + if (Number.isFinite(zFar)) { + const rangeInv = 1 / (zNear - zFar); + dst[10] = zFar * rangeInv; + dst[14] = zFar * zNear * rangeInv; + } + else { dst[10] = -1; dst[14] = -zNear; } + return dst; +} +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 1 (at -zNear) to 0 (at -zFar) in the z dimension. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. (default = Infinity) + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */ function perspectiveReverseZ(fieldOfViewYInRadians, aspect, zNear, zFar = Infinity, dst) { + dst = dst || new MatType(16); + const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5); + dst[0] = f / aspect; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + dst[4] = 0; + dst[5] = f; + dst[6] = 0; + dst[7] = 0; + dst[8] = 0; + dst[9] = 0; + dst[11] = -1; + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + if (zFar === Infinity) { + dst[10] = 0; + dst[14] = zNear; + } else { - const rangeInv = 1 / (zNear - zFar); - dst[10] = zFar * rangeInv; + const rangeInv = 1 / (zFar - zNear); + dst[10] = zNear * rangeInv; dst[14] = zFar * zNear * rangeInv; } return dst; @@ -3426,6 +3474,53 @@ function frustum(left, right, bottom, top, near, far, dst) { dst[15] = 0; return dst; } +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ +function frustumReverseZ(left, right, bottom, top, near, far = Infinity, dst) { + dst = dst || new MatType(16); + const dx = (right - left); + const dy = (top - bottom); + dst[0] = 2 * near / dx; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + dst[4] = 0; + dst[5] = 2 * near / dy; + dst[6] = 0; + dst[7] = 0; + dst[8] = (left + right) / dx; + dst[9] = (top + bottom) / dy; + dst[11] = -1; + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + if (far === Infinity) { + dst[10] = 0; + dst[14] = near; + } + else { + const rangeInv = 1 / (far - near); + dst[10] = near * rangeInv; + dst[14] = far * near * rangeInv; + } + return dst; +} let xAxis; let yAxis; let zAxis; @@ -4093,6 +4188,7 @@ var mat4Impl = { fromMat3: fromMat3, fromQuat: fromQuat, frustum: frustum, + frustumReverseZ: frustumReverseZ, getAxis: getAxis, getScaling: getScaling, getTranslation: getTranslation, @@ -4105,6 +4201,7 @@ var mat4Impl = { negate: negate$1, ortho: ortho, perspective: perspective, + perspectiveReverseZ: perspectiveReverseZ, rotate: rotate, rotateX: rotateX$1, rotateY: rotateY$1, diff --git a/dist/2.x/wgpu-matrix.module.js.map b/dist/2.x/wgpu-matrix.module.js.map index 84a3dee..ead4068 100644 --- a/dist/2.x/wgpu-matrix.module.js.map +++ b/dist/2.x/wgpu-matrix.module.js.map @@ -1 +1 @@ -{"version":3,"file":"wgpu-matrix.module.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = b[0];\n const by = b[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec2, b: Vec2): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec2, b: Vec2): boolean {\n return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec2, b: Vec2, t: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec2, b: Vec2, t: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec2, b: Vec2, dst?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n *\n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n\n/**\n * Treat a 2D vector as a direction and set it's length\n *\n * @param a The vec2 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec2, len: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec2 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec2, maxLen: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n return lerp(a, b, 0.5, dst);\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec3, b: Vec3): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec3, b: Vec3): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec3, b: Vec3, t: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec3, b: Vec3, t: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec3, b: Vec3): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n\n return dst;\n}\n\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nexport function transformMat4Upper3x3(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec3, m: Mat3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nexport function transformQuat(v: Vec3, q: Quat, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec3) {\n dst = dst || new VecType(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst: Vec3) {\n dst = dst || new VecType(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Treat a 3D vector as a direction and set it's length\n *\n * @param a The vec3 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec3, len: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec3 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec3, maxLen: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n return lerp(a, b, 0.5, dst);\n}\n","\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\nimport Vec3, * as vec3 from './vec3-impl';\nimport * as utils from './utils';\n\nexport default Mat4;\n\nexport type Mat4LikeCtor = new (n: number) => Mat4;\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat4LikeCtor = Float32Array;\n\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nexport function setDefaultType(ctor: new (n: number) => Mat4) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number, v3?: number,\n v4?: number, v5?: number, v6?: number, v7?: number,\n v8?: number, v9?: number, v10?: number, v11?: number,\n v12?: number, v13?: number, v14?: number, v15?: number): Mat4 {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nexport function set(\n v0: number, v1: number, v2: number, v3: number,\n v4: number, v5: number, v6: number, v7: number,\n v8: number, v9: number, v10: number, v11: number,\n v12: number, v13: number, v14: number, v15: number,\n dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v0; dst[ 1] = v1; dst[ 2] = v2; dst[ 3] = v3;\n dst[ 4] = v4; dst[ 5] = v5; dst[ 6] = v6; dst[ 7] = v7;\n dst[ 8] = v8; dst[ 9] = v9; dst[10] = v10; dst[11] = v11;\n dst[12] = v12; dst[13] = v13; dst[14] = v14; dst[15] = v15;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nexport function fromMat3(m3: Mat3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m3[0]; dst[ 1] = m3[1]; dst[ 2] = m3[ 2]; dst[ 3] = 0;\n dst[ 4] = m3[4]; dst[ 5] = m3[5]; dst[ 6] = m3[ 6]; dst[ 7] = 0;\n dst[ 8] = m3[8]; dst[ 9] = m3[9]; dst[10] = m3[10]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2]; dst[ 3] = -m[ 3];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6]; dst[ 7] = -m[ 7];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10]; dst[11] = -m[11];\n dst[12] = -m[12]; dst[13] = -m[13]; dst[14] = -m[14]; dst[15] = -m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2]; dst[ 3] = m[ 3];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6]; dst[ 7] = m[ 7];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10]; dst[11] = m[11];\n dst[12] = m[12]; dst[13] = m[13]; dst[14] = m[14]; dst[15] = m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat4, b: Mat4): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 3] - b[ 3]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 7] - b[ 7]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON &&\n Math.abs(a[11] - b[11]) < utils.EPSILON &&\n Math.abs(a[12] - b[12]) < utils.EPSILON &&\n Math.abs(a[13] - b[13]) < utils.EPSILON &&\n Math.abs(a[14] - b[14]) < utils.EPSILON &&\n Math.abs(a[15] - b[15]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat4, b: Mat4): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 3] === b[ 3] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 7] === b[ 7] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nexport function identity(dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20; dst[ 3] = m30;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21; dst[ 7] = m31;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22; dst[11] = m32;\n dst[12] = m03; dst[13] = m13; dst[14] = m23; dst[15] = m33;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n\n dst[ 0] = d * t0;\n dst[ 1] = d * t1;\n dst[ 2] = d * t2;\n dst[ 3] = d * t3;\n dst[ 4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[ 5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[ 6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[ 7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[ 8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[ 9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat4): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat4, b: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a13 = a[ 4 + 3];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const a23 = a[ 8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b13 = b[ 4 + 3];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n const b23 = b[ 8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[ 3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[ 7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n\n return dst;\n}\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 3] = a[ 3];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n dst[ 7] = a[ 7];\n dst[ 8] = a[ 8];\n dst[ 9] = a[ 9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nexport function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n } else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nexport function ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n\n return dst;\n}\n\nlet xAxis: Vec3;\nlet yAxis: Vec3;\nlet zAxis: Vec3;\n\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function aim(position: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(target, position, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = position[0]; dst[13] = position[1]; dst[14] = position[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function cameraAim(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = eye[0]; dst[13] = eye[1]; dst[14] = eye[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nexport function lookAt(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = yAxis[0]; dst[ 2] = zAxis[0]; dst[ 3] = 0;\n dst[ 4] = xAxis[1]; dst[ 5] = yAxis[1]; dst[ 6] = zAxis[1]; dst[ 7] = 0;\n dst[ 8] = xAxis[2]; dst[ 9] = yAxis[2]; dst[10] = zAxis[2]; dst[11] = 0;\n\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = v[0]; dst[13] = v[1]; dst[14] = v[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 3] = m03;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n dst[ 7] = m13;\n dst[ 8] = m20;\n dst[ 9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationX(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = c; dst[ 6] = s; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = -s; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateX(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n\n if (m !== dst) {\n dst[ 0] = m[ 0];\n dst[ 1] = m[ 1];\n dst[ 2] = m[ 2];\n dst[ 3] = m[ 3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationY(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = 0; dst[ 2] = -s; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = s; dst[ 9] = 0; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateY(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 - s * m20;\n dst[ 1] = c * m01 - s * m21;\n dst[ 2] = c * m02 - s * m22;\n dst[ 3] = c * m03 - s * m23;\n dst[ 8] = c * m20 + s * m00;\n dst[ 9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n\n if (m !== dst) {\n dst[ 4] = m[ 4];\n dst[ 5] = m[ 5];\n dst[ 6] = m[ 6];\n dst[ 7] = m[ 7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationZ(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateZ(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n dst[ 3] = c * m03 + s * m13;\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n dst[ 7] = c * m13 - s * m03;\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport function axisRotation(axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n dst[ 0] = xx + (1 - xx) * c;\n dst[ 1] = x * y * oneMinusCosine + z * s;\n dst[ 2] = x * z * oneMinusCosine - y * s;\n dst[ 3] = 0;\n dst[ 4] = x * y * oneMinusCosine - z * s;\n dst[ 5] = yy + (1 - yy) * c;\n dst[ 6] = y * z * oneMinusCosine + x * s;\n dst[ 7] = 0;\n dst[ 8] = x * z * oneMinusCosine + y * s;\n dst[ 9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport const rotation = axisRotation;\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function axisRotate(m: Mat4, axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n\n dst[ 0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[ 1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[ 2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[ 3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[ 4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[ 5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[ 6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[ 7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[ 8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[ 9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport const rotate = axisRotate;\n\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = v[2]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n dst[ 3] = v0 * m[0 * 4 + 3];\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n dst[ 7] = v1 * m[1 * 4 + 3];\n dst[ 8] = v2 * m[2 * 4 + 0];\n dst[ 9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = s; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat4, s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n dst[ 3] = s * m[0 * 4 + 3];\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n dst[ 7] = s * m[1 * 4 + 3];\n dst[ 8] = s * m[2 * 4 + 0];\n dst[ 9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link quat.setDefaultType}.\n */\nexport type Quat = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let QuatType: new (n: number) => Quat = Float32Array;\n\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nexport function setDefaultType(ctor: new (n: number) => Quat) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Quat {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Quat, create, setDefaultType, QuatType } from './quat';\nimport { Mat3 } from './mat3.js';\nimport { Mat4 } from './mat4.js';\nimport { Vec3 } from './vec3.js';\nimport * as vec3 from './vec3-impl.js';\n\nexport type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx';\n\nexport default Quat;\nexport { create, setDefaultType };\n\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Quat) {\n dst = dst || new QuatType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nexport function fromAxisAngle(axis: Vec3, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n\n return dst;\n}\n\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nexport function toAxisAngle(q: Quat, dst?: Vec3): { angle: number, axis: Vec3 } {\n dst = dst || vec3.create(4);\n\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > utils.EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n } else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n return { angle, axis: dst };\n}\n\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nexport function angle(a: Quat, b: Quat) {\n const d = dot(a, b);\n return Math.acos(2 * d * d - 1);\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function multiply(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n\n return dst;\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport const mul = multiply;\n\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateX(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateY(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateZ(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n\n return dst;\n}\n\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function slerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n let scale0;\n let scale1;\n\n if (1.0 - cosOmega > utils.EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n\n return dst;\n}\n\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nexport function inverse(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n\n return dst;\n}\n\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nexport function conjugate(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function fromMat(m: Mat3 | Mat4, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n\n 0 1 2\n 4 5 6\n 8 9 10\n */\n\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n } else {\n // |w| <= 1/2\n let i = 0;\n\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n\n const invRoot = 0.5 / root;\n\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nexport function fromEuler(\n xAngleInRadians: number,\n yAngleInRadians: number,\n zAngleInRadians: number,\n order: RotationOrder,\n dst?: Quat) {\n dst = dst || new QuatType(4);\n\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n\n return dst;\n}\n\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nexport function copy(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nexport const clone = copy;\n\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nexport function add(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport function subtract(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function mulScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function divScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nexport function dot(a: Quat, b: Quat): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport function length(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport function lengthSq(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nexport function normalize(v: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nexport function equalsApproximately(a: Quat, b: Quat): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nexport function equals(a: Quat, b: Quat): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nexport function identity(dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n}\n\nlet tempVec3: Vec3;\nlet xUnitVec3: Vec3;\nlet yUnitVec3: Vec3;\n\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function rotationTo(aUnit: Vec3, bUnit: Vec3, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempVec3 = tempVec3 || vec3.create();\n xUnitVec3 = xUnitVec3 || vec3.create(1, 0, 0);\n yUnitVec3 = yUnitVec3 || vec3.create(0, 1, 0);\n\n const dot = vec3.dot(aUnit, bUnit);\n if (dot < -0.999999) {\n vec3.cross(xUnitVec3, aUnit, tempVec3);\n if (vec3.len(tempVec3) < 0.000001) {\n vec3.cross(yUnitVec3, aUnit, tempVec3);\n }\n\n vec3.normalize(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n\n return dst;\n } else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n } else {\n vec3.cross(aUnit, bUnit, tempVec3);\n\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n\n return normalize(dst, dst);\n }\n}\n\nlet tempQuat1: Quat;\nlet tempQuat2: Quat;\n\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nexport function sqlerp(\n a: Quat,\n b: Quat,\n c: Quat,\n d: Quat,\n t: number,\n dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec4.setDefaultType}.\n */\nexport type Vec4 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec4 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nexport function setDefaultType(ctor: new (n: number) => Vec4) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Vec4 {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec4, create, setDefaultType, VecType } from './vec4';\nimport { Mat4 } from './mat4';\n\nexport default Vec4;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec4, min = 0, max = 1, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec4, b: Vec4, scale: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec4, b: Vec4): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec4, b: Vec4): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec4, b: Vec4, t: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec4, b: Vec4, t: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec4, b: Vec4): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec4, m: Mat4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n\n dst[0] = m[0] * x + m[4] * y + m[ 8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[ 9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n\n return dst;\n}\n\n\n/**\n * Treat a 4D vector as a direction and set it's length\n *\n * @param a The vec4 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec4, len: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec4 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec4, maxLen: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n return lerp(a, b, 0.5, dst);\n}\n","import Mat3, * as mat3 from './mat3-impl';\nimport Mat4, * as mat4 from './mat4-impl';\nimport Quat, * as quat from './quat-impl';\nimport Vec2, * as vec2 from './vec2-impl';\nimport Vec3, * as vec3 from './vec3-impl';\nimport Vec4, * as vec4 from './vec4-impl';\nimport * as utils from './utils';\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nexport function setDefaultType(ctor: new (n: number) => Float32Array | Float64Array | number[]) {\n mat3.setDefaultType(ctor);\n mat4.setDefaultType(ctor);\n quat.setDefaultType(ctor);\n vec2.setDefaultType(ctor);\n vec3.setDefaultType(ctor);\n vec4.setDefaultType(ctor);\n}\n\nexport {\n Mat3,\n mat3,\n Mat4,\n mat4,\n Quat,\n quat,\n utils,\n Vec2,\n vec2,\n Vec3,\n vec3,\n Vec4,\n vec4,\n};"],"names":["lerp","VecType","setDefaultType","create","fromValues","set","ceil","floor","round","clamp","add","addScaled","angle","dot","subtract","sub","equalsApproximately","utils.EPSILON","equals","lerpV","max","min","mulScalar","scale","divScalar","inverse","invert","cross","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","setLength","truncate","midpoint","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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AG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,G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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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"} \ No newline at end of file +{"version":3,"file":"wgpu-matrix.module.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = b[0];\n const by = b[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec2, b: Vec2): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec2, b: Vec2): boolean {\n return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec2, b: Vec2, t: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec2, b: Vec2, t: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec2, k: number, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec2, b: Vec2, dst?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n *\n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n\n/**\n * Treat a 2D vector as a direction and set it's length\n *\n * @param a The vec2 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec2, len: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec2 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec2, maxLen: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n return lerp(a, b, 0.5, dst);\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec3, b: Vec3): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec3, b: Vec3): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec3, b: Vec3, t: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec3, b: Vec3, t: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec3, k: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nexport function cross(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec3, b: Vec3): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec3): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec3, b: Vec3): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec3, b: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n\n return dst;\n}\n\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nexport function transformMat4Upper3x3(v: Vec3, m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec3, m: Mat3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n\n return dst;\n}\n\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nexport function transformQuat(v: Vec3, q: Quat, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec3) {\n dst = dst || new VecType(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst: Vec3) {\n dst = dst || new VecType(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n const p = [];\n const r = [];\n\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Treat a 3D vector as a direction and set it's length\n *\n * @param a The vec3 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec3, len: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec3 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec3, maxLen: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n return lerp(a, b, 0.5, dst);\n}\n","\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\nimport Vec3, * as vec3 from './vec3-impl';\nimport * as utils from './utils';\n\nexport default Mat4;\n\nexport type Mat4LikeCtor = new (n: number) => Mat4;\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat4LikeCtor = Float32Array;\n\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nexport function setDefaultType(ctor: new (n: number) => Mat4) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number, v3?: number,\n v4?: number, v5?: number, v6?: number, v7?: number,\n v8?: number, v9?: number, v10?: number, v11?: number,\n v12?: number, v13?: number, v14?: number, v15?: number): Mat4 {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nexport function set(\n v0: number, v1: number, v2: number, v3: number,\n v4: number, v5: number, v6: number, v7: number,\n v8: number, v9: number, v10: number, v11: number,\n v12: number, v13: number, v14: number, v15: number,\n dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v0; dst[ 1] = v1; dst[ 2] = v2; dst[ 3] = v3;\n dst[ 4] = v4; dst[ 5] = v5; dst[ 6] = v6; dst[ 7] = v7;\n dst[ 8] = v8; dst[ 9] = v9; dst[10] = v10; dst[11] = v11;\n dst[12] = v12; dst[13] = v13; dst[14] = v14; dst[15] = v15;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nexport function fromMat3(m3: Mat3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m3[0]; dst[ 1] = m3[1]; dst[ 2] = m3[ 2]; dst[ 3] = 0;\n dst[ 4] = m3[4]; dst[ 5] = m3[5]; dst[ 6] = m3[ 6]; dst[ 7] = 0;\n dst[ 8] = m3[8]; dst[ 9] = m3[9]; dst[10] = m3[10]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2]; dst[ 3] = -m[ 3];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6]; dst[ 7] = -m[ 7];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10]; dst[11] = -m[11];\n dst[12] = -m[12]; dst[13] = -m[13]; dst[14] = -m[14]; dst[15] = -m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2]; dst[ 3] = m[ 3];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6]; dst[ 7] = m[ 7];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10]; dst[11] = m[11];\n dst[12] = m[12]; dst[13] = m[13]; dst[14] = m[14]; dst[15] = m[15];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat4, b: Mat4): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 3] - b[ 3]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 7] - b[ 7]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON &&\n Math.abs(a[11] - b[11]) < utils.EPSILON &&\n Math.abs(a[12] - b[12]) < utils.EPSILON &&\n Math.abs(a[13] - b[13]) < utils.EPSILON &&\n Math.abs(a[14] - b[14]) < utils.EPSILON &&\n Math.abs(a[15] - b[15]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat4, b: Mat4): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 3] === b[ 3] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 7] === b[ 7] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nexport function identity(dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20; dst[ 3] = m30;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21; dst[ 7] = m31;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22; dst[11] = m32;\n dst[12] = m03; dst[13] = m13; dst[14] = m23; dst[15] = m33;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n\n dst[ 0] = d * t0;\n dst[ 1] = d * t1;\n dst[ 2] = d * t2;\n dst[ 3] = d * t3;\n dst[ 4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[ 5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[ 6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[ 7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[ 8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[ 9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat4): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat4, b: Mat4, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a13 = a[ 4 + 3];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const a23 = a[ 8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b13 = b[ 4 + 3];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n const b23 = b[ 8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[ 3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[ 7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n\n return dst;\n}\n\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 3] = a[ 3];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n dst[ 7] = a[ 7];\n dst[ 8] = a[ 8];\n dst[ 9] = a[ 9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat4, axis: number, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat4, dst?: Vec3): Vec3 {\n dst = dst || vec3.create();\n\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nexport function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (Number.isFinite(zFar)) {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n } else {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 1 (at -zNear) to 0 (at -zFar) in the z dimension.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane. (default = Infinity)\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */export function perspectiveReverseZ(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar = Infinity, dst?: Mat4) {\n dst = dst || new MatType(16);\n\n const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5);\n\n dst[ 0] = f / aspect;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n\n dst[ 4] = 0;\n dst[ 5] = f;\n dst[ 6] = 0;\n dst[ 7] = 0;\n\n dst[ 8] = 0;\n dst[ 9] = 0;\n dst[11] = -1;\n\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (zFar === Infinity) {\n dst[10] = 0;\n dst[14] = zNear;\n } else {\n const rangeInv = 1 / (zFar - zNear);\n dst[10] = zNear * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nexport function ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nexport function frustumReverseZ(left: number, right: number, bottom: number, top: number, near: number, far = Infinity, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const dx = (right - left);\n const dy = (top - bottom);\n\n dst[ 0] = 2 * near / dx;\n dst[ 1] = 0;\n dst[ 2] = 0;\n dst[ 3] = 0;\n dst[ 4] = 0;\n dst[ 5] = 2 * near / dy;\n dst[ 6] = 0;\n dst[ 7] = 0;\n dst[ 8] = (left + right) / dx;\n dst[ 9] = (top + bottom) / dy;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n\n if (far === Infinity) {\n dst[10] = 0;\n dst[14] = near;\n } else {\n const rangeInv = 1 / (far - near);\n dst[10] = near * rangeInv;\n dst[14] = far * near * rangeInv;\n }\n\n return dst;\n}\n\nlet xAxis: Vec3;\nlet yAxis: Vec3;\nlet zAxis: Vec3;\n\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function aim(position: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(target, position, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = position[0]; dst[13] = position[1]; dst[14] = position[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nexport function cameraAim(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = xAxis[1]; dst[ 2] = xAxis[2]; dst[ 3] = 0;\n dst[ 4] = yAxis[0]; dst[ 5] = yAxis[1]; dst[ 6] = yAxis[2]; dst[ 7] = 0;\n dst[ 8] = zAxis[0]; dst[ 9] = zAxis[1]; dst[10] = zAxis[2]; dst[11] = 0;\n dst[12] = eye[0]; dst[13] = eye[1]; dst[14] = eye[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nexport function lookAt(eye: Vec3, target: Vec3, up: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n xAxis = xAxis || vec3.create();\n yAxis = yAxis || vec3.create();\n zAxis = zAxis || vec3.create();\n\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n\n dst[ 0] = xAxis[0]; dst[ 1] = yAxis[0]; dst[ 2] = zAxis[0]; dst[ 3] = 0;\n dst[ 4] = xAxis[1]; dst[ 5] = yAxis[1]; dst[ 6] = zAxis[1]; dst[ 7] = 0;\n dst[ 8] = xAxis[2]; dst[ 9] = yAxis[2]; dst[10] = zAxis[2]; dst[11] = 0;\n\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = v[0]; dst[13] = v[1]; dst[14] = v[2]; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 3] = m03;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n dst[ 7] = m13;\n dst[ 8] = m20;\n dst[ 9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationX(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = c; dst[ 6] = s; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = -s; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateX(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n\n if (m !== dst) {\n dst[ 0] = m[ 0];\n dst[ 1] = m[ 1];\n dst[ 2] = m[ 2];\n dst[ 3] = m[ 3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationY(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = 0; dst[ 2] = -s; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = s; dst[ 9] = 0; dst[10] = c; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateY(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 - s * m20;\n dst[ 1] = c * m01 - s * m21;\n dst[ 2] = c * m02 - s * m22;\n dst[ 3] = c * m03 - s * m23;\n dst[ 8] = c * m20 + s * m00;\n dst[ 9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n\n if (m !== dst) {\n dst[ 4] = m[ 4];\n dst[ 5] = m[ 5];\n dst[ 6] = m[ 6];\n dst[ 7] = m[ 7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotationZ(angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotateZ(m: Mat4, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n dst[ 3] = c * m03 + s * m13;\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n dst[ 7] = c * m13 - s * m03;\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport function axisRotation(axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n dst[ 0] = xx + (1 - xx) * c;\n dst[ 1] = x * y * oneMinusCosine + z * s;\n dst[ 2] = x * z * oneMinusCosine - y * s;\n dst[ 3] = 0;\n dst[ 4] = x * y * oneMinusCosine - z * s;\n dst[ 5] = yy + (1 - yy) * c;\n dst[ 6] = y * z * oneMinusCosine + x * s;\n dst[ 7] = 0;\n dst[ 8] = x * z * oneMinusCosine + y * s;\n dst[ 9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nexport const rotation = axisRotation;\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function axisRotate(m: Mat4, axis: Vec3, angleInRadians: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n\n dst[ 0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[ 1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[ 2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[ 3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[ 4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[ 5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[ 6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[ 7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[ 8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[ 9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport const rotate = axisRotate;\n\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = v[2]; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat4, v: Vec3, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n dst[ 3] = v0 * m[0 * 4 + 3];\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n dst[ 7] = v1 * m[1 * 4 + 3];\n dst[ 8] = v2 * m[2 * 4 + 0];\n dst[ 9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}\n\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0; dst[ 3] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0; dst[ 7] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = s; dst[11] = 0;\n dst[12] = 0; dst[13] = 0; dst[14] = 0; dst[15] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat4, s: number, dst?: Mat4): Mat4 {\n dst = dst || new MatType(16);\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n dst[ 3] = s * m[0 * 4 + 3];\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n dst[ 7] = s * m[1 * 4 + 3];\n dst[ 8] = s * m[2 * 4 + 0];\n dst[ 9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link quat.setDefaultType}.\n */\nexport type Quat = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let QuatType: new (n: number) => Quat = Float32Array;\n\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nexport function setDefaultType(ctor: new (n: number) => Quat) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Quat {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Quat, create, setDefaultType, QuatType } from './quat';\nimport { Mat3 } from './mat3.js';\nimport { Mat4 } from './mat4.js';\nimport { Vec3 } from './vec3.js';\nimport * as vec3 from './vec3-impl.js';\n\nexport type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx';\n\nexport default Quat;\nexport { create, setDefaultType };\n\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Quat) {\n dst = dst || new QuatType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nexport function fromAxisAngle(axis: Vec3, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n\n return dst;\n}\n\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nexport function toAxisAngle(q: Quat, dst?: Vec3): { angle: number, axis: Vec3 } {\n dst = dst || vec3.create(4);\n\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > utils.EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n } else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n\n return { angle, axis: dst };\n}\n\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nexport function angle(a: Quat, b: Quat) {\n const d = dot(a, b);\n return Math.acos(2 * d * d - 1);\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function multiply(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n\n return dst;\n}\n\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport const mul = multiply;\n\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateX(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateY(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n\n return dst;\n}\n\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function rotateZ(q: Quat, angleInRadians: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const halfAngle = angleInRadians * 0.5;\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n\n return dst;\n}\n\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nexport function slerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n let scale0;\n let scale1;\n\n if (1.0 - cosOmega > utils.EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n\n return dst;\n}\n\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nexport function inverse(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n\n return dst;\n}\n\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nexport function conjugate(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function fromMat(m: Mat3 | Mat4, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n\n 0 1 2\n 4 5 6\n 8 9 10\n */\n\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n } else {\n // |w| <= 1/2\n let i = 0;\n\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n\n const invRoot = 0.5 / root;\n\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n\n return dst;\n}\n\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nexport function fromEuler(\n xAngleInRadians: number,\n yAngleInRadians: number,\n zAngleInRadians: number,\n order: RotationOrder,\n dst?: Quat) {\n dst = dst || new QuatType(4);\n\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n\n return dst;\n}\n\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nexport function copy(q: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n\n return dst;\n}\n\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nexport const clone = copy;\n\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nexport function add(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport function subtract(a: Quat, b: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function mulScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nexport function divScalar(v: Quat, k: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nexport function dot(a: Quat, b: Quat): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Quat, b: Quat, t: number, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport function length(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport function lengthSq(v: Quat): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nexport function normalize(v: Quat, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nexport function equalsApproximately(a: Quat, b: Quat): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nexport function equals(a: Quat, b: Quat): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nexport function identity(dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n}\n\nlet tempVec3: Vec3;\nlet xUnitVec3: Vec3;\nlet yUnitVec3: Vec3;\n\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nexport function rotationTo(aUnit: Vec3, bUnit: Vec3, dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempVec3 = tempVec3 || vec3.create();\n xUnitVec3 = xUnitVec3 || vec3.create(1, 0, 0);\n yUnitVec3 = yUnitVec3 || vec3.create(0, 1, 0);\n\n const dot = vec3.dot(aUnit, bUnit);\n if (dot < -0.999999) {\n vec3.cross(xUnitVec3, aUnit, tempVec3);\n if (vec3.len(tempVec3) < 0.000001) {\n vec3.cross(yUnitVec3, aUnit, tempVec3);\n }\n\n vec3.normalize(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n\n return dst;\n } else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n\n return dst;\n } else {\n vec3.cross(aUnit, bUnit, tempVec3);\n\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n\n return normalize(dst, dst);\n }\n}\n\nlet tempQuat1: Quat;\nlet tempQuat2: Quat;\n\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nexport function sqlerp(\n a: Quat,\n b: Quat,\n c: Quat,\n d: Quat,\n t: number,\n dst?: Quat): Quat {\n dst = dst || new QuatType(4);\n\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec4.setDefaultType}.\n */\nexport type Vec4 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec4 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nexport function setDefaultType(ctor: new (n: number) => Vec4) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number, w?: number): Vec4 {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec4, create, setDefaultType, VecType } from './vec4';\nimport { Mat4 } from './mat4';\n\nexport default Vec4;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, w: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec4, min = 0, max = 1, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec4, b: Vec4, scale: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport function subtract(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n\n return dst;\n}\n\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nexport const sub = subtract;\n\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nexport function equalsApproximately(a: Vec4, b: Vec4): boolean {\n return Math.abs(a[0] - b[0]) < utils.EPSILON &&\n Math.abs(a[1] - b[1]) < utils.EPSILON &&\n Math.abs(a[2] - b[2]) < utils.EPSILON &&\n Math.abs(a[3] - b[3]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nexport function equals(a: Vec4, b: Vec4): boolean {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nexport function lerp(a: Vec4, b: Vec4, t: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nexport function lerpV(a: Vec4, b: Vec4, t: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n\n return dst;\n}\n\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nexport function max(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nexport function min(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function mulScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n\n return dst;\n}\n\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport const scale = mulScalar;\n\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nexport function divScalar(v: Vec4, k: number, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n\n return dst;\n}\n\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport function inverse(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n\n return dst;\n}\n\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nexport const invert = inverse;\n\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec4, b: Vec4): number {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec4): number {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec4, b: Vec4): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec4, b: Vec4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n\n return dst;\n}\n\n\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec4, m: Mat4, dst?: Vec4): Vec4 {\n dst = dst || new VecType(4);\n\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n\n dst[0] = m[0] * x + m[4] * y + m[ 8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[ 9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n\n return dst;\n}\n\n\n/**\n * Treat a 4D vector as a direction and set it's length\n *\n * @param a The vec4 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\nexport function setLength(a: Vec4, len: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n normalize(a, dst);\n return mulScalar(dst, len, dst);\n}\n\n/**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec4 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\nexport function truncate(a: Vec4, maxLen: number, dst?: Vec4) {\n dst = dst || new VecType(4);\n\n if (length(a) > maxLen) {\n return setLength(a, maxLen, dst);\n }\n\n return copy(a, dst);\n}\n\n/**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\nexport function midpoint(a: Vec4, b: Vec4, dst?: Vec4) {\n dst = dst || new VecType(4);\n return lerp(a, b, 0.5, dst);\n}\n","import Mat3, * as mat3 from './mat3-impl';\nimport Mat4, * as mat4 from './mat4-impl';\nimport Quat, * as quat from './quat-impl';\nimport Vec2, * as vec2 from './vec2-impl';\nimport Vec3, * as vec3 from './vec3-impl';\nimport Vec4, * as vec4 from './vec4-impl';\nimport * as utils from './utils';\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nexport function setDefaultType(ctor: new (n: number) => Float32Array | Float64Array | number[]) {\n mat3.setDefaultType(ctor);\n mat4.setDefaultType(ctor);\n quat.setDefaultType(ctor);\n vec2.setDefaultType(ctor);\n vec3.setDefaultType(ctor);\n vec4.setDefaultType(ctor);\n}\n\nexport {\n Mat3,\n mat3,\n Mat4,\n mat4,\n Quat,\n quat,\n utils,\n Vec2,\n vec2,\n Vec3,\n vec3,\n Vec4,\n vec4,\n};"],"names":["lerp","VecType","setDefaultType","create","fromValues","set","ceil","floor","round","clamp","add","addScaled","angle","dot","subtract","sub","equalsApproximately","utils.EPSILON","equals","lerpV","max","min","mulScalar","scale","divScalar","inverse","invert","cross","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","setLength","truncate","midpoint","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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AG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,GAAG,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAI,GAAG,G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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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"} \ No newline at end of file diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 7bcc66b..18c3aae 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 28be6d9..3507f1a 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/functions/mat4.frustumReverseZ.html b/docs/functions/mat4.frustumReverseZ.html new file mode 100644 index 0000000..1fb81b0 --- /dev/null +++ b/docs/functions/mat4.frustumReverseZ.html @@ -0,0 +1,17 @@ +frustumReverseZ | wgpu-matrix

Function frustumReverseZ

  • Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, +top, bottom, near and far clipping planes. The arguments define a frustum +extending in the negative z direction. The arguments near and far are the +distances to the near and far clipping planes. Note that near and far are not +z coordinates, but rather they are distances along the negative z-axis. The +matrix generated sends the viewing frustum to the unit box. We assume a unit +box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z +dimension.

    +

    Parameters

    • left: number

      The x coordinate of the left plane of the box.

      +
    • right: number

      The x coordinate of the right plane of the box.

      +
    • bottom: number

      The y coordinate of the bottom plane of the box.

      +
    • top: number

      The y coordinate of the right plane of the box.

      +
    • near: number

      The negative z coordinate of the near plane of the box.

      +
    • far: number = Infinity

      The negative z coordinate of the far plane of the box.

      +
    • Optional dst: Mat4

      Output matrix. If not passed a new one is created.

      +

    Returns Mat4

    The perspective projection matrix.

    +
\ No newline at end of file diff --git a/docs/functions/mat4.perspectiveReverseZ.html b/docs/functions/mat4.perspectiveReverseZ.html new file mode 100644 index 0000000..a155f89 --- /dev/null +++ b/docs/functions/mat4.perspectiveReverseZ.html @@ -0,0 +1,19 @@ +perspectiveReverseZ | wgpu-matrix

Function perspectiveReverseZ

  • Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height +of the frustum, the aspect ratio, and the near and far clipping planes. The +arguments define a frustum extending in the negative z direction. The given +angle is the vertical angle of the frustum, and the horizontal angle is +determined to produce the given aspect ratio. The arguments near and far are +the distances to the near and far clipping planes. Note that near and far +are not z coordinates, but rather they are distances along the negative +z-axis. The matrix generated sends the viewing frustum to the unit box. +We assume a unit box extending from -1 to 1 in the x and y dimensions and +from 1 (at -zNear) to 0 (at -zFar) in the z dimension.

    +

    Parameters

    • fieldOfViewYInRadians: number

      The camera angle from top to bottom (in radians).

      +
    • aspect: number

      The aspect ratio width / height.

      +
    • zNear: number

      The depth (negative z coordinate) + of the near clipping plane.

      +
    • zFar: number = Infinity

      The depth (negative z coordinate) + of the far clipping plane. (default = Infinity)

      +
    • Optional dst: Mat4

      matrix to hold result. If not passed a new one is created.

      +

    Returns Mat4

    The perspective matrix.

    +
\ No newline at end of file diff --git a/docs/modules/mat4.html b/docs/modules/mat4.html index 1c3db1d..f6a0c6f 100644 --- a/docs/modules/mat4.html +++ b/docs/modules/mat4.html @@ -13,6 +13,7 @@ fromMat3 fromQuat frustum +frustumReverseZ getAxis getScaling getTranslation @@ -25,6 +26,7 @@ negate ortho perspective +perspectiveReverseZ rotate rotateX rotateY diff --git a/package-lock.json b/package-lock.json index f2ccebb..e931ed7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wgpu-matrix", - "version": "2.8.3", + "version": "2.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wgpu-matrix", - "version": "2.8.3", + "version": "2.9.0", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "^11.1.6", diff --git a/package.json b/package.json index 3cdb50d..04e43aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wgpu-matrix", - "version": "2.8.3", + "version": "2.9.0", "description": "fast matrix math library for WebGPU", "main": "dist/2.x/wgpu-matrix.module.js", "module": "dist/2.x/wgpu-matrix.module.js", diff --git a/src/mat4-impl.ts b/src/mat4-impl.ts index b26db8a..a5c4a2e 100644 --- a/src/mat4-impl.ts +++ b/src/mat4-impl.ts @@ -776,12 +776,67 @@ export function perspective(fieldOfViewYInRadians: number, aspect: number, zNear dst[13] = 0; dst[15] = 0; - if (zFar === Infinity) { + if (Number.isFinite(zFar)) { + const rangeInv = 1 / (zNear - zFar); + dst[10] = zFar * rangeInv; + dst[14] = zFar * zNear * rangeInv; + } else { dst[10] = -1; dst[14] = -zNear; + } + + return dst; +} + +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 1 (at -zNear) to 0 (at -zFar) in the z dimension. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. (default = Infinity) + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */export function perspectiveReverseZ(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar = Infinity, dst?: Mat4) { + dst = dst || new MatType(16); + + const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5); + + dst[ 0] = f / aspect; + dst[ 1] = 0; + dst[ 2] = 0; + dst[ 3] = 0; + + dst[ 4] = 0; + dst[ 5] = f; + dst[ 6] = 0; + dst[ 7] = 0; + + dst[ 8] = 0; + dst[ 9] = 0; + dst[11] = -1; + + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + + if (zFar === Infinity) { + dst[10] = 0; + dst[14] = zNear; } else { - const rangeInv = 1 / (zNear - zFar); - dst[10] = zFar * rangeInv; + const rangeInv = 1 / (zFar - zNear); + dst[10] = zNear * rangeInv; dst[14] = zFar * zNear * rangeInv; } @@ -874,6 +929,57 @@ export function frustum(left: number, right: number, bottom: number, top: number return dst; } +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ +export function frustumReverseZ(left: number, right: number, bottom: number, top: number, near: number, far = Infinity, dst?: Mat4): Mat4 { + dst = dst || new MatType(16); + + const dx = (right - left); + const dy = (top - bottom); + + dst[ 0] = 2 * near / dx; + dst[ 1] = 0; + dst[ 2] = 0; + dst[ 3] = 0; + dst[ 4] = 0; + dst[ 5] = 2 * near / dy; + dst[ 6] = 0; + dst[ 7] = 0; + dst[ 8] = (left + right) / dx; + dst[ 9] = (top + bottom) / dy; + dst[11] = -1; + dst[12] = 0; + dst[13] = 0; + dst[15] = 0; + + if (far === Infinity) { + dst[10] = 0; + dst[14] = near; + } else { + const rangeInv = 1 / (far - near); + dst[10] = near * rangeInv; + dst[14] = far * near * rangeInv; + } + + return dst; +} + let xAxis: Vec3; let yAxis: Vec3; let zAxis: Vec3; diff --git a/test/tests/mat4-test.js b/test/tests/mat4-test.js index d4494ad..58f7050 100644 --- a/test/tests/mat4-test.js +++ b/test/tests/mat4-test.js @@ -474,6 +474,95 @@ function check(Type) { shouldBeCloseArray(vec3.transformMat4([0, 0, zFar], m), [0, 0, Infinity], 0.000001); }); + it('should compute perspective reverseZ with zFar', () => { + const fov = 2; + const aspect = 4; + const zNear = 10; + const zFar = 20; + const f = Math.tan(Math.PI * 0.5 - 0.5 * fov); + const rangeInv = 1 / (zFar - zNear); + const expected = [ + f / aspect, + 0, + 0, + 0, + + 0, + f, + 0, + 0, + + 0, + 0, + zNear * rangeInv, + -1, + + 0, + 0, + zFar * zNear * rangeInv, + 0, + ]; + testMat4WithAndWithoutDest((dst) => { + return mat4.perspectiveReverseZ(fov, aspect, zNear, zFar, dst); + }, expected); + }); + + it('should compute correct perspective reverseZ', () => { + const fov = Math.PI / 4; + const aspect = 2; + const zNear = 10; + const zFar = 20; + const m = mat4.perspectiveReverseZ(fov, aspect, zNear, zFar); + shouldBeCloseArray(vec3.transformMat4([0, 0, -zNear], m), [0, 0, 1], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -15], m), [0, 0, 0.3333333432674408], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -zFar], m), [0, 0, 0], 0.000001); + }); + + it('should compute perspective reverseZ with zFar at infinity', () => { + const fov = 2; + const aspect = 4; + const zNear = 10; + const zFar = Infinity; + const f = Math.tan(Math.PI * 0.5 - 0.5 * fov); + const expected = [ + f / aspect, + 0, + 0, + 0, + + 0, + f, + 0, + 0, + + 0, + 0, + 0, + -1, + + 0, + 0, + zNear, + 0, + ]; + testMat4WithAndWithoutDest((dst) => { + return mat4.perspectiveReverseZ(fov, aspect, zNear, zFar, dst); + }, expected); + }); + + it('should compute correct perspective reverseZ with zFar at Infinity', () => { + const fov = Math.PI / 4; + const aspect = 2; + const zNear = 10; + const zFar = Infinity; + const m = mat4.perspectiveReverseZ(fov, aspect, zNear, zFar); + shouldBeCloseArray(vec3.transformMat4([0, 0, -zNear], m), [0, 0, 1], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -1000], m), [0, 0, 0.009999999776482582], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -1000000], m), [0, 0, 0.000009999999747378752], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -1000000000], m), [0, 0, 9.99999993922529e-9], 0.000001); + shouldBeCloseArray(vec3.transformMat4([0, 0, -zFar], m), [0, 0, 0], 0.000001); + }); + it('should compute ortho', () => { const left = 2; const right = 4; @@ -570,6 +659,56 @@ function check(Type) { assertEqualApproximately(p[2], 1); }); + it('should compute frustumReverseZ', () => { + const left = 2; + const right = 4; + const top = 10; + const bottom = 30; + const near = 15; + const far = 25; + + const dx = (right - left); + const dy = (top - bottom); + const dz = (far - near); + + const expected = [ + 2 * near / dx, + 0, + 0, + 0, + 0, + 2 * near / dy, + 0, + 0, + (left + right) / dx, + (top + bottom) / dy, + near / dz, + -1, + 0, + 0, + near * far / dz, + 0, + ]; + testMat4WithAndWithoutDest((dst) => { + return mat4.frustumReverseZ(left, right, bottom, top, near, far, dst); + }, expected); + }); + + it('should compute correct frustumReverseZ', () => { + const left = -2; + const right = 4; + const top = 10; + const bottom = 30; + const near = 15; + const far = 25; + const m = mat4.frustumReverseZ(left, right, bottom, top, near, far); + shouldBeCloseArray(vec3.transformMat4([left, bottom, -near], m), [-1, -1, 1], 0.000001); + const centerX = (left + right) * 0.5; + const centerY = (top + bottom) * 0.5; + assertEqualApproximately(vec3.transformMat4([centerX, centerY, -near], m)[2], 1); + assertEqualApproximately(vec3.transformMat4([centerX, centerY, -far], m)[2], 0); + }); + it('should compute same frustum as perspective', () => { const lr = 4; const tb = 2;