From 3402ceb89b0fe5b60347b60eaa69971383726e9f Mon Sep 17 00:00:00 2001 From: Gregg Tavares Date: Thu, 3 Aug 2023 19:54:24 -0700 Subject: [PATCH] build --- dist/2.x/mat3-impl.d.ts | 18 +- dist/2.x/mat3.d.ts | 2 +- dist/2.x/mat4-impl.d.ts | 17 +- dist/2.x/mat4.d.ts | 2 +- dist/2.x/quat-impl.d.ts | 2 +- dist/2.x/quat.d.ts | 2 +- dist/2.x/vec2.d.ts | 2 +- dist/2.x/vec3.d.ts | 2 +- dist/2.x/vec4.d.ts | 2 +- dist/2.x/wgpu-matrix.js | 471 ++++++---- dist/2.x/wgpu-matrix.js.map | 2 +- dist/2.x/wgpu-matrix.min.js | 105 +-- dist/2.x/wgpu-matrix.module.js | 471 ++++++---- dist/2.x/wgpu-matrix.module.js.map | 2 +- docs/assets/main.js | 110 ++- docs/assets/search.js | 2 +- docs/assets/style.css | 836 ++++++++---------- docs/functions/mat3.clone.html | 378 ++------ docs/functions/mat3.copy.html | 378 ++------ docs/functions/mat3.create.html | 392 ++------ docs/functions/mat3.determinant.html | 372 ++------ docs/functions/mat3.equals.html | 374 ++------ docs/functions/mat3.equalsApproximately.html | 374 ++------ docs/functions/mat3.fromMat4.html | 374 ++------ docs/functions/mat3.fromQuat.html | 374 ++------ docs/functions/mat3.getAxis.html | 376 ++------ docs/functions/mat3.getScaling.html | 371 ++------ docs/functions/mat3.getTranslation.html | 374 ++------ docs/functions/mat3.identity.html | 372 ++------ docs/functions/mat3.inverse.html | 374 ++------ docs/functions/mat3.invert.html | 374 ++------ docs/functions/mat3.mul.html | 376 ++------ docs/functions/mat3.multiply.html | 376 ++------ docs/functions/mat3.negate.html | 374 ++------ docs/functions/mat3.rotate.html | 376 ++------ docs/functions/mat3.rotation.html | 374 ++------ docs/functions/mat3.scale.html | 376 ++------ docs/functions/mat3.scaling.html | 374 ++------ docs/functions/mat3.set.html | 392 ++------ docs/functions/mat3.setAxis.html | 378 ++------ docs/functions/mat3.setDefaultType.html | 380 ++------ docs/functions/mat3.setTranslation.html | 376 ++------ docs/functions/mat3.translate.html | 376 ++------ docs/functions/mat3.translation.html | 374 ++------ docs/functions/mat3.transpose.html | 374 ++------ docs/functions/mat3.uniformScale.html | 108 +++ docs/functions/mat3.uniformScaling.html | 103 +++ docs/functions/mat4.aim.html | 392 ++------ docs/functions/mat4.axisRotate.html | 392 ++------ docs/functions/mat4.axisRotation.html | 392 ++------ docs/functions/mat4.cameraAim.html | 392 ++------ docs/functions/mat4.clone.html | 392 ++------ docs/functions/mat4.copy.html | 392 ++------ docs/functions/mat4.create.html | 420 ++------- docs/functions/mat4.determinant.html | 386 ++------ docs/functions/mat4.equals.html | 388 ++------ docs/functions/mat4.equalsApproximately.html | 388 ++------ docs/functions/mat4.fromMat3.html | 388 ++------ docs/functions/mat4.fromQuat.html | 388 ++------ docs/functions/mat4.frustum.html | 398 ++------- docs/functions/mat4.getAxis.html | 390 ++------ docs/functions/mat4.getScaling.html | 385 ++------ docs/functions/mat4.getTranslation.html | 388 ++------ docs/functions/mat4.identity.html | 386 ++------ docs/functions/mat4.inverse.html | 388 ++------ docs/functions/mat4.invert.html | 388 ++------ docs/functions/mat4.lookAt.html | 392 ++------ docs/functions/mat4.mul.html | 390 ++------ docs/functions/mat4.multiply.html | 390 ++------ docs/functions/mat4.negate.html | 388 ++------ docs/functions/mat4.ortho.html | 398 ++------- docs/functions/mat4.perspective.html | 394 ++------- docs/functions/mat4.rotate.html | 392 ++------ docs/functions/mat4.rotateX.html | 390 ++------ docs/functions/mat4.rotateY.html | 390 ++------ docs/functions/mat4.rotateZ.html | 390 ++------ docs/functions/mat4.rotation.html | 392 ++------ docs/functions/mat4.rotationX.html | 388 ++------ docs/functions/mat4.rotationY.html | 388 ++------ docs/functions/mat4.rotationZ.html | 388 ++------ docs/functions/mat4.scale.html | 390 ++------ docs/functions/mat4.scaling.html | 388 ++------ docs/functions/mat4.set.html | 420 ++------- docs/functions/mat4.setAxis.html | 392 ++------ docs/functions/mat4.setDefaultType.html | 394 ++------- docs/functions/mat4.setTranslation.html | 390 ++------ docs/functions/mat4.translate.html | 390 ++------ docs/functions/mat4.translation.html | 388 ++------ docs/functions/mat4.transpose.html | 388 ++------ docs/functions/mat4.uniformScale.html | 121 +++ docs/functions/mat4.uniformScaling.html | 117 +++ docs/functions/quat.add.html | 383 ++------ docs/functions/quat.angle.html | 381 ++------ docs/functions/quat.clone.html | 385 ++------ docs/functions/quat.conjugate.html | 381 ++------ docs/functions/quat.copy.html | 385 ++------ docs/functions/quat.create.html | 385 ++------ docs/functions/quat.divScalar.html | 383 ++------ docs/functions/quat.dot.html | 381 ++------ docs/functions/quat.equals.html | 381 ++------ docs/functions/quat.equalsApproximately.html | 381 ++------ docs/functions/quat.fromAxisAngle.html | 383 ++------ docs/functions/quat.fromEuler.html | 387 ++------ docs/functions/quat.fromMat.html | 381 ++------ docs/functions/quat.fromValues.html | 385 ++------ docs/functions/quat.identity.html | 379 ++------ docs/functions/quat.inverse.html | 381 ++------ docs/functions/quat.len.html | 379 ++------ docs/functions/quat.lenSq.html | 379 ++------ docs/functions/quat.length.html | 379 ++------ docs/functions/quat.lengthSq.html | 379 ++------ docs/functions/quat.lerp.html | 385 ++------ docs/functions/quat.mul.html | 383 ++------ docs/functions/quat.mulScalar.html | 383 ++------ docs/functions/quat.multiply.html | 383 ++------ docs/functions/quat.normalize.html | 381 ++------ docs/functions/quat.rotateX.html | 383 ++------ docs/functions/quat.rotateY.html | 383 ++------ docs/functions/quat.rotateZ.html | 383 ++------ docs/functions/quat.rotationTo.html | 383 ++------ docs/functions/quat.scale.html | 383 ++------ docs/functions/quat.set.html | 389 ++------ docs/functions/quat.setDefaultType.html | 401 ++------- docs/functions/quat.slerp.html | 385 ++------ docs/functions/quat.sqlerp.html | 389 ++------ docs/functions/quat.sub.html | 383 ++------ docs/functions/quat.subtract.html | 383 ++------ docs/functions/quat.toAxisAngle.html | 385 ++------ docs/functions/setDefaultType.html | 352 +------- docs/functions/utils.degToRad.html | 347 +------- docs/functions/utils.euclideanModulo.html | 351 +------- docs/functions/utils.inverseLerp.html | 351 +------- docs/functions/utils.lerp.html | 351 +------- docs/functions/utils.radToDeg.html | 347 +------- docs/functions/utils.setEpsilon.html | 347 +------- docs/functions/vec2.add.html | 391 ++------ docs/functions/vec2.addScaled.html | 393 ++------ docs/functions/vec2.angle.html | 389 ++------ docs/functions/vec2.ceil.html | 389 ++------ docs/functions/vec2.clamp.html | 393 ++------ docs/functions/vec2.clone.html | 393 ++------ docs/functions/vec2.copy.html | 393 ++------ docs/functions/vec2.create.html | 393 ++------ docs/functions/vec2.cross.html | 391 ++------ docs/functions/vec2.dist.html | 389 ++------ docs/functions/vec2.distSq.html | 389 ++------ docs/functions/vec2.distance.html | 389 ++------ docs/functions/vec2.distanceSq.html | 389 ++------ docs/functions/vec2.div.html | 391 ++------ docs/functions/vec2.divScalar.html | 391 ++------ docs/functions/vec2.divide.html | 391 ++------ docs/functions/vec2.dot.html | 389 ++------ docs/functions/vec2.equals.html | 389 ++------ docs/functions/vec2.equalsApproximately.html | 389 ++------ docs/functions/vec2.floor.html | 389 ++------ docs/functions/vec2.fromValues.html | 389 ++------ docs/functions/vec2.inverse.html | 389 ++------ docs/functions/vec2.invert.html | 389 ++------ docs/functions/vec2.len.html | 387 ++------ docs/functions/vec2.lenSq.html | 387 ++------ docs/functions/vec2.length.html | 387 ++------ docs/functions/vec2.lengthSq.html | 387 ++------ docs/functions/vec2.lerp.html | 393 ++------ docs/functions/vec2.lerpV.html | 393 ++------ docs/functions/vec2.max.html | 391 ++------ docs/functions/vec2.min.html | 391 ++------ docs/functions/vec2.mul.html | 391 ++------ docs/functions/vec2.mulScalar.html | 391 ++------ docs/functions/vec2.multiply.html | 391 ++------ docs/functions/vec2.negate.html | 389 ++------ docs/functions/vec2.normalize.html | 389 ++------ docs/functions/vec2.random.html | 389 ++------ docs/functions/vec2.round.html | 389 ++------ docs/functions/vec2.scale.html | 391 ++------ docs/functions/vec2.set.html | 393 ++------ docs/functions/vec2.setDefaultType.html | 409 ++------- docs/functions/vec2.sub.html | 391 ++------ docs/functions/vec2.subtract.html | 391 ++------ docs/functions/vec2.transformMat3.html | 391 ++------ docs/functions/vec2.transformMat4.html | 391 ++------ docs/functions/vec2.zero.html | 387 ++------ docs/functions/vec3.add.html | 396 ++------- docs/functions/vec3.addScaled.html | 398 ++------- docs/functions/vec3.angle.html | 394 ++------- docs/functions/vec3.ceil.html | 394 ++------- docs/functions/vec3.clamp.html | 398 ++------- docs/functions/vec3.clone.html | 398 ++------- docs/functions/vec3.copy.html | 398 ++------- docs/functions/vec3.create.html | 396 ++------- docs/functions/vec3.cross.html | 396 ++------- docs/functions/vec3.dist.html | 394 ++------- docs/functions/vec3.distSq.html | 394 ++------- docs/functions/vec3.distance.html | 394 ++------- docs/functions/vec3.distanceSq.html | 394 ++------- docs/functions/vec3.div.html | 396 ++------- docs/functions/vec3.divScalar.html | 396 ++------- docs/functions/vec3.divide.html | 396 ++------- docs/functions/vec3.dot.html | 394 ++------- docs/functions/vec3.equals.html | 394 ++------- docs/functions/vec3.equalsApproximately.html | 394 ++------- docs/functions/vec3.floor.html | 394 ++------- docs/functions/vec3.fromValues.html | 396 ++------- docs/functions/vec3.getAxis.html | 396 ++------- docs/functions/vec3.getScaling.html | 391 ++------ docs/functions/vec3.getTranslation.html | 394 ++------- docs/functions/vec3.inverse.html | 394 ++------- docs/functions/vec3.invert.html | 394 ++------- docs/functions/vec3.len.html | 392 ++------ docs/functions/vec3.lenSq.html | 392 ++------ docs/functions/vec3.length.html | 392 ++------ docs/functions/vec3.lengthSq.html | 392 ++------ docs/functions/vec3.lerp.html | 398 ++------- docs/functions/vec3.lerpV.html | 398 ++------- docs/functions/vec3.max.html | 396 ++------- docs/functions/vec3.min.html | 396 ++------- docs/functions/vec3.mul.html | 396 ++------- docs/functions/vec3.mulScalar.html | 396 ++------- docs/functions/vec3.multiply.html | 396 ++------- docs/functions/vec3.negate.html | 394 ++------- docs/functions/vec3.normalize.html | 394 ++------- docs/functions/vec3.random.html | 394 ++------- docs/functions/vec3.round.html | 394 ++------- docs/functions/vec3.scale.html | 396 ++------- docs/functions/vec3.set.html | 400 ++------- docs/functions/vec3.setDefaultType.html | 414 ++------- docs/functions/vec3.sub.html | 396 ++------- docs/functions/vec3.subtract.html | 396 ++------- docs/functions/vec3.transformMat3.html | 396 ++------- docs/functions/vec3.transformMat4.html | 396 ++------- .../functions/vec3.transformMat4Upper3x3.html | 396 ++------- docs/functions/vec3.transformQuat.html | 396 ++------- docs/functions/vec3.zero.html | 392 ++------ docs/functions/vec4.add.html | 387 ++------ docs/functions/vec4.addScaled.html | 389 ++------ docs/functions/vec4.ceil.html | 385 ++------ docs/functions/vec4.clamp.html | 389 ++------ docs/functions/vec4.clone.html | 389 ++------ docs/functions/vec4.copy.html | 389 ++------ docs/functions/vec4.create.html | 389 ++------ docs/functions/vec4.dist.html | 385 ++------ docs/functions/vec4.distSq.html | 385 ++------ docs/functions/vec4.distance.html | 385 ++------ docs/functions/vec4.distanceSq.html | 385 ++------ docs/functions/vec4.div.html | 387 ++------ docs/functions/vec4.divScalar.html | 387 ++------ docs/functions/vec4.divide.html | 387 ++------ docs/functions/vec4.dot.html | 385 ++------ docs/functions/vec4.equals.html | 385 ++------ docs/functions/vec4.equalsApproximately.html | 385 ++------ docs/functions/vec4.floor.html | 385 ++------ docs/functions/vec4.fromValues.html | 389 ++------ docs/functions/vec4.inverse.html | 385 ++------ docs/functions/vec4.invert.html | 385 ++------ docs/functions/vec4.len.html | 383 ++------ docs/functions/vec4.lenSq.html | 383 ++------ docs/functions/vec4.length.html | 383 ++------ docs/functions/vec4.lengthSq.html | 383 ++------ docs/functions/vec4.lerp.html | 389 ++------ docs/functions/vec4.lerpV.html | 389 ++------ docs/functions/vec4.max.html | 387 ++------ docs/functions/vec4.min.html | 387 ++------ docs/functions/vec4.mul.html | 387 ++------ docs/functions/vec4.mulScalar.html | 387 ++------ docs/functions/vec4.multiply.html | 387 ++------ docs/functions/vec4.negate.html | 385 ++------ docs/functions/vec4.normalize.html | 385 ++------ docs/functions/vec4.round.html | 385 ++------ docs/functions/vec4.scale.html | 387 ++------ docs/functions/vec4.set.html | 393 ++------ docs/functions/vec4.setDefaultType.html | 405 ++------- docs/functions/vec4.sub.html | 387 ++------ docs/functions/vec4.subtract.html | 387 ++------ docs/functions/vec4.transformMat4.html | 387 ++------ docs/functions/vec4.zero.html | 383 ++------ docs/index.html | 464 +++------- docs/modules.html | 364 +------- docs/modules/mat3.html | 428 ++------- docs/modules/mat4.html | 470 +++------- docs/modules/quat.html | 451 +++------- docs/modules/utils.html | 350 +------- docs/modules/vec2.html | 475 +++------- docs/modules/vec3.html | 490 +++------- docs/modules/vec4.html | 463 +++------- docs/types/Mat3-1.html | 342 +------ docs/types/Mat4-1.html | 342 +------ docs/types/Quat-1.html | 342 +------ docs/types/Vec2-1.html | 342 +------ docs/types/Vec3-1.html | 342 +------ docs/types/Vec4-1.html | 342 +------ docs/types/mat3.Mat3LikeCtor.html | 371 ++------ docs/types/mat4.Mat4LikeCtor.html | 385 ++------ docs/types/quat.RotationOrder.html | 370 ++------ docs/variables/utils.EPSILON.html | 340 +------ 293 files changed, 21321 insertions(+), 86637 deletions(-) create mode 100644 docs/functions/mat3.uniformScale.html create mode 100644 docs/functions/mat3.uniformScaling.html create mode 100644 docs/functions/mat4.uniformScale.html create mode 100644 docs/functions/mat4.uniformScaling.html diff --git a/dist/2.x/mat3-impl.d.ts b/dist/2.x/mat3-impl.d.ts index b9f0109..e36cf05 100644 --- a/dist/2.x/mat3-impl.d.ts +++ b/dist/2.x/mat3-impl.d.ts @@ -3,7 +3,7 @@ import { Mat3 } from './mat3'; import { Mat4 } from './mat4'; import Vec2 from './vec2-impl'; export default Mat3; -export type Mat3LikeCtor = new (n: number) => Mat3; +export declare type Mat3LikeCtor = new (n: number) => Mat3; /** * Sets the type this library creates for a Mat3 * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array` @@ -253,3 +253,19 @@ export declare function scaling(v: Vec2, dst?: Mat3): Mat3; * @returns The scaled matrix. */ export declare function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3; +/** + * Creates a 3-by-3 matrix which scales uniformly in each dimension + * @param s - Amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +export declare function uniformScaling(s: number, dst?: Mat3): Mat3; +/** + * Scales the given 3-by-3 matrix in each dimension by an amount + * given. + * @param m - The matrix to be modified. + * @param s - Amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +export declare function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3; diff --git a/dist/2.x/mat3.d.ts b/dist/2.x/mat3.d.ts index 691ff27..d916eb9 100644 --- a/dist/2.x/mat3.d.ts +++ b/dist/2.x/mat3.d.ts @@ -3,4 +3,4 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link mat3.setDefaultType}. */ -export type Mat3 = number[] | Float32Array | Float64Array; +export declare type Mat3 = number[] | Float32Array | Float64Array; diff --git a/dist/2.x/mat4-impl.d.ts b/dist/2.x/mat4-impl.d.ts index caea032..b0263f4 100644 --- a/dist/2.x/mat4-impl.d.ts +++ b/dist/2.x/mat4-impl.d.ts @@ -3,7 +3,7 @@ import { Mat4 } from './mat4'; import { Quat } from './quat'; import Vec3 from './vec3-impl'; export default Mat4; -export type Mat4LikeCtor = new (n: number) => Mat4; +export declare type Mat4LikeCtor = new (n: number) => Mat4; /** * Sets the type this library creates for a Mat4 * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array` @@ -450,3 +450,18 @@ export declare function scaling(v: Vec3, dst?: Mat4): Mat4; * @returns The scaled matrix. */ export declare function scale(m: Mat4, v: Vec3, dst?: Mat4): Mat4; +/** + * Creates a 4-by-4 matrix which scales a uniform amount in each dimension. + * @param s - the amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +export declare function uniformScaling(s: number, dst?: Mat4): Mat4; +/** + * Scales the given 4-by-4 matrix in each dimension by a uniform scale. + * @param m - The matrix to be modified. + * @param s - The amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +export declare function uniformScale(m: Mat4, s: number, dst?: Mat4): Mat4; diff --git a/dist/2.x/mat4.d.ts b/dist/2.x/mat4.d.ts index 90b1708..0fc8d12 100644 --- a/dist/2.x/mat4.d.ts +++ b/dist/2.x/mat4.d.ts @@ -3,4 +3,4 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link mat4.setDefaultType}. */ -export type Mat4 = number[] | Float32Array | Float64Array; +export declare type Mat4 = number[] | Float32Array | Float64Array; diff --git a/dist/2.x/quat-impl.d.ts b/dist/2.x/quat-impl.d.ts index 7153b02..ad93ebd 100644 --- a/dist/2.x/quat-impl.d.ts +++ b/dist/2.x/quat-impl.d.ts @@ -2,7 +2,7 @@ import { Quat, create, setDefaultType } from './quat'; import { Mat3 } from './mat3.js'; import { Mat4 } from './mat4.js'; import { Vec3 } from './vec3.js'; -export type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx'; +export declare type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx'; export default Quat; export { create, setDefaultType }; /** diff --git a/dist/2.x/quat.d.ts b/dist/2.x/quat.d.ts index 7a35408..3aea92e 100644 --- a/dist/2.x/quat.d.ts +++ b/dist/2.x/quat.d.ts @@ -3,7 +3,7 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link quat.setDefaultType}. */ -export type Quat = number[] | Float32Array | Float64Array; +export declare type Quat = number[] | Float32Array | Float64Array; /** * * Quat4 math functions. diff --git a/dist/2.x/vec2.d.ts b/dist/2.x/vec2.d.ts index ab730b6..6965cc8 100644 --- a/dist/2.x/vec2.d.ts +++ b/dist/2.x/vec2.d.ts @@ -3,7 +3,7 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link vec2.setDefaultType}. */ -export type Vec2 = number[] | Float32Array | Float64Array; +export declare type Vec2 = number[] | Float32Array | Float64Array; /** * * Vec2 math functions. diff --git a/dist/2.x/vec3.d.ts b/dist/2.x/vec3.d.ts index 7d21ca3..dc13eef 100644 --- a/dist/2.x/vec3.d.ts +++ b/dist/2.x/vec3.d.ts @@ -3,7 +3,7 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link vec3.setDefaultType}. */ -export type Vec3 = number[] | Float32Array | Float64Array; +export declare type Vec3 = number[] | Float32Array | Float64Array; /** * * Vec3 math functions. diff --git a/dist/2.x/vec4.d.ts b/dist/2.x/vec4.d.ts index 09a3f29..3f6426a 100644 --- a/dist/2.x/vec4.d.ts +++ b/dist/2.x/vec4.d.ts @@ -3,7 +3,7 @@ * When created by the library will create the default type which is `Float32Array` * but can be set by calling {@link vec4.setDefaultType}. */ -export type Vec4 = number[] | Float32Array | Float64Array; +export declare type Vec4 = number[] | Float32Array | Float64Array; /** * * Vec4 math functions. diff --git a/dist/2.x/wgpu-matrix.js b/dist/2.x/wgpu-matrix.js index bba5b6e..4800968 100644 --- a/dist/2.x/wgpu-matrix.js +++ b/dist/2.x/wgpu-matrix.js @@ -1,4 +1,4 @@ -/* wgpu-matrix@2.4.2, license MIT */ +/* wgpu-matrix@2.5.0, license MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : @@ -100,12 +100,12 @@ var utils = /*#__PURE__*/Object.freeze({ __proto__: null, get EPSILON () { return EPSILON; }, + setEpsilon: setEpsilon, degToRad: degToRad, - euclideanModulo: euclideanModulo, - inverseLerp: inverseLerp, - lerp: lerp$4, radToDeg: radToDeg, - setEpsilon: setEpsilon + lerp: lerp$4, + inverseLerp: inverseLerp, + euclideanModulo: euclideanModulo }); /* @@ -744,52 +744,52 @@ var vec2Impl = /*#__PURE__*/Object.freeze({ __proto__: null, + create: create$5, + setDefaultType: setDefaultType$6, + fromValues: fromValues$3, + set: set$5, + ceil: ceil$2, + floor: floor$2, + round: round$2, + clamp: clamp$2, add: add$3, addScaled: addScaled$2, angle: angle$2, - ceil: ceil$2, - clamp: clamp$2, - clone: clone$5, - copy: copy$5, - create: create$5, - cross: cross$1, - dist: dist$2, - distSq: distSq$2, - distance: distance$2, - distanceSq: distanceSq$2, - div: div$2, - divScalar: divScalar$3, - divide: divide$2, - dot: dot$3, - equals: equals$5, + subtract: subtract$3, + sub: sub$3, equalsApproximately: equalsApproximately$5, - floor: floor$2, - fromValues: fromValues$3, - inverse: inverse$5, - invert: invert$4, - len: len$3, - lenSq: lenSq$3, - length: length$3, - lengthSq: lengthSq$3, + equals: equals$5, lerp: lerp$3, lerpV: lerpV$2, max: max$2, min: min$2, - mul: mul$5, mulScalar: mulScalar$3, - multiply: multiply$5, - negate: negate$4, + scale: scale$5, + divScalar: divScalar$3, + inverse: inverse$5, + invert: invert$4, + cross: cross$1, + dot: dot$3, + length: length$3, + len: len$3, + lengthSq: lengthSq$3, + lenSq: lenSq$3, + distance: distance$2, + dist: dist$2, + distanceSq: distanceSq$2, + distSq: distSq$2, normalize: normalize$3, + negate: negate$4, + copy: copy$5, + clone: clone$5, + multiply: multiply$5, + mul: mul$5, + divide: divide$2, + div: div$2, random: random$1, - round: round$2, - scale: scale$5, - set: set$5, - setDefaultType: setDefaultType$6, - sub: sub$3, - subtract: subtract$3, - transformMat3: transformMat3$1, + zero: zero$2, transformMat4: transformMat4$2, - zero: zero$2 + transformMat3: transformMat3$1 }); /* @@ -1499,37 +1499,81 @@ } return dst; } + /** + * Creates a 3-by-3 matrix which scales uniformly in each dimension + * @param s - Amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ + function uniformScaling$1(s, dst) { + dst = dst || newMat3(); + dst[0] = s; + dst[1] = 0; + dst[2] = 0; + dst[4] = 0; + dst[5] = s; + dst[6] = 0; + dst[8] = 0; + dst[9] = 0; + dst[10] = 1; + return dst; + } + /** + * Scales the given 3-by-3 matrix in each dimension by an amount + * given. + * @param m - The matrix to be modified. + * @param s - Amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ + function uniformScale$1(m, s, dst) { + dst = dst || newMat3(); + dst[0] = s * m[0 * 4 + 0]; + dst[1] = s * m[0 * 4 + 1]; + dst[2] = s * m[0 * 4 + 2]; + dst[4] = s * m[1 * 4 + 0]; + dst[5] = s * m[1 * 4 + 1]; + dst[6] = s * m[1 * 4 + 2]; + if (m !== dst) { + dst[8] = m[8]; + dst[9] = m[9]; + dst[10] = m[10]; + } + return dst; + } var mat3Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - clone: clone$4, - copy: copy$4, + setDefaultType: setDefaultType$5, create: create$4, - determinant: determinant$1, - equals: equals$4, - equalsApproximately: equalsApproximately$4, + set: set$4, fromMat4: fromMat4, fromQuat: fromQuat$1, - getAxis: getAxis$2, - getScaling: getScaling$2, - getTranslation: getTranslation$2, + negate: negate$3, + copy: copy$4, + clone: clone$4, + equalsApproximately: equalsApproximately$4, + equals: equals$4, identity: identity$2, + transpose: transpose$1, inverse: inverse$4, + determinant: determinant$1, invert: invert$3, - mul: mul$4, multiply: multiply$4, - negate: negate$3, - rotate: rotate$1, - rotation: rotation$1, - scale: scale$4, - scaling: scaling$1, - set: set$4, - setAxis: setAxis$1, - setDefaultType: setDefaultType$5, + mul: mul$4, setTranslation: setTranslation$1, - translate: translate$1, + getTranslation: getTranslation$2, + getAxis: getAxis$2, + setAxis: setAxis$1, + getScaling: getScaling$2, translation: translation$1, - transpose: transpose$1 + translate: translate$1, + rotation: rotation$1, + rotate: rotate$1, + scaling: scaling$1, + scale: scale$4, + uniformScaling: uniformScaling$1, + uniformScale: uniformScale$1 }); /* @@ -2282,57 +2326,57 @@ var vec3Impl = /*#__PURE__*/Object.freeze({ __proto__: null, + create: create$3, + setDefaultType: setDefaultType$4, + fromValues: fromValues$2, + set: set$3, + ceil: ceil$1, + floor: floor$1, + round: round$1, + clamp: clamp$1, add: add$2, addScaled: addScaled$1, angle: angle$1, - ceil: ceil$1, - clamp: clamp$1, - clone: clone$3, - copy: copy$3, - create: create$3, - cross: cross, - dist: dist$1, - distSq: distSq$1, - distance: distance$1, - distanceSq: distanceSq$1, - div: div$1, - divScalar: divScalar$2, - divide: divide$1, - dot: dot$2, - equals: equals$3, + subtract: subtract$2, + sub: sub$2, equalsApproximately: equalsApproximately$3, - floor: floor$1, - fromValues: fromValues$2, - getAxis: getAxis$1, - getScaling: getScaling$1, - getTranslation: getTranslation$1, - inverse: inverse$3, - invert: invert$2, - len: len$2, - lenSq: lenSq$2, - length: length$2, - lengthSq: lengthSq$2, + equals: equals$3, lerp: lerp$2, lerpV: lerpV$1, max: max$1, min: min$1, - mul: mul$3, mulScalar: mulScalar$2, - multiply: multiply$3, - negate: negate$2, + scale: scale$3, + divScalar: divScalar$2, + inverse: inverse$3, + invert: invert$2, + cross: cross, + dot: dot$2, + length: length$2, + len: len$2, + lengthSq: lengthSq$2, + lenSq: lenSq$2, + distance: distance$1, + dist: dist$1, + distanceSq: distanceSq$1, + distSq: distSq$1, normalize: normalize$2, + negate: negate$2, + copy: copy$3, + clone: clone$3, + multiply: multiply$3, + mul: mul$3, + divide: divide$1, + div: div$1, random: random, - round: round$1, - scale: scale$3, - set: set$3, - setDefaultType: setDefaultType$4, - sub: sub$2, - subtract: subtract$2, - transformMat3: transformMat3, + zero: zero$1, transformMat4: transformMat4$1, transformMat4Upper3x3: transformMat4Upper3x3, + transformMat3: transformMat3, transformQuat: transformQuat, - zero: zero$1 + getTranslation: getTranslation$1, + getAxis: getAxis$1, + getScaling: getScaling$1 }); /** @@ -3799,51 +3843,108 @@ } return dst; } + /** + * Creates a 4-by-4 matrix which scales a uniform amount in each dimension. + * @param s - the amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ + function uniformScaling(s, dst) { + dst = dst || new MatType(16); + dst[0] = s; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + dst[4] = 0; + dst[5] = s; + dst[6] = 0; + dst[7] = 0; + dst[8] = 0; + dst[9] = 0; + dst[10] = s; + dst[11] = 0; + dst[12] = 0; + dst[13] = 0; + dst[14] = 0; + dst[15] = 1; + return dst; + } + /** + * Scales the given 4-by-4 matrix in each dimension by a uniform scale. + * @param m - The matrix to be modified. + * @param s - The amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ + function uniformScale(m, s, dst) { + dst = dst || new MatType(16); + dst[0] = s * m[0 * 4 + 0]; + dst[1] = s * m[0 * 4 + 1]; + dst[2] = s * m[0 * 4 + 2]; + dst[3] = s * m[0 * 4 + 3]; + dst[4] = s * m[1 * 4 + 0]; + dst[5] = s * m[1 * 4 + 1]; + dst[6] = s * m[1 * 4 + 2]; + dst[7] = s * m[1 * 4 + 3]; + dst[8] = s * m[2 * 4 + 0]; + dst[9] = s * m[2 * 4 + 1]; + dst[10] = s * m[2 * 4 + 2]; + dst[11] = s * m[2 * 4 + 3]; + if (m !== dst) { + dst[12] = m[12]; + dst[13] = m[13]; + dst[14] = m[14]; + dst[15] = m[15]; + } + return dst; + } var mat4Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - aim: aim, - axisRotate: axisRotate, - axisRotation: axisRotation, - cameraAim: cameraAim, - clone: clone$2, - copy: copy$2, + setDefaultType: setDefaultType$3, create: create$2, - determinant: determinant, - equals: equals$2, - equalsApproximately: equalsApproximately$2, + set: set$2, fromMat3: fromMat3, fromQuat: fromQuat, - frustum: frustum, - getAxis: getAxis, - getScaling: getScaling, - getTranslation: getTranslation, + negate: negate$1, + copy: copy$2, + clone: clone$2, + equalsApproximately: equalsApproximately$2, + equals: equals$2, identity: identity$1, + transpose: transpose, inverse: inverse$2, + determinant: determinant, invert: invert$1, - lookAt: lookAt, - mul: mul$2, multiply: multiply$2, - negate: negate$1, - ortho: ortho, + mul: mul$2, + setTranslation: setTranslation, + getTranslation: getTranslation, + getAxis: getAxis, + setAxis: setAxis, + getScaling: getScaling, perspective: perspective, - rotate: rotate, + ortho: ortho, + frustum: frustum, + aim: aim, + cameraAim: cameraAim, + lookAt: lookAt, + translation: translation, + translate: translate, + rotationX: rotationX, rotateX: rotateX$1, + rotationY: rotationY, rotateY: rotateY$1, + rotationZ: rotationZ, rotateZ: rotateZ$1, + axisRotation: axisRotation, rotation: rotation, - rotationX: rotationX, - rotationY: rotationY, - rotationZ: rotationZ, - scale: scale$2, + axisRotate: axisRotate, + rotate: rotate, scaling: scaling, - set: set$2, - setAxis: setAxis, - setDefaultType: setDefaultType$3, - setTranslation: setTranslation, - translate: translate, - translation: translation, - transpose: transpose + scale: scale$2, + uniformScaling: uniformScaling, + uniformScale: uniformScale }); /* @@ -4610,43 +4711,43 @@ var quatImpl = /*#__PURE__*/Object.freeze({ __proto__: null, - add: add$1, + create: create$1, + setDefaultType: setDefaultType$2, + fromValues: fromValues$1, + set: set$1, + fromAxisAngle: fromAxisAngle, + toAxisAngle: toAxisAngle, angle: angle, - clone: clone$1, + multiply: multiply$1, + mul: mul$1, + rotateX: rotateX, + rotateY: rotateY, + rotateZ: rotateZ, + slerp: slerp, + inverse: inverse$1, conjugate: conjugate, + fromMat: fromMat, + fromEuler: fromEuler, copy: copy$1, - create: create$1, + clone: clone$1, + add: add$1, + subtract: subtract$1, + sub: sub$1, + mulScalar: mulScalar$1, + scale: scale$1, divScalar: divScalar$1, dot: dot$1, - equals: equals$1, - equalsApproximately: equalsApproximately$1, - fromAxisAngle: fromAxisAngle, - fromEuler: fromEuler, - fromMat: fromMat, - fromValues: fromValues$1, - identity: identity, - inverse: inverse$1, - len: len$1, - lenSq: lenSq$1, + lerp: lerp$1, length: length$1, + len: len$1, lengthSq: lengthSq$1, - lerp: lerp$1, - mul: mul$1, - mulScalar: mulScalar$1, - multiply: multiply$1, + lenSq: lenSq$1, normalize: normalize$1, - rotateX: rotateX, - rotateY: rotateY, - rotateZ: rotateZ, + equalsApproximately: equalsApproximately$1, + equals: equals$1, + identity: identity, rotationTo: rotationTo, - scale: scale$1, - set: set$1, - setDefaultType: setDefaultType$2, - slerp: slerp, - sqlerp: sqlerp, - sub: sub$1, - subtract: subtract$1, - toAxisAngle: toAxisAngle + sqlerp: sqlerp }); /* @@ -5273,48 +5374,48 @@ var vec4Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - add: add, - addScaled: addScaled, + create: create, + setDefaultType: setDefaultType$1, + fromValues: fromValues, + set: set, ceil: ceil, + floor: floor, + round: round, clamp: clamp, - clone: clone, - copy: copy, - create: create, - dist: dist, - distSq: distSq, - distance: distance, - distanceSq: distanceSq, - div: div, - divScalar: divScalar, - divide: divide, - dot: dot, - equals: equals, + add: add, + addScaled: addScaled, + subtract: subtract, + sub: sub, equalsApproximately: equalsApproximately, - floor: floor, - fromValues: fromValues, - inverse: inverse, - invert: invert, - len: len, - lenSq: lenSq, - length: length, - lengthSq: lengthSq, + equals: equals, lerp: lerp, lerpV: lerpV, max: max, min: min, - mul: mul, mulScalar: mulScalar, - multiply: multiply, - negate: negate, - normalize: normalize, - round: round, scale: scale, - set: set, - setDefaultType: setDefaultType$1, - sub: sub, - subtract: subtract, - transformMat4: transformMat4, - zero: zero + divScalar: divScalar, + inverse: inverse, + invert: invert, + dot: dot, + length: length, + len: len, + lengthSq: lengthSq, + lenSq: lenSq, + distance: distance, + dist: dist, + distanceSq: distanceSq, + distSq: distSq, + normalize: normalize, + negate: negate, + copy: copy, + clone: clone, + multiply: multiply, + mul: mul, + divide: divide, + div: div, + zero: zero, + transformMat4: transformMat4 }); /** diff --git a/dist/2.x/wgpu-matrix.js.map b/dist/2.x/wgpu-matrix.js.map index 24a3aea..3bc72bd 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/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3.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 */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\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 = a[0];\n const by = a[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?: Vec2): Vec2 {\n dst = dst || new VecType(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 * 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 * 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 { 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 = a[0];\n const by = a[1];\n const bz = a[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}","\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(a: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== a) {\n dst = copy(a, 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 * 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","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","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","rotate","scaling","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","rotateX","rotateY","rotateZ","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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AC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;IACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,C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EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEtB,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,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAA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"} \ No newline at end of file +{"version":3,"file":"wgpu-matrix.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3.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 */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\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 = a[0];\n const by = a[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?: Vec2): Vec2 {\n dst = dst || new VecType(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 * 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 */\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 { 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 = a[0];\n const by = a[1];\n const bz = a[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}","\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(a: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== a) {\n dst = copy(a, 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","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","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","rotate","scaling","uniformScaling","uniformScale","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","rotateX","rotateY","rotateZ","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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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;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,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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AM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEtB,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,GAA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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 12b212b..9e1fbdc 100644 --- a/dist/2.x/wgpu-matrix.min.js +++ b/dist/2.x/wgpu-matrix.min.js @@ -1,8 +1,8 @@ -/* wgpu-matrix@2.4.2, license MIT */ +/* wgpu-matrix@2.5.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=z;z=a;return b}function ba(a=0,b=0){const c=new z(2);void 0!==a&&(c[0]=a,void 0!==b&&(c[1]=b));return c}function va(a,b,c){c=c||new z(2);c[0]=a[0]-b[0];c[1]=a[1]-b[1];return c}function wa(a,b,c){c=c||new z(2);c[0]=a[0]*b;c[1]=a[1]*b;return c} function xa(a,b){b=b||new z(2);b[0]=1/a[0];b[1]=1/a[1];return b}function ya(a,b){return a[0]*b[0]+a[1]*b[1]}function za(a){const b=a[0];a=a[1];return Math.sqrt(b*b+a*a)}function Aa(a){const b=a[0];a=a[1];return b*b+a*a}function Ba(a,b){const c=a[0]-b[0];a=a[1]-b[1];return Math.sqrt(c*c+a*a)}function Ca(a,b){const c=a[0]-b[0];a=a[1]-b[1];return c*c+a*a}function Da(a,b){b=b||new z(2);b[0]=a[0];b[1]=a[1];return b}function Ea(a,b,c){c=c||new z(2);c[0]=a[0]*b[0];c[1]=a[1]*b[1];return c}function Fa(a,b, -c){c=c||new z(2);c[0]=a[0]/b[0];c[1]=a[1]/b[1];return c}function Ga(a){const b=Ha;Ha=a;H=Ia.get(a);return b}function pa(a,b){b=b||H();b[0]=a[0];b[1]=a[1];b[2]=a[2];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[8]=a[8];b[9]=a[9];b[10]=a[10];return b}function Ja(a){a=a||H();a[0]=1;a[1]=0;a[2]=0;a[4]=0;a[5]=1;a[6]=0;a[8]=0;a[9]=0;a[10]=1;return a}function Ka(a,b){b=b||H();const c=a[0],d=a[1],e=a[2],f=a[4],g=a[5],h=a[6],l=a[8],k=a[9];a=a[10];const m=a*g-h*k,n=-a*f+h*l,q=k*f-g*l,r=1/(c*m+d*n+e*q);b[0]=m*r;b[1]=(-a* -d+e*k)*r;b[2]=(h*d-e*g)*r;b[4]=n*r;b[5]=(a*c-e*l)*r;b[6]=(-h*c+e*f)*r;b[8]=q*r;b[9]=(-k*c+d*l)*r;b[10]=(g*c-d*f)*r;return b}function La(a,b,c){c=c||H();const d=a[0],e=a[1],f=a[2],g=a[4],h=a[5],l=a[6],k=a[8],m=a[9];a=a[10];const n=b[0],q=b[1],r=b[2],v=b[4],u=b[5],p=b[6],E=b[8],F=b[9];b=b[10];c[0]=d*n+g*q+k*r;c[1]=e*n+h*q+m*r;c[2]=f*n+l*q+a*r;c[4]=d*v+g*u+k*p;c[5]=e*v+h*u+m*p;c[6]=f*v+l*u+a*p;c[8]=d*E+g*F+k*b;c[9]=e*E+h*F+m*b;c[10]=f*E+l*F+a*b;return c}function Ma(a){const b=w;w=a;return b}function G(a, +c){c=c||new z(2);c[0]=a[0]/b[0];c[1]=a[1]/b[1];return c}function Ga(a){const b=Ha;Ha=a;G=Ia.get(a);return b}function pa(a,b){b=b||G();b[0]=a[0];b[1]=a[1];b[2]=a[2];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[8]=a[8];b[9]=a[9];b[10]=a[10];return b}function Ja(a){a=a||G();a[0]=1;a[1]=0;a[2]=0;a[4]=0;a[5]=1;a[6]=0;a[8]=0;a[9]=0;a[10]=1;return a}function Ka(a,b){b=b||G();const c=a[0],d=a[1],e=a[2],f=a[4],g=a[5],h=a[6],l=a[8],k=a[9];a=a[10];const m=a*g-h*k,n=-a*f+h*l,q=k*f-g*l,r=1/(c*m+d*n+e*q);b[0]=m*r;b[1]=(-a* +d+e*k)*r;b[2]=(h*d-e*g)*r;b[4]=n*r;b[5]=(a*c-e*l)*r;b[6]=(-h*c+e*f)*r;b[8]=q*r;b[9]=(-k*c+d*l)*r;b[10]=(g*c-d*f)*r;return b}function La(a,b,c){c=c||G();const d=a[0],e=a[1],f=a[2],g=a[4],h=a[5],l=a[6],k=a[8],m=a[9];a=a[10];const n=b[0],q=b[1],r=b[2],v=b[4],u=b[5],p=b[6],E=b[8],F=b[9];b=b[10];c[0]=d*n+g*q+k*r;c[1]=e*n+h*q+m*r;c[2]=f*n+l*q+a*r;c[4]=d*v+g*u+k*p;c[5]=e*v+h*u+m*p;c[6]=f*v+l*u+a*p;c[8]=d*E+g*F+k*b;c[9]=e*E+h*F+m*b;c[10]=f*E+l*F+a*b;return c}function Ma(a){const b=w;w=a;return b}function H(a, b,c){const d=new w(3);void 0!==a&&(d[0]=a,void 0!==b&&(d[1]=b,void 0!==c&&(d[2]=c)));return d}function ca(a,b,c){c=c||new w(3);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c}function Na(a,b,c){c=c||new w(3);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c}function Oa(a,b){b=b||new w(3);b[0]=1/a[0];b[1]=1/a[1];b[2]=1/a[2];return b}function P(a,b,c){c=c||new w(3);const d=a[2]*b[0]-a[0]*b[2],e=a[0]*b[1]-a[1]*b[0];c[0]=a[1]*b[2]-a[2]*b[1];c[1]=d;c[2]=e;return c}function qa(a,b){return a[0]*b[0]+a[1]* b[1]+a[2]*b[2]}function ra(a){const b=a[0],c=a[1];a=a[2];return Math.sqrt(b*b+c*c+a*a)}function Pa(a){const b=a[0],c=a[1];a=a[2];return b*b+c*c+a*a}function Qa(a,b){const c=a[0]-b[0],d=a[1]-b[1];a=a[2]-b[2];return Math.sqrt(c*c+d*d+a*a)}function Ra(a,b){const c=a[0]-b[0],d=a[1]-b[1];a=a[2]-b[2];return c*c+d*d+a*a}function O(a,b){b=b||new w(3);const c=a[0],d=a[1];a=a[2];const e=Math.sqrt(c*c+d*d+a*a);1E-5new Float32Array(12)], -[Float64Array,()=>new Float64Array(12)],[Array,()=>Array(12).fill(0)]]);let H=Ia.get(Float32Array);var Bb=Object.freeze({__proto__:null,clone:pa,copy:pa,create:function(a,b,c,d,e,f,g,h,l){const k=H();k[3]=0;k[7]=0;k[11]=0;void 0!==a&&(k[0]=a,void 0!==b&&(k[1]=b,void 0!==c&&(k[2]=c,void 0!==d&&(k[4]=d,void 0!==e&&(k[5]=e,void 0!==f&&(k[6]=f,void 0!==g&&(k[8]=g,void 0!==h&&(k[9]=h,void 0!==l&&(k[10]=l)))))))));return k},determinant:function(a){const b=a[1],c=a[2],d=a[5],e=a[6],f=a[9],g=a[10];return a[0]* -(d*g-f*e)-a[4]*(b*g-f*c)+a[8]*(b*e-d*c)},equals:function(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[4]===b[4]&&a[5]===b[5]&&a[6]===b[6]&&a[8]===b[8]&&a[9]===b[9]&&a[10]===b[10]},equalsApproximately:function(a,b){return Math.abs(a[0]-b[0])a[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:db,identity:function(a){a=a||new B(4);a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a},inverse:function(a,b){b=b||new B(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:kb,lenSq:lb,length:kb,lengthSq:lb,lerp:function(a,b,c,d){d=d||new B(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:fb,mulScalar:ib,multiply:fb,normalize:mb,rotateX:function(a,b,c){c=c||new B(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 B(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 B(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 B(4);N=N||G();ta=ta||G(1,0,0);ua=ua||G(0,1,0);const d=qa(a,b);if(-.999999>d)return P(ta,a,N),1E-6>ra(N)&&P(ua,a,N),O(N,N),eb(N,Math.PI,c),c;if(.999999t?(b[0]=a[0]/d,b[1]=a[1]/d,b[2]=a[2]/d):(b[0]=1,b[1]=0,b[2]=0);return{angle:c,axis:b}}});let C=Float32Array;var Fb=Object.freeze({__proto__:null,add:function(a,b,c){c=c||new C(4);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},addScaled:function(a,b,c,d){d=d||new C(4); -d[0]=a[0]+b[0]*c;d[1]=a[1]+b[1]*c;d[2]=a[2]+b[2]*c;d[3]=a[3]+b[3]*c;return d},ceil:function(a,b){b=b||new C(4);b[0]=Math.ceil(a[0]);b[1]=Math.ceil(a[1]);b[2]=Math.ceil(a[2]);b[3]=Math.ceil(a[3]);return b},clamp:function(a,b=0,c=1,d){d=d||new C(4);d[0]=Math.min(c,Math.max(b,a[0]));d[1]=Math.min(c,Math.max(b,a[1]));d[2]=Math.min(c,Math.max(b,a[2]));d[3]=Math.min(c,Math.max(b,a[3]));return d},clone:wb,copy:wb,create:ob,dist:ub,distSq:vb,distance:ub,distanceSq:vb,div:yb,divScalar:function(a,b,c){c=c|| -new C(4);c[0]=a[0]/b;c[1]=a[1]/b;c[2]=a[2]/b;c[3]=a[3]/b;return c},divide:yb,dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]},equals:function(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]},equalsApproximately:function(a,b){return Math.abs(a[0]-b[0])new Float32Array(12)], +[Float64Array,()=>new Float64Array(12)],[Array,()=>Array(12).fill(0)]]);let G=Ia.get(Float32Array);var Bb=Object.freeze({__proto__:null,setDefaultType:Ga,create:function(a,b,c,d,e,f,g,h,l){const k=G();k[3]=0;k[7]=0;k[11]=0;void 0!==a&&(k[0]=a,void 0!==b&&(k[1]=b,void 0!==c&&(k[2]=c,void 0!==d&&(k[4]=d,void 0!==e&&(k[5]=e,void 0!==f&&(k[6]=f,void 0!==g&&(k[8]=g,void 0!==h&&(k[9]=h,void 0!==l&&(k[10]=l)))))))));return k},set:function(a,b,c,d,e,f,g,h,l,k){k=k||G();k[0]=a;k[1]=b;k[2]=c;k[3]=0;k[4]=d; +k[5]=e;k[6]=f;k[7]=0;k[8]=g;k[9]=h;k[10]=l;k[11]=0;return k},fromMat4:function(a,b){b=b||G();b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=0;b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=0;b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=0;return b},fromQuat:function(a,b){b=b||G();var c=a[0],d=a[1],e=a[2];a=a[3];var f=c+c,g=d+d;const h=e+e;c*=f;const l=d*f;d*=g;const k=e*f,m=e*g;e*=h;f*=a;g*=a;a*=h;b[0]=1-d-e;b[1]=l+a;b[2]=k-g;b[3]=0;b[4]=l-a;b[5]=1-c-e;b[6]=m+f;b[7]=0;b[8]=k+g;b[9]=m-f;b[10]=1-c-d;b[11]=0;return b},negate:function(a, +b){b=b||G();b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[4]=-a[4];b[5]=-a[5];b[6]=-a[6];b[8]=-a[8];b[9]=-a[9];b[10]=-a[10];return b},copy:pa,clone:pa,equalsApproximately:function(a,b){return Math.abs(a[0]-b[0])t?(b[0]=a[0]/d,b[1]=a[1]/d,b[2]=a[2]/d):(b[0]=1,b[1]=0,b[2]=0);return{angle:c,axis:b}},angle:function(a,b){a=jb(a,b);return Math.acos(2*a*a-1)},multiply:fb,mul:fb,rotateX:function(a,b,c){c=c||new B(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 B(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 B(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},slerp:ma,inverse:function(a,b){b=b|| +new B(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},conjugate:function(a,b){b=b||new B(4);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b},fromMat:function(a,b){b=b||new B(4);var c=a[0]+a[5]+a[10];if(0a[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},fromEuler:function(a,b,c,d,e){e=e||new B(4);a*=.5;var f=.5*b;b=.5*c;c=Math.sin(a);a=Math.cos(a);const g=Math.sin(f);f=Math.cos(f);const h=Math.sin(b);b=Math.cos(b);switch(d){case "xyz":e[0]=c*f*b+a*g*h;e[1]=a*g*b-c*f*h;e[2]=a*f*h+c*g*b;e[3]=a*f*b-c*g*h;break;case "xzy":e[0]=c*f*b-a*g*h;e[1]=a*g*b-c*f*h;e[2]=a*f*h+c*g*b;e[3]=a*f*b+c*g*h;break;case "yxz":e[0]=c*f*b+a*g*h;e[1]=a*g*b-c*f*h;e[2]=a*f*h-c*g* +b;e[3]=a*f*b+c*g*h;break;case "yzx":e[0]=c*f*b+a*g*h;e[1]=a*g*b+c*f*h;e[2]=a*f*h-c*g*b;e[3]=a*f*b-c*g*h;break;case "zxy":e[0]=c*f*b-a*g*h;e[1]=a*g*b+c*f*h;e[2]=a*f*h+c*g*b;e[3]=a*f*b-c*g*h;break;case "zyx":e[0]=c*f*b-a*g*h;e[1]=a*g*b+c*f*h;e[2]=a*f*h-c*g*b;e[3]=a*f*b+c*g*h;break;default:throw Error(`Unknown rotation order: ${d}`);}return e},copy:gb,clone:gb,add:function(a,b,c){c=c||new B(4);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:hb,sub:hb,mulScalar:ib,scale:ib, +divScalar:function(a,b,c){c=c||new B(4);c[0]=a[0]/b;c[1]=a[1]/b;c[2]=a[2]/b;c[3]=a[3]/b;return c},dot:jb,lerp:function(a,b,c,d){d=d||new B(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},length:kb,len:kb,lengthSq:lb,lenSq:lb,normalize:mb,equalsApproximately:function(a,b){return Math.abs(a[0]-b[0])d)return P(ta,a,N),1E-6>ra(N)&&P(ua,a,N),O(N,N),eb(N,Math.PI,c),c;if(.999999 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 */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\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 = a[0];\n const by = a[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?: Vec2): Vec2 {\n dst = dst || new VecType(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 * 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 * 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 { 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 = a[0];\n const by = a[1];\n const bz = a[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}","\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(a: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== a) {\n dst = copy(a, 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 * 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","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","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","rotate","scaling","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","rotateX","rotateY","rotateZ","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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AAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGA,OAAa;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,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,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAEtB,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,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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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/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3.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 */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\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 = a[0];\n const by = a[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?: Vec2): Vec2 {\n dst = dst || new VecType(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 * 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 */\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 { 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 = a[0];\n const by = a[1];\n const bz = a[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}","\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(a: Mat4, v: Vec3, axis: number, dst: Mat4): Mat4 {\n if (dst !== a) {\n dst = copy(a, 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","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","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","rotate","scaling","uniformScaling","uniformScale","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","rotateX","rotateY","rotateZ","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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,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;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzB,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,GAA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AAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAEtB,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,GA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"} \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index 4c8fa61..abd0485 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,58 +1,54 @@ "use strict"; -"use strict";(()=>{var Se=Object.create;var re=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,Qe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ie=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Te(e))!Qe.call(t,i)&&i!==r&&re(t,i,{get:()=>e[i],enumerable:!(n=we(e,i))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?Se(ke(t)):{},Ie(e||!t||!t.__esModule?re(r,"default",{value:t,enumerable:!0}):r,t));var ae=Pe((se,oe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var d=t.utils.clone(r)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(n.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(r+=n[u+1]*i[d+1],u+=2,d+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),y;m in s.node.edges?y=s.node.edges[m]:(y=new t.TokenSet,s.node.edges[m]=y),s.str.length==1&&(y.final=!0),i.push({node:y,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof se=="object"?oe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ne=[];function G(t,e){ne.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){ne.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n,app:this}),n.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),r=e?.parentElement;for(;r&&!r.classList.contains(".tsd-navigation");)r instanceof HTMLDetailsElement&&(r.open=!0),r=r.parentElement;if(e){let n=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=n}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let r=e.parentElement;for(;r&&r.tagName!=="SECTION";)r=r.parentElement;if(r&&r.offsetParent==null){this.alwaysVisibleMember=r,r.classList.add("always-visible");let n=document.createElement("p");n.classList.add("warning"),n.textContent="This member is normally hidden due to your filter settings.",r.prepend(n)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let r;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(r),r=setTimeout(()=>{e.classList.remove("visible"),r=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let r;return()=>{clearTimeout(r),r=setTimeout(()=>t(),e)}};var ce=Ce(ae());function de(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("tsd-search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Oe(t,n,r,s)}function Oe(t,e,r,n){r.addEventListener("input",ie(()=>{Re(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Fe(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function _e(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ce.Index.load(window.searchData.index))}function Re(t,e,r,n){if(_e(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${le(l.parent,i)}.${u}`);let d=document.createElement("li");d.classList.value=l.classes??"";let m=document.createElement("a");m.href=n.base+l.url,m.innerHTML=u,d.append(m),e.appendChild(d)}}function ue(t,e){let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let n=r;if(e===1)do n=n.nextElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove("current"),n.classList.add("current"))}}function Fe(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function le(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+n.length))}`),s=o+n.length,o=r.indexOf(n,s);return i.push(K(t.substring(s))),i.join("")}var Me={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Me[e])}var P=class{constructor(e){this.el=e.el,this.app=e.app}};var M="mousedown",fe="mousemove",N="mouseup",J={x:0,y:0},he=!1,ee=!1,De=!1,D=!1,pe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(pe?"is-mobile":"not-mobile");pe&&"ontouchstart"in document.documentElement&&(De=!0,M="touchstart",fe="touchmove",N="touchend");document.addEventListener(M,t=>{ee=!0,D=!1;let e=M=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=M=="touchstart"?t.targetTouches[0]:t,r=J.x-(e.pageX||0),n=J.y-(e.pageY||0);D=Math.sqrt(r*r+n*n)>10}});document.addEventListener(N,()=>{ee=!1});document.addEventListener("click",t=>{he&&(t.preventDefault(),t.stopImmediatePropagation(),he=!1)});var X=class extends P{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(M,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){D||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!D&&this.active&&r.target.closest(".col-sidebar")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),n.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var me=document.head.appendChild(document.createElement("style"));me.dataset.for="filters";var Y=class extends P{constructor(r){super(r);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),me.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let r=Q.getItem(this.key);return r?r==="true":this.el.checked}setLocalStorage(r){Q.setItem(this.key,r.toString()),this.value=r,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let n=Array.from(r.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);r.style.display=n?"none":"block"})}};var Z=class extends P{constructor(r){super(r);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update()),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ve(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}de();G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var ge=document.getElementById("tsd-theme");ge&&ve(ge);var Ae=new U;Object.defineProperty(window,"app",{value:Ae});document.querySelectorAll("summary a").forEach(t=>{t.addEventListener("click",()=>{location.assign(t.href)})});})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ +"use strict";(()=>{var Qe=Object.create;var ae=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Me=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ce(e))!Re.call(t,i)&&i!==n&&ae(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Qe(Oe(t)):{},Me(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));var de=_e((ce,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var h=t.utils.clone(n)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(r.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(n+=r[l+1]*i[h+1],l+=2,h+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),m=s.str.charAt(1),v;m in s.node.edges?v=s.node.edges[m]:(v=new t.TokenSet,s.node.edges[m]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ce=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});var le=[];function j(t,e){le.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){le.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r}),r.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,n){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(n)}removeEventListener(e,n){if(!(e in this.listeners))return;let r=this.listeners[e];for(let i=0,s=r.length;i{let n=Date.now();return(...r)=>{n+e-Date.now()<0&&(t(...r),n=Date.now())}};var re=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.navigation=document.querySelector(".col-menu"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.searchInput=document.querySelector("#tsd-search input"),this.searchInput&&this.searchInput.addEventListener("focus",()=>{this.hideShowToolbar()}),this.onResize(),this.onScroll()}triggerResize(){let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onScroll(){this.scrollTop=window.scrollY||0;let n=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(n),this.hideShowToolbar()}hideShowToolbar(){let n=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0||!!this.searchInput&&this.searchInput===document.activeElement,n!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.navigation?.classList.toggle("col-menu--hide")),this.lastY=this.scrollTop}},R=re;R.instance=new re;var X=class extends k{constructor(n){super(n);this.anchors=[];this.index=-1;R.instance.addEventListener("resize",()=>this.onResize()),R.instance.addEventListener("scroll",r=>this.onScroll(r)),this.createAnchors()}createAnchors(){let n=window.location.href;n.indexOf("#")!=-1&&(n=n.substring(0,n.indexOf("#"))),this.el.querySelectorAll("a").forEach(r=>{let i=r.href;if(i.indexOf("#")==-1||i.substring(0,n.length)!=n)return;let s=i.substring(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=r.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let n;for(let i=0,s=this.anchors.length;ii.position-s.position);let r=new CustomEvent("scroll",{detail:{scrollTop:R.instance.scrollTop}});this.onScroll(r)}onScroll(n){let r=n.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>r;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var ue=(t,e=100)=>{let n;return(...r)=>{clearTimeout(n),n=setTimeout(()=>t(r),e)}};var me=De(de());function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let n=document.querySelector("#tsd-search input"),r=document.querySelector("#tsd-search .results");if(!n||!r)throw new Error("The input field or the result list wrapper was not found");let i=!1;r.addEventListener("mousedown",()=>i=!0),r.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),n.addEventListener("focus",()=>t.classList.add("has-focus")),n.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Fe(t,r,n,s)}function Fe(t,e,n,r){n.addEventListener("input",ue(()=>{Ae(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?fe(e,-1):s.key==="ArrowDown"?fe(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function He(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=me.Index.load(window.searchData.index))}function Ae(t,e,n,r){if(He(r,t),!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s=i?r.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${pe(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes??"";let m=document.createElement("a");m.href=r.base+u.url,m.innerHTML=l,h.append(m),e.appendChild(h)}}function fe(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function pe(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ie(t.substring(s,o)),`${ie(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ie(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function ie(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var F="mousedown",ye="mousemove",B="mouseup",Z={x:0,y:0},ge=!1,se=!1,je=!1,H=!1,xe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(xe?"is-mobile":"not-mobile");xe&&"ontouchstart"in document.documentElement&&(je=!0,F="touchstart",ye="touchmove",B="touchend");document.addEventListener(F,t=>{se=!0,H=!1;let e=F=="touchstart"?t.targetTouches[0]:t;Z.y=e.pageY||0,Z.x=e.pageX||0});document.addEventListener(ye,t=>{if(!!se&&!H){let e=F=="touchstart"?t.targetTouches[0]:t,n=Z.x-(e.pageX||0),r=Z.y-(e.pageY||0);H=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{se=!1});document.addEventListener("click",t=>{ge&&(t.preventDefault(),t.stopImmediatePropagation(),ge=!1)});var K=class extends k{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){H||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!H&&this.active&&n.target.closest(".col-menu")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var oe;try{oe=localStorage}catch{oe={getItem(){return null},setItem(){}}}var Q=oe;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var ee=class extends k{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var te=class extends k{constructor(n){super(n);this.calculateHeights(),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.textContent.replace(/\s+/g,"-").toLowerCase()}`,this.setLocalStorage(this.fromLocalStorage(),!0),this.summary.addEventListener("click",r=>this.toggleVisibility(r)),this.icon.style.transform=this.getIconRotation()}getIconRotation(n=this.el.open){return`rotate(${n?0:-90}deg)`}calculateHeights(){let n=this.el.open,{position:r,left:i}=this.el.style;this.el.style.position="fixed",this.el.style.left="-9999px",this.el.open=!0,this.expandedHeight=this.el.offsetHeight+"px",this.el.open=!1,this.collapsedHeight=this.el.offsetHeight+"px",this.el.open=n,this.el.style.height=n?this.expandedHeight:this.collapsedHeight,this.el.style.position=r,this.el.style.left=i}toggleVisibility(n){n.preventDefault(),this.el.style.overflow="hidden",this.el.open?this.collapse():this.expand()}expand(n=!0){this.el.open=!0,this.animate(this.collapsedHeight,this.expandedHeight,{opening:!0,duration:n?300:0})}collapse(n=!0){this.animate(this.expandedHeight,this.collapsedHeight,{opening:!1,duration:n?300:0})}animate(n,r,{opening:i,duration:s=300}){if(this.animation)return;let o={duration:s,easing:"ease"};this.animation=this.el.animate({height:[n,r]},o),this.icon.animate({transform:[this.icon.style.transform||this.getIconRotation(!i),this.getIconRotation(i)]},o).addEventListener("finish",()=>{this.icon.style.transform=this.getIconRotation(i)}),this.animation.addEventListener("finish",()=>this.animationEnd(i))}animationEnd(n){this.el.open=n,this.animation=void 0,this.el.style.height="auto",this.el.style.overflow="visible",this.setLocalStorage(n)}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.open}setLocalStorage(n,r=!1){this.fromLocalStorage()===n&&!r||(Q.setItem(this.key,n.toString()),this.el.open=n,this.handleValueChange(r))}handleValueChange(n=!1){this.fromLocalStorage()===this.el.open&&!n||(this.fromLocalStorage()?this.expand(!1):this.collapse(!1))}};function be(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,Ee(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),Ee(t.value)})}function Ee(t){document.documentElement.dataset.theme=t}ve();j(X,".menu-highlight");j(K,"a[data-toggle]");j(te,".tsd-index-accordion");j(ee,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("theme");Se&&be(Se);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})(); +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ diff --git a/docs/assets/search.js b/docs/assets/search.js index 156a837..756537b 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"rows\":[{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/setDefaultType.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"Mat3\",\"url\":\"types/Mat3-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"mat3\",\"url\":\"modules/mat3.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/mat3.setDefaultType.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/mat3.create.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/mat3.set.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"fromMat4\",\"url\":\"functions/mat3.fromMat4.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"fromQuat\",\"url\":\"functions/mat3.fromQuat.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/mat3.negate.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/mat3.copy.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/mat3.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/mat3.equals.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/mat3.identity.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"transpose\",\"url\":\"functions/mat3.transpose.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/mat3.inverse.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"determinant\",\"url\":\"functions/mat3.determinant.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/mat3.multiply.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"setTranslation\",\"url\":\"functions/mat3.setTranslation.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/mat3.getTranslation.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/mat3.getAxis.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"setAxis\",\"url\":\"functions/mat3.setAxis.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/mat3.getScaling.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"translation\",\"url\":\"functions/mat3.translation.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"translate\",\"url\":\"functions/mat3.translate.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"rotation\",\"url\":\"functions/mat3.rotation.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"rotate\",\"url\":\"functions/mat3.rotate.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"scaling\",\"url\":\"functions/mat3.scaling.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/mat3.scale.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/mat3.html#default\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":4194304,\"name\":\"Mat3LikeCtor\",\"url\":\"types/mat3.Mat3LikeCtor.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"types/mat3.Mat3LikeCtor.html#__type\",\"classes\":\"\",\"parent\":\"mat3.Mat3LikeCtor\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/mat3.clone.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/mat3.invert.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/mat3.mul.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":4194304,\"name\":\"Mat4\",\"url\":\"types/Mat4-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"mat4\",\"url\":\"modules/mat4.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/mat4.setDefaultType.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/mat4.create.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/mat4.set.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"fromMat3\",\"url\":\"functions/mat4.fromMat3.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"fromQuat\",\"url\":\"functions/mat4.fromQuat.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/mat4.negate.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/mat4.copy.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/mat4.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/mat4.equals.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/mat4.identity.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"transpose\",\"url\":\"functions/mat4.transpose.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/mat4.inverse.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"determinant\",\"url\":\"functions/mat4.determinant.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/mat4.multiply.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"setTranslation\",\"url\":\"functions/mat4.setTranslation.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/mat4.getTranslation.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/mat4.getAxis.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"setAxis\",\"url\":\"functions/mat4.setAxis.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/mat4.getScaling.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"perspective\",\"url\":\"functions/mat4.perspective.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"ortho\",\"url\":\"functions/mat4.ortho.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"frustum\",\"url\":\"functions/mat4.frustum.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"aim\",\"url\":\"functions/mat4.aim.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"cameraAim\",\"url\":\"functions/mat4.cameraAim.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"lookAt\",\"url\":\"functions/mat4.lookAt.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"translation\",\"url\":\"functions/mat4.translation.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"translate\",\"url\":\"functions/mat4.translate.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationX\",\"url\":\"functions/mat4.rotationX.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateX\",\"url\":\"functions/mat4.rotateX.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationY\",\"url\":\"functions/mat4.rotationY.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateY\",\"url\":\"functions/mat4.rotateY.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationZ\",\"url\":\"functions/mat4.rotationZ.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateZ\",\"url\":\"functions/mat4.rotateZ.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"axisRotation\",\"url\":\"functions/mat4.axisRotation.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"axisRotate\",\"url\":\"functions/mat4.axisRotate.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"scaling\",\"url\":\"functions/mat4.scaling.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/mat4.scale.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/mat4.html#default\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":4194304,\"name\":\"Mat4LikeCtor\",\"url\":\"types/mat4.Mat4LikeCtor.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"types/mat4.Mat4LikeCtor.html#__type\",\"classes\":\"\",\"parent\":\"mat4.Mat4LikeCtor\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/mat4.clone.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/mat4.invert.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/mat4.mul.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotation\",\"url\":\"functions/mat4.rotation.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotate\",\"url\":\"functions/mat4.rotate.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":4194304,\"name\":\"Quat\",\"url\":\"types/Quat-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"quat\",\"url\":\"modules/quat.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/quat.set.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromAxisAngle\",\"url\":\"functions/quat.fromAxisAngle.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"toAxisAngle\",\"url\":\"functions/quat.toAxisAngle.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type\",\"classes\":\"\",\"parent\":\"quat.toAxisAngle.toAxisAngle\"},{\"kind\":1024,\"name\":\"angle\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type.angle\",\"classes\":\"\",\"parent\":\"quat.toAxisAngle.toAxisAngle.__type\"},{\"kind\":1024,\"name\":\"axis\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type.axis\",\"classes\":\"\",\"parent\":\"quat.toAxisAngle.toAxisAngle.__type\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/quat.angle.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/quat.multiply.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateX\",\"url\":\"functions/quat.rotateX.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateY\",\"url\":\"functions/quat.rotateY.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateZ\",\"url\":\"functions/quat.rotateZ.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"slerp\",\"url\":\"functions/quat.slerp.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/quat.inverse.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"conjugate\",\"url\":\"functions/quat.conjugate.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromMat\",\"url\":\"functions/quat.fromMat.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromEuler\",\"url\":\"functions/quat.fromEuler.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/quat.copy.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/quat.add.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/quat.subtract.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/quat.mulScalar.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/quat.divScalar.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/quat.dot.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/quat.lerp.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/quat.length.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/quat.lengthSq.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/quat.normalize.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/quat.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/quat.equals.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/quat.identity.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotationTo\",\"url\":\"functions/quat.rotationTo.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"sqlerp\",\"url\":\"functions/quat.sqlerp.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":4194304,\"name\":\"RotationOrder\",\"url\":\"types/quat.RotationOrder.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/quat.html#default\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/quat.create.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/quat.setDefaultType.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/quat.setDefaultType.html#setDefaultType.__type\",\"classes\":\"\",\"parent\":\"quat.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/quat.fromValues.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/quat.mul.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/quat.clone.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/quat.sub.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/quat.scale.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/quat.len.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/quat.lenSq.html\",\"classes\":\"\",\"parent\":\"quat\"},{\"kind\":4,\"name\":\"utils\",\"url\":\"modules/utils.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"setEpsilon\",\"url\":\"functions/utils.setEpsilon.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"degToRad\",\"url\":\"functions/utils.degToRad.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"radToDeg\",\"url\":\"functions/utils.radToDeg.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/utils.lerp.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"inverseLerp\",\"url\":\"functions/utils.inverseLerp.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"euclideanModulo\",\"url\":\"functions/utils.euclideanModulo.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":32,\"name\":\"EPSILON\",\"url\":\"variables/utils.EPSILON.html\",\"classes\":\"\",\"parent\":\"utils\"},{\"kind\":4194304,\"name\":\"Vec2\",\"url\":\"types/Vec2-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"vec2\",\"url\":\"modules/vec2.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec2.set.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec2.ceil.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec2.floor.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec2.round.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec2.clamp.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec2.add.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec2.addScaled.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/vec2.angle.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec2.subtract.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec2.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec2.equals.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec2.lerp.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec2.lerpV.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec2.max.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec2.min.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec2.mulScalar.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec2.divScalar.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec2.inverse.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"cross\",\"url\":\"functions/vec2.cross.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec2.dot.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec2.length.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec2.lengthSq.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec2.distance.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec2.distanceSq.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec2.normalize.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec2.negate.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec2.copy.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec2.multiply.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec2.divide.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"random\",\"url\":\"functions/vec2.random.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec2.zero.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec2.transformMat4.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"transformMat3\",\"url\":\"functions/vec2.transformMat3.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec2.html#default\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec2.create.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec2.setDefaultType.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec2.setDefaultType.html#setDefaultType.__type\",\"classes\":\"\",\"parent\":\"vec2.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec2.fromValues.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec2.sub.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec2.scale.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec2.invert.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec2.len.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec2.lenSq.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec2.dist.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec2.distSq.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec2.clone.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec2.mul.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec2.div.html\",\"classes\":\"\",\"parent\":\"vec2\"},{\"kind\":4194304,\"name\":\"Vec3\",\"url\":\"types/Vec3-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"vec3\",\"url\":\"modules/vec3.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec3.set.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec3.ceil.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec3.floor.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec3.round.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec3.clamp.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec3.add.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec3.addScaled.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/vec3.angle.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec3.subtract.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec3.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec3.equals.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec3.lerp.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec3.lerpV.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec3.max.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec3.min.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec3.mulScalar.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec3.divScalar.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec3.inverse.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"cross\",\"url\":\"functions/vec3.cross.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec3.dot.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec3.length.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec3.lengthSq.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec3.distance.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec3.distanceSq.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec3.normalize.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec3.negate.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec3.copy.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec3.multiply.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec3.divide.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"random\",\"url\":\"functions/vec3.random.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec3.zero.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec3.transformMat4.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat4Upper3x3\",\"url\":\"functions/vec3.transformMat4Upper3x3.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat3\",\"url\":\"functions/vec3.transformMat3.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformQuat\",\"url\":\"functions/vec3.transformQuat.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/vec3.getTranslation.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/vec3.getAxis.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/vec3.getScaling.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec3.html#default\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec3.create.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec3.setDefaultType.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec3.setDefaultType.html#setDefaultType.__type\",\"classes\":\"\",\"parent\":\"vec3.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec3.fromValues.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec3.sub.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec3.scale.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec3.invert.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec3.len.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec3.lenSq.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec3.dist.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec3.distSq.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec3.clone.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec3.mul.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec3.div.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":4194304,\"name\":\"Vec4\",\"url\":\"types/Vec4-1.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"vec4\",\"url\":\"modules/vec4.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec4.set.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec4.ceil.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec4.floor.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec4.round.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec4.clamp.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec4.add.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec4.addScaled.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec4.subtract.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec4.equalsApproximately.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec4.equals.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec4.lerp.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec4.lerpV.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec4.max.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec4.min.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec4.mulScalar.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec4.divScalar.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec4.inverse.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec4.dot.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec4.length.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec4.lengthSq.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec4.distance.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec4.distanceSq.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec4.normalize.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec4.negate.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec4.copy.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec4.multiply.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec4.divide.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec4.zero.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec4.transformMat4.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec4.html#default\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec4.create.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec4.setDefaultType.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec4.setDefaultType.html#setDefaultType.__type\",\"classes\":\"\",\"parent\":\"vec4.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec4.fromValues.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec4.sub.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec4.scale.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec4.invert.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec4.len.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec4.lenSq.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec4.dist.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec4.distSq.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec4.clone.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec4.mul.html\",\"classes\":\"\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec4.div.html\",\"classes\":\"\",\"parent\":\"vec4\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,36.411]],[\"comment/0\",[]],[\"name/1\",[1,47.397]],[\"comment/1\",[]],[\"name/2\",[1,47.397]],[\"comment/2\",[]],[\"name/3\",[0,36.411]],[\"comment/3\",[]],[\"name/4\",[2,37.842]],[\"comment/4\",[]],[\"name/5\",[3,37.842]],[\"comment/5\",[]],[\"name/6\",[4,52.505]],[\"comment/6\",[]],[\"name/7\",[5,47.397]],[\"comment/7\",[]],[\"name/8\",[6,39.512]],[\"comment/8\",[]],[\"name/9\",[7,37.842]],[\"comment/9\",[]],[\"name/10\",[8,37.842]],[\"comment/10\",[]],[\"name/11\",[9,37.842]],[\"comment/11\",[]],[\"name/12\",[10,44.032]],[\"comment/12\",[]],[\"name/13\",[11,47.397]],[\"comment/13\",[]],[\"name/14\",[12,37.842]],[\"comment/14\",[]],[\"name/15\",[13,47.397]],[\"comment/15\",[]],[\"name/16\",[14,37.842]],[\"comment/16\",[]],[\"name/17\",[15,47.397]],[\"comment/17\",[]],[\"name/18\",[16,44.032]],[\"comment/18\",[]],[\"name/19\",[17,44.032]],[\"comment/19\",[]],[\"name/20\",[18,47.397]],[\"comment/20\",[]],[\"name/21\",[19,44.032]],[\"comment/21\",[]],[\"name/22\",[20,47.397]],[\"comment/22\",[]],[\"name/23\",[21,47.397]],[\"comment/23\",[]],[\"name/24\",[22,47.397]],[\"comment/24\",[]],[\"name/25\",[23,47.397]],[\"comment/25\",[]],[\"name/26\",[24,47.397]],[\"comment/26\",[]],[\"name/27\",[25,37.842]],[\"comment/27\",[]],[\"name/28\",[26,37.842]],[\"comment/28\",[]],[\"name/29\",[27,52.505]],[\"comment/29\",[]],[\"name/30\",[28,36.411]],[\"comment/30\",[]],[\"name/31\",[29,37.842]],[\"comment/31\",[]],[\"name/32\",[30,39.512]],[\"comment/32\",[]],[\"name/33\",[31,37.842]],[\"comment/33\",[]],[\"name/34\",[32,47.397]],[\"comment/34\",[]],[\"name/35\",[32,47.397]],[\"comment/35\",[]],[\"name/36\",[0,36.411]],[\"comment/36\",[]],[\"name/37\",[2,37.842]],[\"comment/37\",[]],[\"name/38\",[3,37.842]],[\"comment/38\",[]],[\"name/39\",[33,52.505]],[\"comment/39\",[]],[\"name/40\",[5,47.397]],[\"comment/40\",[]],[\"name/41\",[6,39.512]],[\"comment/41\",[]],[\"name/42\",[7,37.842]],[\"comment/42\",[]],[\"name/43\",[8,37.842]],[\"comment/43\",[]],[\"name/44\",[9,37.842]],[\"comment/44\",[]],[\"name/45\",[10,44.032]],[\"comment/45\",[]],[\"name/46\",[11,47.397]],[\"comment/46\",[]],[\"name/47\",[12,37.842]],[\"comment/47\",[]],[\"name/48\",[13,47.397]],[\"comment/48\",[]],[\"name/49\",[14,37.842]],[\"comment/49\",[]],[\"name/50\",[15,47.397]],[\"comment/50\",[]],[\"name/51\",[16,44.032]],[\"comment/51\",[]],[\"name/52\",[17,44.032]],[\"comment/52\",[]],[\"name/53\",[18,47.397]],[\"comment/53\",[]],[\"name/54\",[19,44.032]],[\"comment/54\",[]],[\"name/55\",[34,52.505]],[\"comment/55\",[]],[\"name/56\",[35,52.505]],[\"comment/56\",[]],[\"name/57\",[36,52.505]],[\"comment/57\",[]],[\"name/58\",[37,52.505]],[\"comment/58\",[]],[\"name/59\",[38,52.505]],[\"comment/59\",[]],[\"name/60\",[39,52.505]],[\"comment/60\",[]],[\"name/61\",[20,47.397]],[\"comment/61\",[]],[\"name/62\",[21,47.397]],[\"comment/62\",[]],[\"name/63\",[40,52.505]],[\"comment/63\",[]],[\"name/64\",[41,47.397]],[\"comment/64\",[]],[\"name/65\",[42,52.505]],[\"comment/65\",[]],[\"name/66\",[43,47.397]],[\"comment/66\",[]],[\"name/67\",[44,52.505]],[\"comment/67\",[]],[\"name/68\",[45,47.397]],[\"comment/68\",[]],[\"name/69\",[46,52.505]],[\"comment/69\",[]],[\"name/70\",[47,52.505]],[\"comment/70\",[]],[\"name/71\",[24,47.397]],[\"comment/71\",[]],[\"name/72\",[25,37.842]],[\"comment/72\",[]],[\"name/73\",[26,37.842]],[\"comment/73\",[]],[\"name/74\",[48,52.505]],[\"comment/74\",[]],[\"name/75\",[28,36.411]],[\"comment/75\",[]],[\"name/76\",[29,37.842]],[\"comment/76\",[]],[\"name/77\",[30,39.512]],[\"comment/77\",[]],[\"name/78\",[31,37.842]],[\"comment/78\",[]],[\"name/79\",[22,47.397]],[\"comment/79\",[]],[\"name/80\",[23,47.397]],[\"comment/80\",[]],[\"name/81\",[49,47.397]],[\"comment/81\",[]],[\"name/82\",[49,47.397]],[\"comment/82\",[]],[\"name/83\",[3,37.842]],[\"comment/83\",[]],[\"name/84\",[50,52.505]],[\"comment/84\",[]],[\"name/85\",[51,52.505]],[\"comment/85\",[]],[\"name/86\",[28,36.411]],[\"comment/86\",[]],[\"name/87\",[52,41.519]],[\"comment/87\",[]],[\"name/88\",[53,52.505]],[\"comment/88\",[]],[\"name/89\",[52,41.519]],[\"comment/89\",[]],[\"name/90\",[14,37.842]],[\"comment/90\",[]],[\"name/91\",[41,47.397]],[\"comment/91\",[]],[\"name/92\",[43,47.397]],[\"comment/92\",[]],[\"name/93\",[45,47.397]],[\"comment/93\",[]],[\"name/94\",[54,52.505]],[\"comment/94\",[]],[\"name/95\",[12,37.842]],[\"comment/95\",[]],[\"name/96\",[55,52.505]],[\"comment/96\",[]],[\"name/97\",[56,52.505]],[\"comment/97\",[]],[\"name/98\",[57,52.505]],[\"comment/98\",[]],[\"name/99\",[7,37.842]],[\"comment/99\",[]],[\"name/100\",[58,41.519]],[\"comment/100\",[]],[\"name/101\",[59,41.519]],[\"comment/101\",[]],[\"name/102\",[60,41.519]],[\"comment/102\",[]],[\"name/103\",[61,41.519]],[\"comment/103\",[]],[\"name/104\",[62,41.519]],[\"comment/104\",[]],[\"name/105\",[63,39.512]],[\"comment/105\",[]],[\"name/106\",[64,41.519]],[\"comment/106\",[]],[\"name/107\",[65,41.519]],[\"comment/107\",[]],[\"name/108\",[66,41.519]],[\"comment/108\",[]],[\"name/109\",[8,37.842]],[\"comment/109\",[]],[\"name/110\",[9,37.842]],[\"comment/110\",[]],[\"name/111\",[10,44.032]],[\"comment/111\",[]],[\"name/112\",[67,52.505]],[\"comment/112\",[]],[\"name/113\",[68,52.505]],[\"comment/113\",[]],[\"name/114\",[69,52.505]],[\"comment/114\",[]],[\"name/115\",[26,37.842]],[\"comment/115\",[]],[\"name/116\",[2,37.842]],[\"comment/116\",[]],[\"name/117\",[0,36.411]],[\"comment/117\",[]],[\"name/118\",[28,36.411]],[\"comment/118\",[]],[\"name/119\",[70,41.519]],[\"comment/119\",[]],[\"name/120\",[31,37.842]],[\"comment/120\",[]],[\"name/121\",[29,37.842]],[\"comment/121\",[]],[\"name/122\",[71,41.519]],[\"comment/122\",[]],[\"name/123\",[25,37.842]],[\"comment/123\",[]],[\"name/124\",[72,41.519]],[\"comment/124\",[]],[\"name/125\",[73,41.519]],[\"comment/125\",[]],[\"name/126\",[74,52.505]],[\"comment/126\",[]],[\"name/127\",[75,52.505]],[\"comment/127\",[]],[\"name/128\",[76,52.505]],[\"comment/128\",[]],[\"name/129\",[77,52.505]],[\"comment/129\",[]],[\"name/130\",[63,39.512]],[\"comment/130\",[]],[\"name/131\",[78,52.505]],[\"comment/131\",[]],[\"name/132\",[79,52.505]],[\"comment/132\",[]],[\"name/133\",[80,52.505]],[\"comment/133\",[]],[\"name/134\",[81,47.397]],[\"comment/134\",[]],[\"name/135\",[81,47.397]],[\"comment/135\",[]],[\"name/136\",[3,37.842]],[\"comment/136\",[]],[\"name/137\",[82,44.032]],[\"comment/137\",[]],[\"name/138\",[83,44.032]],[\"comment/138\",[]],[\"name/139\",[84,44.032]],[\"comment/139\",[]],[\"name/140\",[85,44.032]],[\"comment/140\",[]],[\"name/141\",[58,41.519]],[\"comment/141\",[]],[\"name/142\",[86,44.032]],[\"comment/142\",[]],[\"name/143\",[52,41.519]],[\"comment/143\",[]],[\"name/144\",[59,41.519]],[\"comment/144\",[]],[\"name/145\",[8,37.842]],[\"comment/145\",[]],[\"name/146\",[9,37.842]],[\"comment/146\",[]],[\"name/147\",[63,39.512]],[\"comment/147\",[]],[\"name/148\",[87,44.032]],[\"comment/148\",[]],[\"name/149\",[88,44.032]],[\"comment/149\",[]],[\"name/150\",[89,44.032]],[\"comment/150\",[]],[\"name/151\",[60,41.519]],[\"comment/151\",[]],[\"name/152\",[61,41.519]],[\"comment/152\",[]],[\"name/153\",[12,37.842]],[\"comment/153\",[]],[\"name/154\",[90,47.397]],[\"comment/154\",[]],[\"name/155\",[62,41.519]],[\"comment/155\",[]],[\"name/156\",[64,41.519]],[\"comment/156\",[]],[\"name/157\",[65,41.519]],[\"comment/157\",[]],[\"name/158\",[91,44.032]],[\"comment/158\",[]],[\"name/159\",[92,44.032]],[\"comment/159\",[]],[\"name/160\",[66,41.519]],[\"comment/160\",[]],[\"name/161\",[6,39.512]],[\"comment/161\",[]],[\"name/162\",[7,37.842]],[\"comment/162\",[]],[\"name/163\",[14,37.842]],[\"comment/163\",[]],[\"name/164\",[93,44.032]],[\"comment/164\",[]],[\"name/165\",[94,47.397]],[\"comment/165\",[]],[\"name/166\",[95,44.032]],[\"comment/166\",[]],[\"name/167\",[96,44.032]],[\"comment/167\",[]],[\"name/168\",[97,47.397]],[\"comment/168\",[]],[\"name/169\",[26,37.842]],[\"comment/169\",[]],[\"name/170\",[2,37.842]],[\"comment/170\",[]],[\"name/171\",[0,36.411]],[\"comment/171\",[]],[\"name/172\",[28,36.411]],[\"comment/172\",[]],[\"name/173\",[70,41.519]],[\"comment/173\",[]],[\"name/174\",[71,41.519]],[\"comment/174\",[]],[\"name/175\",[25,37.842]],[\"comment/175\",[]],[\"name/176\",[30,39.512]],[\"comment/176\",[]],[\"name/177\",[72,41.519]],[\"comment/177\",[]],[\"name/178\",[73,41.519]],[\"comment/178\",[]],[\"name/179\",[98,44.032]],[\"comment/179\",[]],[\"name/180\",[99,44.032]],[\"comment/180\",[]],[\"name/181\",[29,37.842]],[\"comment/181\",[]],[\"name/182\",[31,37.842]],[\"comment/182\",[]],[\"name/183\",[100,44.032]],[\"comment/183\",[]],[\"name/184\",[101,47.397]],[\"comment/184\",[]],[\"name/185\",[101,47.397]],[\"comment/185\",[]],[\"name/186\",[3,37.842]],[\"comment/186\",[]],[\"name/187\",[82,44.032]],[\"comment/187\",[]],[\"name/188\",[83,44.032]],[\"comment/188\",[]],[\"name/189\",[84,44.032]],[\"comment/189\",[]],[\"name/190\",[85,44.032]],[\"comment/190\",[]],[\"name/191\",[58,41.519]],[\"comment/191\",[]],[\"name/192\",[86,44.032]],[\"comment/192\",[]],[\"name/193\",[52,41.519]],[\"comment/193\",[]],[\"name/194\",[59,41.519]],[\"comment/194\",[]],[\"name/195\",[8,37.842]],[\"comment/195\",[]],[\"name/196\",[9,37.842]],[\"comment/196\",[]],[\"name/197\",[63,39.512]],[\"comment/197\",[]],[\"name/198\",[87,44.032]],[\"comment/198\",[]],[\"name/199\",[88,44.032]],[\"comment/199\",[]],[\"name/200\",[89,44.032]],[\"comment/200\",[]],[\"name/201\",[60,41.519]],[\"comment/201\",[]],[\"name/202\",[61,41.519]],[\"comment/202\",[]],[\"name/203\",[12,37.842]],[\"comment/203\",[]],[\"name/204\",[90,47.397]],[\"comment/204\",[]],[\"name/205\",[62,41.519]],[\"comment/205\",[]],[\"name/206\",[64,41.519]],[\"comment/206\",[]],[\"name/207\",[65,41.519]],[\"comment/207\",[]],[\"name/208\",[91,44.032]],[\"comment/208\",[]],[\"name/209\",[92,44.032]],[\"comment/209\",[]],[\"name/210\",[66,41.519]],[\"comment/210\",[]],[\"name/211\",[6,39.512]],[\"comment/211\",[]],[\"name/212\",[7,37.842]],[\"comment/212\",[]],[\"name/213\",[14,37.842]],[\"comment/213\",[]],[\"name/214\",[93,44.032]],[\"comment/214\",[]],[\"name/215\",[94,47.397]],[\"comment/215\",[]],[\"name/216\",[95,44.032]],[\"comment/216\",[]],[\"name/217\",[96,44.032]],[\"comment/217\",[]],[\"name/218\",[102,52.505]],[\"comment/218\",[]],[\"name/219\",[97,47.397]],[\"comment/219\",[]],[\"name/220\",[103,52.505]],[\"comment/220\",[]],[\"name/221\",[16,44.032]],[\"comment/221\",[]],[\"name/222\",[17,44.032]],[\"comment/222\",[]],[\"name/223\",[19,44.032]],[\"comment/223\",[]],[\"name/224\",[26,37.842]],[\"comment/224\",[]],[\"name/225\",[2,37.842]],[\"comment/225\",[]],[\"name/226\",[0,36.411]],[\"comment/226\",[]],[\"name/227\",[28,36.411]],[\"comment/227\",[]],[\"name/228\",[70,41.519]],[\"comment/228\",[]],[\"name/229\",[71,41.519]],[\"comment/229\",[]],[\"name/230\",[25,37.842]],[\"comment/230\",[]],[\"name/231\",[30,39.512]],[\"comment/231\",[]],[\"name/232\",[72,41.519]],[\"comment/232\",[]],[\"name/233\",[73,41.519]],[\"comment/233\",[]],[\"name/234\",[98,44.032]],[\"comment/234\",[]],[\"name/235\",[99,44.032]],[\"comment/235\",[]],[\"name/236\",[29,37.842]],[\"comment/236\",[]],[\"name/237\",[31,37.842]],[\"comment/237\",[]],[\"name/238\",[100,44.032]],[\"comment/238\",[]],[\"name/239\",[104,47.397]],[\"comment/239\",[]],[\"name/240\",[104,47.397]],[\"comment/240\",[]],[\"name/241\",[3,37.842]],[\"comment/241\",[]],[\"name/242\",[82,44.032]],[\"comment/242\",[]],[\"name/243\",[83,44.032]],[\"comment/243\",[]],[\"name/244\",[84,44.032]],[\"comment/244\",[]],[\"name/245\",[85,44.032]],[\"comment/245\",[]],[\"name/246\",[58,41.519]],[\"comment/246\",[]],[\"name/247\",[86,44.032]],[\"comment/247\",[]],[\"name/248\",[59,41.519]],[\"comment/248\",[]],[\"name/249\",[8,37.842]],[\"comment/249\",[]],[\"name/250\",[9,37.842]],[\"comment/250\",[]],[\"name/251\",[63,39.512]],[\"comment/251\",[]],[\"name/252\",[87,44.032]],[\"comment/252\",[]],[\"name/253\",[88,44.032]],[\"comment/253\",[]],[\"name/254\",[89,44.032]],[\"comment/254\",[]],[\"name/255\",[60,41.519]],[\"comment/255\",[]],[\"name/256\",[61,41.519]],[\"comment/256\",[]],[\"name/257\",[12,37.842]],[\"comment/257\",[]],[\"name/258\",[62,41.519]],[\"comment/258\",[]],[\"name/259\",[64,41.519]],[\"comment/259\",[]],[\"name/260\",[65,41.519]],[\"comment/260\",[]],[\"name/261\",[91,44.032]],[\"comment/261\",[]],[\"name/262\",[92,44.032]],[\"comment/262\",[]],[\"name/263\",[66,41.519]],[\"comment/263\",[]],[\"name/264\",[6,39.512]],[\"comment/264\",[]],[\"name/265\",[7,37.842]],[\"comment/265\",[]],[\"name/266\",[14,37.842]],[\"comment/266\",[]],[\"name/267\",[93,44.032]],[\"comment/267\",[]],[\"name/268\",[95,44.032]],[\"comment/268\",[]],[\"name/269\",[96,44.032]],[\"comment/269\",[]],[\"name/270\",[26,37.842]],[\"comment/270\",[]],[\"name/271\",[2,37.842]],[\"comment/271\",[]],[\"name/272\",[0,36.411]],[\"comment/272\",[]],[\"name/273\",[28,36.411]],[\"comment/273\",[]],[\"name/274\",[70,41.519]],[\"comment/274\",[]],[\"name/275\",[71,41.519]],[\"comment/275\",[]],[\"name/276\",[25,37.842]],[\"comment/276\",[]],[\"name/277\",[30,39.512]],[\"comment/277\",[]],[\"name/278\",[72,41.519]],[\"comment/278\",[]],[\"name/279\",[73,41.519]],[\"comment/279\",[]],[\"name/280\",[98,44.032]],[\"comment/280\",[]],[\"name/281\",[99,44.032]],[\"comment/281\",[]],[\"name/282\",[29,37.842]],[\"comment/282\",[]],[\"name/283\",[31,37.842]],[\"comment/283\",[]],[\"name/284\",[100,44.032]],[\"comment/284\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":28,\"name\":{\"30\":{},\"75\":{},\"86\":{},\"118\":{},\"172\":{},\"227\":{},\"273\":{}},\"comment\":{}}],[\"add\",{\"_index\":58,\"name\":{\"100\":{},\"141\":{},\"191\":{},\"246\":{}},\"comment\":{}}],[\"addscaled\",{\"_index\":86,\"name\":{\"142\":{},\"192\":{},\"247\":{}},\"comment\":{}}],[\"aim\",{\"_index\":37,\"name\":{\"58\":{}},\"comment\":{}}],[\"angle\",{\"_index\":52,\"name\":{\"87\":{},\"89\":{},\"143\":{},\"193\":{}},\"comment\":{}}],[\"axis\",{\"_index\":53,\"name\":{\"88\":{}},\"comment\":{}}],[\"axisrotate\",{\"_index\":47,\"name\":{\"70\":{}},\"comment\":{}}],[\"axisrotation\",{\"_index\":46,\"name\":{\"69\":{}},\"comment\":{}}],[\"cameraaim\",{\"_index\":38,\"name\":{\"59\":{}},\"comment\":{}}],[\"ceil\",{\"_index\":82,\"name\":{\"137\":{},\"187\":{},\"242\":{}},\"comment\":{}}],[\"clamp\",{\"_index\":85,\"name\":{\"140\":{},\"190\":{},\"245\":{}},\"comment\":{}}],[\"clone\",{\"_index\":29,\"name\":{\"31\":{},\"76\":{},\"121\":{},\"181\":{},\"236\":{},\"282\":{}},\"comment\":{}}],[\"conjugate\",{\"_index\":55,\"name\":{\"96\":{}},\"comment\":{}}],[\"copy\",{\"_index\":7,\"name\":{\"9\":{},\"42\":{},\"99\":{},\"162\":{},\"212\":{},\"265\":{}},\"comment\":{}}],[\"create\",{\"_index\":2,\"name\":{\"4\":{},\"37\":{},\"116\":{},\"170\":{},\"225\":{},\"271\":{}},\"comment\":{}}],[\"cross\",{\"_index\":90,\"name\":{\"154\":{},\"204\":{}},\"comment\":{}}],[\"default\",{\"_index\":26,\"name\":{\"28\":{},\"73\":{},\"115\":{},\"169\":{},\"224\":{},\"270\":{}},\"comment\":{}}],[\"degtorad\",{\"_index\":76,\"name\":{\"128\":{}},\"comment\":{}}],[\"determinant\",{\"_index\":13,\"name\":{\"15\":{},\"48\":{}},\"comment\":{}}],[\"dist\",{\"_index\":98,\"name\":{\"179\":{},\"234\":{},\"280\":{}},\"comment\":{}}],[\"distance\",{\"_index\":91,\"name\":{\"158\":{},\"208\":{},\"261\":{}},\"comment\":{}}],[\"distancesq\",{\"_index\":92,\"name\":{\"159\":{},\"209\":{},\"262\":{}},\"comment\":{}}],[\"distsq\",{\"_index\":99,\"name\":{\"180\":{},\"235\":{},\"281\":{}},\"comment\":{}}],[\"div\",{\"_index\":100,\"name\":{\"183\":{},\"238\":{},\"284\":{}},\"comment\":{}}],[\"divide\",{\"_index\":93,\"name\":{\"164\":{},\"214\":{},\"267\":{}},\"comment\":{}}],[\"divscalar\",{\"_index\":61,\"name\":{\"103\":{},\"152\":{},\"202\":{},\"256\":{}},\"comment\":{}}],[\"dot\",{\"_index\":62,\"name\":{\"104\":{},\"155\":{},\"205\":{},\"258\":{}},\"comment\":{}}],[\"epsilon\",{\"_index\":80,\"name\":{\"133\":{}},\"comment\":{}}],[\"equals\",{\"_index\":9,\"name\":{\"11\":{},\"44\":{},\"110\":{},\"146\":{},\"196\":{},\"250\":{}},\"comment\":{}}],[\"equalsapproximately\",{\"_index\":8,\"name\":{\"10\":{},\"43\":{},\"109\":{},\"145\":{},\"195\":{},\"249\":{}},\"comment\":{}}],[\"euclideanmodulo\",{\"_index\":79,\"name\":{\"132\":{}},\"comment\":{}}],[\"floor\",{\"_index\":83,\"name\":{\"138\":{},\"188\":{},\"243\":{}},\"comment\":{}}],[\"fromaxisangle\",{\"_index\":50,\"name\":{\"84\":{}},\"comment\":{}}],[\"fromeuler\",{\"_index\":57,\"name\":{\"98\":{}},\"comment\":{}}],[\"frommat\",{\"_index\":56,\"name\":{\"97\":{}},\"comment\":{}}],[\"frommat3\",{\"_index\":33,\"name\":{\"39\":{}},\"comment\":{}}],[\"frommat4\",{\"_index\":4,\"name\":{\"6\":{}},\"comment\":{}}],[\"fromquat\",{\"_index\":5,\"name\":{\"7\":{},\"40\":{}},\"comment\":{}}],[\"fromvalues\",{\"_index\":70,\"name\":{\"119\":{},\"173\":{},\"228\":{},\"274\":{}},\"comment\":{}}],[\"frustum\",{\"_index\":36,\"name\":{\"57\":{}},\"comment\":{}}],[\"getaxis\",{\"_index\":17,\"name\":{\"19\":{},\"52\":{},\"222\":{}},\"comment\":{}}],[\"getscaling\",{\"_index\":19,\"name\":{\"21\":{},\"54\":{},\"223\":{}},\"comment\":{}}],[\"gettranslation\",{\"_index\":16,\"name\":{\"18\":{},\"51\":{},\"221\":{}},\"comment\":{}}],[\"identity\",{\"_index\":10,\"name\":{\"12\":{},\"45\":{},\"111\":{}},\"comment\":{}}],[\"inverse\",{\"_index\":12,\"name\":{\"14\":{},\"47\":{},\"95\":{},\"153\":{},\"203\":{},\"257\":{}},\"comment\":{}}],[\"inverselerp\",{\"_index\":78,\"name\":{\"131\":{}},\"comment\":{}}],[\"invert\",{\"_index\":30,\"name\":{\"32\":{},\"77\":{},\"176\":{},\"231\":{},\"277\":{}},\"comment\":{}}],[\"len\",{\"_index\":72,\"name\":{\"124\":{},\"177\":{},\"232\":{},\"278\":{}},\"comment\":{}}],[\"length\",{\"_index\":64,\"name\":{\"106\":{},\"156\":{},\"206\":{},\"259\":{}},\"comment\":{}}],[\"lengthsq\",{\"_index\":65,\"name\":{\"107\":{},\"157\":{},\"207\":{},\"260\":{}},\"comment\":{}}],[\"lensq\",{\"_index\":73,\"name\":{\"125\":{},\"178\":{},\"233\":{},\"279\":{}},\"comment\":{}}],[\"lerp\",{\"_index\":63,\"name\":{\"105\":{},\"130\":{},\"147\":{},\"197\":{},\"251\":{}},\"comment\":{}}],[\"lerpv\",{\"_index\":87,\"name\":{\"148\":{},\"198\":{},\"252\":{}},\"comment\":{}}],[\"lookat\",{\"_index\":39,\"name\":{\"60\":{}},\"comment\":{}}],[\"mat3\",{\"_index\":1,\"name\":{\"1\":{},\"2\":{}},\"comment\":{}}],[\"mat3likector\",{\"_index\":27,\"name\":{\"29\":{}},\"comment\":{}}],[\"mat4\",{\"_index\":32,\"name\":{\"34\":{},\"35\":{}},\"comment\":{}}],[\"mat4likector\",{\"_index\":48,\"name\":{\"74\":{}},\"comment\":{}}],[\"max\",{\"_index\":88,\"name\":{\"149\":{},\"199\":{},\"253\":{}},\"comment\":{}}],[\"min\",{\"_index\":89,\"name\":{\"150\":{},\"200\":{},\"254\":{}},\"comment\":{}}],[\"mul\",{\"_index\":31,\"name\":{\"33\":{},\"78\":{},\"120\":{},\"182\":{},\"237\":{},\"283\":{}},\"comment\":{}}],[\"mulscalar\",{\"_index\":60,\"name\":{\"102\":{},\"151\":{},\"201\":{},\"255\":{}},\"comment\":{}}],[\"multiply\",{\"_index\":14,\"name\":{\"16\":{},\"49\":{},\"90\":{},\"163\":{},\"213\":{},\"266\":{}},\"comment\":{}}],[\"negate\",{\"_index\":6,\"name\":{\"8\":{},\"41\":{},\"161\":{},\"211\":{},\"264\":{}},\"comment\":{}}],[\"normalize\",{\"_index\":66,\"name\":{\"108\":{},\"160\":{},\"210\":{},\"263\":{}},\"comment\":{}}],[\"ortho\",{\"_index\":35,\"name\":{\"56\":{}},\"comment\":{}}],[\"perspective\",{\"_index\":34,\"name\":{\"55\":{}},\"comment\":{}}],[\"quat\",{\"_index\":49,\"name\":{\"81\":{},\"82\":{}},\"comment\":{}}],[\"radtodeg\",{\"_index\":77,\"name\":{\"129\":{}},\"comment\":{}}],[\"random\",{\"_index\":94,\"name\":{\"165\":{},\"215\":{}},\"comment\":{}}],[\"rotate\",{\"_index\":23,\"name\":{\"25\":{},\"80\":{}},\"comment\":{}}],[\"rotatex\",{\"_index\":41,\"name\":{\"64\":{},\"91\":{}},\"comment\":{}}],[\"rotatey\",{\"_index\":43,\"name\":{\"66\":{},\"92\":{}},\"comment\":{}}],[\"rotatez\",{\"_index\":45,\"name\":{\"68\":{},\"93\":{}},\"comment\":{}}],[\"rotation\",{\"_index\":22,\"name\":{\"24\":{},\"79\":{}},\"comment\":{}}],[\"rotationorder\",{\"_index\":69,\"name\":{\"114\":{}},\"comment\":{}}],[\"rotationto\",{\"_index\":67,\"name\":{\"112\":{}},\"comment\":{}}],[\"rotationx\",{\"_index\":40,\"name\":{\"63\":{}},\"comment\":{}}],[\"rotationy\",{\"_index\":42,\"name\":{\"65\":{}},\"comment\":{}}],[\"rotationz\",{\"_index\":44,\"name\":{\"67\":{}},\"comment\":{}}],[\"round\",{\"_index\":84,\"name\":{\"139\":{},\"189\":{},\"244\":{}},\"comment\":{}}],[\"scale\",{\"_index\":25,\"name\":{\"27\":{},\"72\":{},\"123\":{},\"175\":{},\"230\":{},\"276\":{}},\"comment\":{}}],[\"scaling\",{\"_index\":24,\"name\":{\"26\":{},\"71\":{}},\"comment\":{}}],[\"set\",{\"_index\":3,\"name\":{\"5\":{},\"38\":{},\"83\":{},\"136\":{},\"186\":{},\"241\":{}},\"comment\":{}}],[\"setaxis\",{\"_index\":18,\"name\":{\"20\":{},\"53\":{}},\"comment\":{}}],[\"setdefaulttype\",{\"_index\":0,\"name\":{\"0\":{},\"3\":{},\"36\":{},\"117\":{},\"171\":{},\"226\":{},\"272\":{}},\"comment\":{}}],[\"setepsilon\",{\"_index\":75,\"name\":{\"127\":{}},\"comment\":{}}],[\"settranslation\",{\"_index\":15,\"name\":{\"17\":{},\"50\":{}},\"comment\":{}}],[\"slerp\",{\"_index\":54,\"name\":{\"94\":{}},\"comment\":{}}],[\"sqlerp\",{\"_index\":68,\"name\":{\"113\":{}},\"comment\":{}}],[\"sub\",{\"_index\":71,\"name\":{\"122\":{},\"174\":{},\"229\":{},\"275\":{}},\"comment\":{}}],[\"subtract\",{\"_index\":59,\"name\":{\"101\":{},\"144\":{},\"194\":{},\"248\":{}},\"comment\":{}}],[\"toaxisangle\",{\"_index\":51,\"name\":{\"85\":{}},\"comment\":{}}],[\"transformmat3\",{\"_index\":97,\"name\":{\"168\":{},\"219\":{}},\"comment\":{}}],[\"transformmat4\",{\"_index\":96,\"name\":{\"167\":{},\"217\":{},\"269\":{}},\"comment\":{}}],[\"transformmat4upper3x3\",{\"_index\":102,\"name\":{\"218\":{}},\"comment\":{}}],[\"transformquat\",{\"_index\":103,\"name\":{\"220\":{}},\"comment\":{}}],[\"translate\",{\"_index\":21,\"name\":{\"23\":{},\"62\":{}},\"comment\":{}}],[\"translation\",{\"_index\":20,\"name\":{\"22\":{},\"61\":{}},\"comment\":{}}],[\"transpose\",{\"_index\":11,\"name\":{\"13\":{},\"46\":{}},\"comment\":{}}],[\"utils\",{\"_index\":74,\"name\":{\"126\":{}},\"comment\":{}}],[\"vec2\",{\"_index\":81,\"name\":{\"134\":{},\"135\":{}},\"comment\":{}}],[\"vec3\",{\"_index\":101,\"name\":{\"184\":{},\"185\":{}},\"comment\":{}}],[\"vec4\",{\"_index\":104,\"name\":{\"239\":{},\"240\":{}},\"comment\":{}}],[\"zero\",{\"_index\":95,\"name\":{\"166\":{},\"216\":{},\"268\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"32\":\"Variable\",\"64\":\"Function\",\"512\":\"Constructor\",\"1024\":\"Property\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\",\"8388608\":\"Reference\"},\"rows\":[{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/setDefaultType.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":4194304,\"name\":\"Mat3\",\"url\":\"types/Mat3-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"mat3\",\"url\":\"modules/mat3.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/mat3.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/mat3.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/mat3.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"fromMat4\",\"url\":\"functions/mat3.fromMat4.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"fromQuat\",\"url\":\"functions/mat3.fromQuat.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/mat3.negate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/mat3.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/mat3.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/mat3.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/mat3.identity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"transpose\",\"url\":\"functions/mat3.transpose.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/mat3.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"determinant\",\"url\":\"functions/mat3.determinant.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/mat3.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"setTranslation\",\"url\":\"functions/mat3.setTranslation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/mat3.getTranslation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/mat3.getAxis.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"setAxis\",\"url\":\"functions/mat3.setAxis.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/mat3.getScaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"translation\",\"url\":\"functions/mat3.translation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"translate\",\"url\":\"functions/mat3.translate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"rotation\",\"url\":\"functions/mat3.rotation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"rotate\",\"url\":\"functions/mat3.rotate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"scaling\",\"url\":\"functions/mat3.scaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/mat3.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"uniformScaling\",\"url\":\"functions/mat3.uniformScaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"uniformScale\",\"url\":\"functions/mat3.uniformScale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/mat3.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":4194304,\"name\":\"Mat3LikeCtor\",\"url\":\"types/mat3.Mat3LikeCtor.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"types/mat3.Mat3LikeCtor.html#__type\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-type-alias\",\"parent\":\"mat3.Mat3LikeCtor\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/mat3.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/mat3.invert.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/mat3.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat3\"},{\"kind\":4194304,\"name\":\"Mat4\",\"url\":\"types/Mat4-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"mat4\",\"url\":\"modules/mat4.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/mat4.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/mat4.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/mat4.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"fromMat3\",\"url\":\"functions/mat4.fromMat3.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"fromQuat\",\"url\":\"functions/mat4.fromQuat.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/mat4.negate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/mat4.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/mat4.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/mat4.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/mat4.identity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"transpose\",\"url\":\"functions/mat4.transpose.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/mat4.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"determinant\",\"url\":\"functions/mat4.determinant.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/mat4.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"setTranslation\",\"url\":\"functions/mat4.setTranslation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/mat4.getTranslation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/mat4.getAxis.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"setAxis\",\"url\":\"functions/mat4.setAxis.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/mat4.getScaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"perspective\",\"url\":\"functions/mat4.perspective.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"ortho\",\"url\":\"functions/mat4.ortho.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"frustum\",\"url\":\"functions/mat4.frustum.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"aim\",\"url\":\"functions/mat4.aim.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"cameraAim\",\"url\":\"functions/mat4.cameraAim.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"lookAt\",\"url\":\"functions/mat4.lookAt.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"translation\",\"url\":\"functions/mat4.translation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"translate\",\"url\":\"functions/mat4.translate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationX\",\"url\":\"functions/mat4.rotationX.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateX\",\"url\":\"functions/mat4.rotateX.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationY\",\"url\":\"functions/mat4.rotationY.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateY\",\"url\":\"functions/mat4.rotateY.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotationZ\",\"url\":\"functions/mat4.rotationZ.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotateZ\",\"url\":\"functions/mat4.rotateZ.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"axisRotation\",\"url\":\"functions/mat4.axisRotation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"axisRotate\",\"url\":\"functions/mat4.axisRotate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"scaling\",\"url\":\"functions/mat4.scaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/mat4.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"uniformScaling\",\"url\":\"functions/mat4.uniformScaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"uniformScale\",\"url\":\"functions/mat4.uniformScale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/mat4.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":4194304,\"name\":\"Mat4LikeCtor\",\"url\":\"types/mat4.Mat4LikeCtor.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"types/mat4.Mat4LikeCtor.html#__type\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-type-alias\",\"parent\":\"mat4.Mat4LikeCtor\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/mat4.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/mat4.invert.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/mat4.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotation\",\"url\":\"functions/mat4.rotation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"rotate\",\"url\":\"functions/mat4.rotate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"mat4\"},{\"kind\":4194304,\"name\":\"Quat\",\"url\":\"types/Quat-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"quat\",\"url\":\"modules/quat.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/quat.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromAxisAngle\",\"url\":\"functions/quat.fromAxisAngle.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"toAxisAngle\",\"url\":\"functions/quat.toAxisAngle.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"quat.toAxisAngle.toAxisAngle\"},{\"kind\":1024,\"name\":\"angle\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type.angle\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"quat.toAxisAngle.toAxisAngle.__type\"},{\"kind\":1024,\"name\":\"axis\",\"url\":\"functions/quat.toAxisAngle.html#toAxisAngle.__type.axis\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"quat.toAxisAngle.toAxisAngle.__type\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/quat.angle.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/quat.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateX\",\"url\":\"functions/quat.rotateX.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateY\",\"url\":\"functions/quat.rotateY.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotateZ\",\"url\":\"functions/quat.rotateZ.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"slerp\",\"url\":\"functions/quat.slerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/quat.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"conjugate\",\"url\":\"functions/quat.conjugate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromMat\",\"url\":\"functions/quat.fromMat.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"fromEuler\",\"url\":\"functions/quat.fromEuler.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/quat.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/quat.add.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/quat.subtract.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/quat.mulScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/quat.divScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/quat.dot.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/quat.lerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/quat.length.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/quat.lengthSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/quat.normalize.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/quat.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/quat.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"identity\",\"url\":\"functions/quat.identity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"rotationTo\",\"url\":\"functions/quat.rotationTo.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"sqlerp\",\"url\":\"functions/quat.sqlerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":4194304,\"name\":\"RotationOrder\",\"url\":\"types/quat.RotationOrder.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/quat.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/quat.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/quat.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/quat.setDefaultType.html#setDefaultType.__type\",\"classes\":\"tsd-kind-constructor\",\"parent\":\"quat.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/quat.fromValues.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/quat.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/quat.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/quat.sub.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/quat.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/quat.len.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/quat.lenSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"quat\"},{\"kind\":4,\"name\":\"utils\",\"url\":\"modules/utils.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"setEpsilon\",\"url\":\"functions/utils.setEpsilon.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"degToRad\",\"url\":\"functions/utils.degToRad.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"radToDeg\",\"url\":\"functions/utils.radToDeg.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/utils.lerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"inverseLerp\",\"url\":\"functions/utils.inverseLerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"euclideanModulo\",\"url\":\"functions/utils.euclideanModulo.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":32,\"name\":\"EPSILON\",\"url\":\"variables/utils.EPSILON.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":4194304,\"name\":\"Vec2\",\"url\":\"types/Vec2-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"vec2\",\"url\":\"modules/vec2.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec2.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec2.ceil.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec2.floor.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec2.round.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec2.clamp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec2.add.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec2.addScaled.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/vec2.angle.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec2.subtract.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec2.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec2.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec2.lerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec2.lerpV.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec2.max.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec2.min.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec2.mulScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec2.divScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec2.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"cross\",\"url\":\"functions/vec2.cross.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec2.dot.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec2.length.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec2.lengthSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec2.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec2.distanceSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec2.normalize.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec2.negate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec2.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec2.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec2.divide.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"random\",\"url\":\"functions/vec2.random.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec2.zero.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec2.transformMat4.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"transformMat3\",\"url\":\"functions/vec2.transformMat3.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec2.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec2.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec2.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec2.setDefaultType.html#setDefaultType.__type\",\"classes\":\"tsd-kind-constructor\",\"parent\":\"vec2.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec2.fromValues.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec2.sub.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec2.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec2.invert.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec2.len.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec2.lenSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec2.dist.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec2.distSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec2.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec2.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec2.div.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec2\"},{\"kind\":4194304,\"name\":\"Vec3\",\"url\":\"types/Vec3-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"vec3\",\"url\":\"modules/vec3.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec3.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec3.ceil.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec3.floor.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec3.round.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec3.clamp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec3.add.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec3.addScaled.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"angle\",\"url\":\"functions/vec3.angle.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec3.subtract.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec3.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec3.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec3.lerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec3.lerpV.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec3.max.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec3.min.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec3.mulScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec3.divScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec3.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"cross\",\"url\":\"functions/vec3.cross.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec3.dot.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec3.length.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec3.lengthSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec3.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec3.distanceSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec3.normalize.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec3.negate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec3.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec3.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec3.divide.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"random\",\"url\":\"functions/vec3.random.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec3.zero.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec3.transformMat4.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat4Upper3x3\",\"url\":\"functions/vec3.transformMat4Upper3x3.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformMat3\",\"url\":\"functions/vec3.transformMat3.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"transformQuat\",\"url\":\"functions/vec3.transformQuat.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getTranslation\",\"url\":\"functions/vec3.getTranslation.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getAxis\",\"url\":\"functions/vec3.getAxis.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"getScaling\",\"url\":\"functions/vec3.getScaling.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec3.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec3.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec3.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec3.setDefaultType.html#setDefaultType.__type\",\"classes\":\"tsd-kind-constructor\",\"parent\":\"vec3.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec3.fromValues.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec3.sub.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec3.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec3.invert.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec3.len.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec3.lenSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec3.dist.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec3.distSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec3.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec3.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec3.div.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec3\"},{\"kind\":4194304,\"name\":\"Vec4\",\"url\":\"types/Vec4-1.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4,\"name\":\"vec4\",\"url\":\"modules/vec4.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"set\",\"url\":\"functions/vec4.set.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"ceil\",\"url\":\"functions/vec4.ceil.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"floor\",\"url\":\"functions/vec4.floor.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"round\",\"url\":\"functions/vec4.round.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"clamp\",\"url\":\"functions/vec4.clamp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"add\",\"url\":\"functions/vec4.add.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"addScaled\",\"url\":\"functions/vec4.addScaled.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"subtract\",\"url\":\"functions/vec4.subtract.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"equalsApproximately\",\"url\":\"functions/vec4.equalsApproximately.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"equals\",\"url\":\"functions/vec4.equals.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lerp\",\"url\":\"functions/vec4.lerp.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lerpV\",\"url\":\"functions/vec4.lerpV.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"max\",\"url\":\"functions/vec4.max.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"min\",\"url\":\"functions/vec4.min.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"mulScalar\",\"url\":\"functions/vec4.mulScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"divScalar\",\"url\":\"functions/vec4.divScalar.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"inverse\",\"url\":\"functions/vec4.inverse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"dot\",\"url\":\"functions/vec4.dot.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"length\",\"url\":\"functions/vec4.length.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lengthSq\",\"url\":\"functions/vec4.lengthSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/vec4.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distanceSq\",\"url\":\"functions/vec4.distanceSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"normalize\",\"url\":\"functions/vec4.normalize.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"negate\",\"url\":\"functions/vec4.negate.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"copy\",\"url\":\"functions/vec4.copy.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"multiply\",\"url\":\"functions/vec4.multiply.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"divide\",\"url\":\"functions/vec4.divide.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"zero\",\"url\":\"functions/vec4.zero.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"transformMat4\",\"url\":\"functions/vec4.transformMat4.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"modules/vec4.html#default\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"create\",\"url\":\"functions/vec4.create.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"setDefaultType\",\"url\":\"functions/vec4.setDefaultType.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":512,\"name\":\"__type\",\"url\":\"functions/vec4.setDefaultType.html#setDefaultType.__type\",\"classes\":\"tsd-kind-constructor\",\"parent\":\"vec4.setDefaultType.setDefaultType\"},{\"kind\":64,\"name\":\"fromValues\",\"url\":\"functions/vec4.fromValues.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"sub\",\"url\":\"functions/vec4.sub.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"scale\",\"url\":\"functions/vec4.scale.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"invert\",\"url\":\"functions/vec4.invert.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"len\",\"url\":\"functions/vec4.len.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"lenSq\",\"url\":\"functions/vec4.lenSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"dist\",\"url\":\"functions/vec4.dist.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"distSq\",\"url\":\"functions/vec4.distSq.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"clone\",\"url\":\"functions/vec4.clone.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"mul\",\"url\":\"functions/vec4.mul.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"},{\"kind\":64,\"name\":\"div\",\"url\":\"functions/vec4.div.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"vec4\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,36.55]],[\"comment/0\",[]],[\"name/1\",[1,47.536]],[\"comment/1\",[]],[\"name/2\",[1,47.536]],[\"comment/2\",[]],[\"name/3\",[0,36.55]],[\"comment/3\",[]],[\"name/4\",[2,37.981]],[\"comment/4\",[]],[\"name/5\",[3,37.981]],[\"comment/5\",[]],[\"name/6\",[4,52.644]],[\"comment/6\",[]],[\"name/7\",[5,47.536]],[\"comment/7\",[]],[\"name/8\",[6,39.651]],[\"comment/8\",[]],[\"name/9\",[7,37.981]],[\"comment/9\",[]],[\"name/10\",[8,37.981]],[\"comment/10\",[]],[\"name/11\",[9,37.981]],[\"comment/11\",[]],[\"name/12\",[10,44.171]],[\"comment/12\",[]],[\"name/13\",[11,47.536]],[\"comment/13\",[]],[\"name/14\",[12,37.981]],[\"comment/14\",[]],[\"name/15\",[13,47.536]],[\"comment/15\",[]],[\"name/16\",[14,37.981]],[\"comment/16\",[]],[\"name/17\",[15,47.536]],[\"comment/17\",[]],[\"name/18\",[16,44.171]],[\"comment/18\",[]],[\"name/19\",[17,44.171]],[\"comment/19\",[]],[\"name/20\",[18,47.536]],[\"comment/20\",[]],[\"name/21\",[19,44.171]],[\"comment/21\",[]],[\"name/22\",[20,47.536]],[\"comment/22\",[]],[\"name/23\",[21,47.536]],[\"comment/23\",[]],[\"name/24\",[22,47.536]],[\"comment/24\",[]],[\"name/25\",[23,47.536]],[\"comment/25\",[]],[\"name/26\",[24,47.536]],[\"comment/26\",[]],[\"name/27\",[25,37.981]],[\"comment/27\",[]],[\"name/28\",[26,47.536]],[\"comment/28\",[]],[\"name/29\",[27,47.536]],[\"comment/29\",[]],[\"name/30\",[28,37.981]],[\"comment/30\",[]],[\"name/31\",[29,52.644]],[\"comment/31\",[]],[\"name/32\",[30,36.55]],[\"comment/32\",[]],[\"name/33\",[31,37.981]],[\"comment/33\",[]],[\"name/34\",[32,39.651]],[\"comment/34\",[]],[\"name/35\",[33,37.981]],[\"comment/35\",[]],[\"name/36\",[34,47.536]],[\"comment/36\",[]],[\"name/37\",[34,47.536]],[\"comment/37\",[]],[\"name/38\",[0,36.55]],[\"comment/38\",[]],[\"name/39\",[2,37.981]],[\"comment/39\",[]],[\"name/40\",[3,37.981]],[\"comment/40\",[]],[\"name/41\",[35,52.644]],[\"comment/41\",[]],[\"name/42\",[5,47.536]],[\"comment/42\",[]],[\"name/43\",[6,39.651]],[\"comment/43\",[]],[\"name/44\",[7,37.981]],[\"comment/44\",[]],[\"name/45\",[8,37.981]],[\"comment/45\",[]],[\"name/46\",[9,37.981]],[\"comment/46\",[]],[\"name/47\",[10,44.171]],[\"comment/47\",[]],[\"name/48\",[11,47.536]],[\"comment/48\",[]],[\"name/49\",[12,37.981]],[\"comment/49\",[]],[\"name/50\",[13,47.536]],[\"comment/50\",[]],[\"name/51\",[14,37.981]],[\"comment/51\",[]],[\"name/52\",[15,47.536]],[\"comment/52\",[]],[\"name/53\",[16,44.171]],[\"comment/53\",[]],[\"name/54\",[17,44.171]],[\"comment/54\",[]],[\"name/55\",[18,47.536]],[\"comment/55\",[]],[\"name/56\",[19,44.171]],[\"comment/56\",[]],[\"name/57\",[36,52.644]],[\"comment/57\",[]],[\"name/58\",[37,52.644]],[\"comment/58\",[]],[\"name/59\",[38,52.644]],[\"comment/59\",[]],[\"name/60\",[39,52.644]],[\"comment/60\",[]],[\"name/61\",[40,52.644]],[\"comment/61\",[]],[\"name/62\",[41,52.644]],[\"comment/62\",[]],[\"name/63\",[20,47.536]],[\"comment/63\",[]],[\"name/64\",[21,47.536]],[\"comment/64\",[]],[\"name/65\",[42,52.644]],[\"comment/65\",[]],[\"name/66\",[43,47.536]],[\"comment/66\",[]],[\"name/67\",[44,52.644]],[\"comment/67\",[]],[\"name/68\",[45,47.536]],[\"comment/68\",[]],[\"name/69\",[46,52.644]],[\"comment/69\",[]],[\"name/70\",[47,47.536]],[\"comment/70\",[]],[\"name/71\",[48,52.644]],[\"comment/71\",[]],[\"name/72\",[49,52.644]],[\"comment/72\",[]],[\"name/73\",[24,47.536]],[\"comment/73\",[]],[\"name/74\",[25,37.981]],[\"comment/74\",[]],[\"name/75\",[26,47.536]],[\"comment/75\",[]],[\"name/76\",[27,47.536]],[\"comment/76\",[]],[\"name/77\",[28,37.981]],[\"comment/77\",[]],[\"name/78\",[50,52.644]],[\"comment/78\",[]],[\"name/79\",[30,36.55]],[\"comment/79\",[]],[\"name/80\",[31,37.981]],[\"comment/80\",[]],[\"name/81\",[32,39.651]],[\"comment/81\",[]],[\"name/82\",[33,37.981]],[\"comment/82\",[]],[\"name/83\",[22,47.536]],[\"comment/83\",[]],[\"name/84\",[23,47.536]],[\"comment/84\",[]],[\"name/85\",[51,47.536]],[\"comment/85\",[]],[\"name/86\",[51,47.536]],[\"comment/86\",[]],[\"name/87\",[3,37.981]],[\"comment/87\",[]],[\"name/88\",[52,52.644]],[\"comment/88\",[]],[\"name/89\",[53,52.644]],[\"comment/89\",[]],[\"name/90\",[30,36.55]],[\"comment/90\",[]],[\"name/91\",[54,41.658]],[\"comment/91\",[]],[\"name/92\",[55,52.644]],[\"comment/92\",[]],[\"name/93\",[54,41.658]],[\"comment/93\",[]],[\"name/94\",[14,37.981]],[\"comment/94\",[]],[\"name/95\",[43,47.536]],[\"comment/95\",[]],[\"name/96\",[45,47.536]],[\"comment/96\",[]],[\"name/97\",[47,47.536]],[\"comment/97\",[]],[\"name/98\",[56,52.644]],[\"comment/98\",[]],[\"name/99\",[12,37.981]],[\"comment/99\",[]],[\"name/100\",[57,52.644]],[\"comment/100\",[]],[\"name/101\",[58,52.644]],[\"comment/101\",[]],[\"name/102\",[59,52.644]],[\"comment/102\",[]],[\"name/103\",[7,37.981]],[\"comment/103\",[]],[\"name/104\",[60,41.658]],[\"comment/104\",[]],[\"name/105\",[61,41.658]],[\"comment/105\",[]],[\"name/106\",[62,41.658]],[\"comment/106\",[]],[\"name/107\",[63,41.658]],[\"comment/107\",[]],[\"name/108\",[64,41.658]],[\"comment/108\",[]],[\"name/109\",[65,39.651]],[\"comment/109\",[]],[\"name/110\",[66,41.658]],[\"comment/110\",[]],[\"name/111\",[67,41.658]],[\"comment/111\",[]],[\"name/112\",[68,41.658]],[\"comment/112\",[]],[\"name/113\",[8,37.981]],[\"comment/113\",[]],[\"name/114\",[9,37.981]],[\"comment/114\",[]],[\"name/115\",[10,44.171]],[\"comment/115\",[]],[\"name/116\",[69,52.644]],[\"comment/116\",[]],[\"name/117\",[70,52.644]],[\"comment/117\",[]],[\"name/118\",[71,52.644]],[\"comment/118\",[]],[\"name/119\",[28,37.981]],[\"comment/119\",[]],[\"name/120\",[2,37.981]],[\"comment/120\",[]],[\"name/121\",[0,36.55]],[\"comment/121\",[]],[\"name/122\",[30,36.55]],[\"comment/122\",[]],[\"name/123\",[72,41.658]],[\"comment/123\",[]],[\"name/124\",[33,37.981]],[\"comment/124\",[]],[\"name/125\",[31,37.981]],[\"comment/125\",[]],[\"name/126\",[73,41.658]],[\"comment/126\",[]],[\"name/127\",[25,37.981]],[\"comment/127\",[]],[\"name/128\",[74,41.658]],[\"comment/128\",[]],[\"name/129\",[75,41.658]],[\"comment/129\",[]],[\"name/130\",[76,52.644]],[\"comment/130\",[]],[\"name/131\",[77,52.644]],[\"comment/131\",[]],[\"name/132\",[78,52.644]],[\"comment/132\",[]],[\"name/133\",[79,52.644]],[\"comment/133\",[]],[\"name/134\",[65,39.651]],[\"comment/134\",[]],[\"name/135\",[80,52.644]],[\"comment/135\",[]],[\"name/136\",[81,52.644]],[\"comment/136\",[]],[\"name/137\",[82,52.644]],[\"comment/137\",[]],[\"name/138\",[83,47.536]],[\"comment/138\",[]],[\"name/139\",[83,47.536]],[\"comment/139\",[]],[\"name/140\",[3,37.981]],[\"comment/140\",[]],[\"name/141\",[84,44.171]],[\"comment/141\",[]],[\"name/142\",[85,44.171]],[\"comment/142\",[]],[\"name/143\",[86,44.171]],[\"comment/143\",[]],[\"name/144\",[87,44.171]],[\"comment/144\",[]],[\"name/145\",[60,41.658]],[\"comment/145\",[]],[\"name/146\",[88,44.171]],[\"comment/146\",[]],[\"name/147\",[54,41.658]],[\"comment/147\",[]],[\"name/148\",[61,41.658]],[\"comment/148\",[]],[\"name/149\",[8,37.981]],[\"comment/149\",[]],[\"name/150\",[9,37.981]],[\"comment/150\",[]],[\"name/151\",[65,39.651]],[\"comment/151\",[]],[\"name/152\",[89,44.171]],[\"comment/152\",[]],[\"name/153\",[90,44.171]],[\"comment/153\",[]],[\"name/154\",[91,44.171]],[\"comment/154\",[]],[\"name/155\",[62,41.658]],[\"comment/155\",[]],[\"name/156\",[63,41.658]],[\"comment/156\",[]],[\"name/157\",[12,37.981]],[\"comment/157\",[]],[\"name/158\",[92,47.536]],[\"comment/158\",[]],[\"name/159\",[64,41.658]],[\"comment/159\",[]],[\"name/160\",[66,41.658]],[\"comment/160\",[]],[\"name/161\",[67,41.658]],[\"comment/161\",[]],[\"name/162\",[93,44.171]],[\"comment/162\",[]],[\"name/163\",[94,44.171]],[\"comment/163\",[]],[\"name/164\",[68,41.658]],[\"comment/164\",[]],[\"name/165\",[6,39.651]],[\"comment/165\",[]],[\"name/166\",[7,37.981]],[\"comment/166\",[]],[\"name/167\",[14,37.981]],[\"comment/167\",[]],[\"name/168\",[95,44.171]],[\"comment/168\",[]],[\"name/169\",[96,47.536]],[\"comment/169\",[]],[\"name/170\",[97,44.171]],[\"comment/170\",[]],[\"name/171\",[98,44.171]],[\"comment/171\",[]],[\"name/172\",[99,47.536]],[\"comment/172\",[]],[\"name/173\",[28,37.981]],[\"comment/173\",[]],[\"name/174\",[2,37.981]],[\"comment/174\",[]],[\"name/175\",[0,36.55]],[\"comment/175\",[]],[\"name/176\",[30,36.55]],[\"comment/176\",[]],[\"name/177\",[72,41.658]],[\"comment/177\",[]],[\"name/178\",[73,41.658]],[\"comment/178\",[]],[\"name/179\",[25,37.981]],[\"comment/179\",[]],[\"name/180\",[32,39.651]],[\"comment/180\",[]],[\"name/181\",[74,41.658]],[\"comment/181\",[]],[\"name/182\",[75,41.658]],[\"comment/182\",[]],[\"name/183\",[100,44.171]],[\"comment/183\",[]],[\"name/184\",[101,44.171]],[\"comment/184\",[]],[\"name/185\",[31,37.981]],[\"comment/185\",[]],[\"name/186\",[33,37.981]],[\"comment/186\",[]],[\"name/187\",[102,44.171]],[\"comment/187\",[]],[\"name/188\",[103,47.536]],[\"comment/188\",[]],[\"name/189\",[103,47.536]],[\"comment/189\",[]],[\"name/190\",[3,37.981]],[\"comment/190\",[]],[\"name/191\",[84,44.171]],[\"comment/191\",[]],[\"name/192\",[85,44.171]],[\"comment/192\",[]],[\"name/193\",[86,44.171]],[\"comment/193\",[]],[\"name/194\",[87,44.171]],[\"comment/194\",[]],[\"name/195\",[60,41.658]],[\"comment/195\",[]],[\"name/196\",[88,44.171]],[\"comment/196\",[]],[\"name/197\",[54,41.658]],[\"comment/197\",[]],[\"name/198\",[61,41.658]],[\"comment/198\",[]],[\"name/199\",[8,37.981]],[\"comment/199\",[]],[\"name/200\",[9,37.981]],[\"comment/200\",[]],[\"name/201\",[65,39.651]],[\"comment/201\",[]],[\"name/202\",[89,44.171]],[\"comment/202\",[]],[\"name/203\",[90,44.171]],[\"comment/203\",[]],[\"name/204\",[91,44.171]],[\"comment/204\",[]],[\"name/205\",[62,41.658]],[\"comment/205\",[]],[\"name/206\",[63,41.658]],[\"comment/206\",[]],[\"name/207\",[12,37.981]],[\"comment/207\",[]],[\"name/208\",[92,47.536]],[\"comment/208\",[]],[\"name/209\",[64,41.658]],[\"comment/209\",[]],[\"name/210\",[66,41.658]],[\"comment/210\",[]],[\"name/211\",[67,41.658]],[\"comment/211\",[]],[\"name/212\",[93,44.171]],[\"comment/212\",[]],[\"name/213\",[94,44.171]],[\"comment/213\",[]],[\"name/214\",[68,41.658]],[\"comment/214\",[]],[\"name/215\",[6,39.651]],[\"comment/215\",[]],[\"name/216\",[7,37.981]],[\"comment/216\",[]],[\"name/217\",[14,37.981]],[\"comment/217\",[]],[\"name/218\",[95,44.171]],[\"comment/218\",[]],[\"name/219\",[96,47.536]],[\"comment/219\",[]],[\"name/220\",[97,44.171]],[\"comment/220\",[]],[\"name/221\",[98,44.171]],[\"comment/221\",[]],[\"name/222\",[104,52.644]],[\"comment/222\",[]],[\"name/223\",[99,47.536]],[\"comment/223\",[]],[\"name/224\",[105,52.644]],[\"comment/224\",[]],[\"name/225\",[16,44.171]],[\"comment/225\",[]],[\"name/226\",[17,44.171]],[\"comment/226\",[]],[\"name/227\",[19,44.171]],[\"comment/227\",[]],[\"name/228\",[28,37.981]],[\"comment/228\",[]],[\"name/229\",[2,37.981]],[\"comment/229\",[]],[\"name/230\",[0,36.55]],[\"comment/230\",[]],[\"name/231\",[30,36.55]],[\"comment/231\",[]],[\"name/232\",[72,41.658]],[\"comment/232\",[]],[\"name/233\",[73,41.658]],[\"comment/233\",[]],[\"name/234\",[25,37.981]],[\"comment/234\",[]],[\"name/235\",[32,39.651]],[\"comment/235\",[]],[\"name/236\",[74,41.658]],[\"comment/236\",[]],[\"name/237\",[75,41.658]],[\"comment/237\",[]],[\"name/238\",[100,44.171]],[\"comment/238\",[]],[\"name/239\",[101,44.171]],[\"comment/239\",[]],[\"name/240\",[31,37.981]],[\"comment/240\",[]],[\"name/241\",[33,37.981]],[\"comment/241\",[]],[\"name/242\",[102,44.171]],[\"comment/242\",[]],[\"name/243\",[106,47.536]],[\"comment/243\",[]],[\"name/244\",[106,47.536]],[\"comment/244\",[]],[\"name/245\",[3,37.981]],[\"comment/245\",[]],[\"name/246\",[84,44.171]],[\"comment/246\",[]],[\"name/247\",[85,44.171]],[\"comment/247\",[]],[\"name/248\",[86,44.171]],[\"comment/248\",[]],[\"name/249\",[87,44.171]],[\"comment/249\",[]],[\"name/250\",[60,41.658]],[\"comment/250\",[]],[\"name/251\",[88,44.171]],[\"comment/251\",[]],[\"name/252\",[61,41.658]],[\"comment/252\",[]],[\"name/253\",[8,37.981]],[\"comment/253\",[]],[\"name/254\",[9,37.981]],[\"comment/254\",[]],[\"name/255\",[65,39.651]],[\"comment/255\",[]],[\"name/256\",[89,44.171]],[\"comment/256\",[]],[\"name/257\",[90,44.171]],[\"comment/257\",[]],[\"name/258\",[91,44.171]],[\"comment/258\",[]],[\"name/259\",[62,41.658]],[\"comment/259\",[]],[\"name/260\",[63,41.658]],[\"comment/260\",[]],[\"name/261\",[12,37.981]],[\"comment/261\",[]],[\"name/262\",[64,41.658]],[\"comment/262\",[]],[\"name/263\",[66,41.658]],[\"comment/263\",[]],[\"name/264\",[67,41.658]],[\"comment/264\",[]],[\"name/265\",[93,44.171]],[\"comment/265\",[]],[\"name/266\",[94,44.171]],[\"comment/266\",[]],[\"name/267\",[68,41.658]],[\"comment/267\",[]],[\"name/268\",[6,39.651]],[\"comment/268\",[]],[\"name/269\",[7,37.981]],[\"comment/269\",[]],[\"name/270\",[14,37.981]],[\"comment/270\",[]],[\"name/271\",[95,44.171]],[\"comment/271\",[]],[\"name/272\",[97,44.171]],[\"comment/272\",[]],[\"name/273\",[98,44.171]],[\"comment/273\",[]],[\"name/274\",[28,37.981]],[\"comment/274\",[]],[\"name/275\",[2,37.981]],[\"comment/275\",[]],[\"name/276\",[0,36.55]],[\"comment/276\",[]],[\"name/277\",[30,36.55]],[\"comment/277\",[]],[\"name/278\",[72,41.658]],[\"comment/278\",[]],[\"name/279\",[73,41.658]],[\"comment/279\",[]],[\"name/280\",[25,37.981]],[\"comment/280\",[]],[\"name/281\",[32,39.651]],[\"comment/281\",[]],[\"name/282\",[74,41.658]],[\"comment/282\",[]],[\"name/283\",[75,41.658]],[\"comment/283\",[]],[\"name/284\",[100,44.171]],[\"comment/284\",[]],[\"name/285\",[101,44.171]],[\"comment/285\",[]],[\"name/286\",[31,37.981]],[\"comment/286\",[]],[\"name/287\",[33,37.981]],[\"comment/287\",[]],[\"name/288\",[102,44.171]],[\"comment/288\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":30,\"name\":{\"32\":{},\"79\":{},\"90\":{},\"122\":{},\"176\":{},\"231\":{},\"277\":{}},\"comment\":{}}],[\"add\",{\"_index\":60,\"name\":{\"104\":{},\"145\":{},\"195\":{},\"250\":{}},\"comment\":{}}],[\"addscaled\",{\"_index\":88,\"name\":{\"146\":{},\"196\":{},\"251\":{}},\"comment\":{}}],[\"aim\",{\"_index\":39,\"name\":{\"60\":{}},\"comment\":{}}],[\"angle\",{\"_index\":54,\"name\":{\"91\":{},\"93\":{},\"147\":{},\"197\":{}},\"comment\":{}}],[\"axis\",{\"_index\":55,\"name\":{\"92\":{}},\"comment\":{}}],[\"axisrotate\",{\"_index\":49,\"name\":{\"72\":{}},\"comment\":{}}],[\"axisrotation\",{\"_index\":48,\"name\":{\"71\":{}},\"comment\":{}}],[\"cameraaim\",{\"_index\":40,\"name\":{\"61\":{}},\"comment\":{}}],[\"ceil\",{\"_index\":84,\"name\":{\"141\":{},\"191\":{},\"246\":{}},\"comment\":{}}],[\"clamp\",{\"_index\":87,\"name\":{\"144\":{},\"194\":{},\"249\":{}},\"comment\":{}}],[\"clone\",{\"_index\":31,\"name\":{\"33\":{},\"80\":{},\"125\":{},\"185\":{},\"240\":{},\"286\":{}},\"comment\":{}}],[\"conjugate\",{\"_index\":57,\"name\":{\"100\":{}},\"comment\":{}}],[\"copy\",{\"_index\":7,\"name\":{\"9\":{},\"44\":{},\"103\":{},\"166\":{},\"216\":{},\"269\":{}},\"comment\":{}}],[\"create\",{\"_index\":2,\"name\":{\"4\":{},\"39\":{},\"120\":{},\"174\":{},\"229\":{},\"275\":{}},\"comment\":{}}],[\"cross\",{\"_index\":92,\"name\":{\"158\":{},\"208\":{}},\"comment\":{}}],[\"default\",{\"_index\":28,\"name\":{\"30\":{},\"77\":{},\"119\":{},\"173\":{},\"228\":{},\"274\":{}},\"comment\":{}}],[\"degtorad\",{\"_index\":78,\"name\":{\"132\":{}},\"comment\":{}}],[\"determinant\",{\"_index\":13,\"name\":{\"15\":{},\"50\":{}},\"comment\":{}}],[\"dist\",{\"_index\":100,\"name\":{\"183\":{},\"238\":{},\"284\":{}},\"comment\":{}}],[\"distance\",{\"_index\":93,\"name\":{\"162\":{},\"212\":{},\"265\":{}},\"comment\":{}}],[\"distancesq\",{\"_index\":94,\"name\":{\"163\":{},\"213\":{},\"266\":{}},\"comment\":{}}],[\"distsq\",{\"_index\":101,\"name\":{\"184\":{},\"239\":{},\"285\":{}},\"comment\":{}}],[\"div\",{\"_index\":102,\"name\":{\"187\":{},\"242\":{},\"288\":{}},\"comment\":{}}],[\"divide\",{\"_index\":95,\"name\":{\"168\":{},\"218\":{},\"271\":{}},\"comment\":{}}],[\"divscalar\",{\"_index\":63,\"name\":{\"107\":{},\"156\":{},\"206\":{},\"260\":{}},\"comment\":{}}],[\"dot\",{\"_index\":64,\"name\":{\"108\":{},\"159\":{},\"209\":{},\"262\":{}},\"comment\":{}}],[\"epsilon\",{\"_index\":82,\"name\":{\"137\":{}},\"comment\":{}}],[\"equals\",{\"_index\":9,\"name\":{\"11\":{},\"46\":{},\"114\":{},\"150\":{},\"200\":{},\"254\":{}},\"comment\":{}}],[\"equalsapproximately\",{\"_index\":8,\"name\":{\"10\":{},\"45\":{},\"113\":{},\"149\":{},\"199\":{},\"253\":{}},\"comment\":{}}],[\"euclideanmodulo\",{\"_index\":81,\"name\":{\"136\":{}},\"comment\":{}}],[\"floor\",{\"_index\":85,\"name\":{\"142\":{},\"192\":{},\"247\":{}},\"comment\":{}}],[\"fromaxisangle\",{\"_index\":52,\"name\":{\"88\":{}},\"comment\":{}}],[\"fromeuler\",{\"_index\":59,\"name\":{\"102\":{}},\"comment\":{}}],[\"frommat\",{\"_index\":58,\"name\":{\"101\":{}},\"comment\":{}}],[\"frommat3\",{\"_index\":35,\"name\":{\"41\":{}},\"comment\":{}}],[\"frommat4\",{\"_index\":4,\"name\":{\"6\":{}},\"comment\":{}}],[\"fromquat\",{\"_index\":5,\"name\":{\"7\":{},\"42\":{}},\"comment\":{}}],[\"fromvalues\",{\"_index\":72,\"name\":{\"123\":{},\"177\":{},\"232\":{},\"278\":{}},\"comment\":{}}],[\"frustum\",{\"_index\":38,\"name\":{\"59\":{}},\"comment\":{}}],[\"getaxis\",{\"_index\":17,\"name\":{\"19\":{},\"54\":{},\"226\":{}},\"comment\":{}}],[\"getscaling\",{\"_index\":19,\"name\":{\"21\":{},\"56\":{},\"227\":{}},\"comment\":{}}],[\"gettranslation\",{\"_index\":16,\"name\":{\"18\":{},\"53\":{},\"225\":{}},\"comment\":{}}],[\"identity\",{\"_index\":10,\"name\":{\"12\":{},\"47\":{},\"115\":{}},\"comment\":{}}],[\"inverse\",{\"_index\":12,\"name\":{\"14\":{},\"49\":{},\"99\":{},\"157\":{},\"207\":{},\"261\":{}},\"comment\":{}}],[\"inverselerp\",{\"_index\":80,\"name\":{\"135\":{}},\"comment\":{}}],[\"invert\",{\"_index\":32,\"name\":{\"34\":{},\"81\":{},\"180\":{},\"235\":{},\"281\":{}},\"comment\":{}}],[\"len\",{\"_index\":74,\"name\":{\"128\":{},\"181\":{},\"236\":{},\"282\":{}},\"comment\":{}}],[\"length\",{\"_index\":66,\"name\":{\"110\":{},\"160\":{},\"210\":{},\"263\":{}},\"comment\":{}}],[\"lengthsq\",{\"_index\":67,\"name\":{\"111\":{},\"161\":{},\"211\":{},\"264\":{}},\"comment\":{}}],[\"lensq\",{\"_index\":75,\"name\":{\"129\":{},\"182\":{},\"237\":{},\"283\":{}},\"comment\":{}}],[\"lerp\",{\"_index\":65,\"name\":{\"109\":{},\"134\":{},\"151\":{},\"201\":{},\"255\":{}},\"comment\":{}}],[\"lerpv\",{\"_index\":89,\"name\":{\"152\":{},\"202\":{},\"256\":{}},\"comment\":{}}],[\"lookat\",{\"_index\":41,\"name\":{\"62\":{}},\"comment\":{}}],[\"mat3\",{\"_index\":1,\"name\":{\"1\":{},\"2\":{}},\"comment\":{}}],[\"mat3likector\",{\"_index\":29,\"name\":{\"31\":{}},\"comment\":{}}],[\"mat4\",{\"_index\":34,\"name\":{\"36\":{},\"37\":{}},\"comment\":{}}],[\"mat4likector\",{\"_index\":50,\"name\":{\"78\":{}},\"comment\":{}}],[\"max\",{\"_index\":90,\"name\":{\"153\":{},\"203\":{},\"257\":{}},\"comment\":{}}],[\"min\",{\"_index\":91,\"name\":{\"154\":{},\"204\":{},\"258\":{}},\"comment\":{}}],[\"mul\",{\"_index\":33,\"name\":{\"35\":{},\"82\":{},\"124\":{},\"186\":{},\"241\":{},\"287\":{}},\"comment\":{}}],[\"mulscalar\",{\"_index\":62,\"name\":{\"106\":{},\"155\":{},\"205\":{},\"259\":{}},\"comment\":{}}],[\"multiply\",{\"_index\":14,\"name\":{\"16\":{},\"51\":{},\"94\":{},\"167\":{},\"217\":{},\"270\":{}},\"comment\":{}}],[\"negate\",{\"_index\":6,\"name\":{\"8\":{},\"43\":{},\"165\":{},\"215\":{},\"268\":{}},\"comment\":{}}],[\"normalize\",{\"_index\":68,\"name\":{\"112\":{},\"164\":{},\"214\":{},\"267\":{}},\"comment\":{}}],[\"ortho\",{\"_index\":37,\"name\":{\"58\":{}},\"comment\":{}}],[\"perspective\",{\"_index\":36,\"name\":{\"57\":{}},\"comment\":{}}],[\"quat\",{\"_index\":51,\"name\":{\"85\":{},\"86\":{}},\"comment\":{}}],[\"radtodeg\",{\"_index\":79,\"name\":{\"133\":{}},\"comment\":{}}],[\"random\",{\"_index\":96,\"name\":{\"169\":{},\"219\":{}},\"comment\":{}}],[\"rotate\",{\"_index\":23,\"name\":{\"25\":{},\"84\":{}},\"comment\":{}}],[\"rotatex\",{\"_index\":43,\"name\":{\"66\":{},\"95\":{}},\"comment\":{}}],[\"rotatey\",{\"_index\":45,\"name\":{\"68\":{},\"96\":{}},\"comment\":{}}],[\"rotatez\",{\"_index\":47,\"name\":{\"70\":{},\"97\":{}},\"comment\":{}}],[\"rotation\",{\"_index\":22,\"name\":{\"24\":{},\"83\":{}},\"comment\":{}}],[\"rotationorder\",{\"_index\":71,\"name\":{\"118\":{}},\"comment\":{}}],[\"rotationto\",{\"_index\":69,\"name\":{\"116\":{}},\"comment\":{}}],[\"rotationx\",{\"_index\":42,\"name\":{\"65\":{}},\"comment\":{}}],[\"rotationy\",{\"_index\":44,\"name\":{\"67\":{}},\"comment\":{}}],[\"rotationz\",{\"_index\":46,\"name\":{\"69\":{}},\"comment\":{}}],[\"round\",{\"_index\":86,\"name\":{\"143\":{},\"193\":{},\"248\":{}},\"comment\":{}}],[\"scale\",{\"_index\":25,\"name\":{\"27\":{},\"74\":{},\"127\":{},\"179\":{},\"234\":{},\"280\":{}},\"comment\":{}}],[\"scaling\",{\"_index\":24,\"name\":{\"26\":{},\"73\":{}},\"comment\":{}}],[\"set\",{\"_index\":3,\"name\":{\"5\":{},\"40\":{},\"87\":{},\"140\":{},\"190\":{},\"245\":{}},\"comment\":{}}],[\"setaxis\",{\"_index\":18,\"name\":{\"20\":{},\"55\":{}},\"comment\":{}}],[\"setdefaulttype\",{\"_index\":0,\"name\":{\"0\":{},\"3\":{},\"38\":{},\"121\":{},\"175\":{},\"230\":{},\"276\":{}},\"comment\":{}}],[\"setepsilon\",{\"_index\":77,\"name\":{\"131\":{}},\"comment\":{}}],[\"settranslation\",{\"_index\":15,\"name\":{\"17\":{},\"52\":{}},\"comment\":{}}],[\"slerp\",{\"_index\":56,\"name\":{\"98\":{}},\"comment\":{}}],[\"sqlerp\",{\"_index\":70,\"name\":{\"117\":{}},\"comment\":{}}],[\"sub\",{\"_index\":73,\"name\":{\"126\":{},\"178\":{},\"233\":{},\"279\":{}},\"comment\":{}}],[\"subtract\",{\"_index\":61,\"name\":{\"105\":{},\"148\":{},\"198\":{},\"252\":{}},\"comment\":{}}],[\"toaxisangle\",{\"_index\":53,\"name\":{\"89\":{}},\"comment\":{}}],[\"transformmat3\",{\"_index\":99,\"name\":{\"172\":{},\"223\":{}},\"comment\":{}}],[\"transformmat4\",{\"_index\":98,\"name\":{\"171\":{},\"221\":{},\"273\":{}},\"comment\":{}}],[\"transformmat4upper3x3\",{\"_index\":104,\"name\":{\"222\":{}},\"comment\":{}}],[\"transformquat\",{\"_index\":105,\"name\":{\"224\":{}},\"comment\":{}}],[\"translate\",{\"_index\":21,\"name\":{\"23\":{},\"64\":{}},\"comment\":{}}],[\"translation\",{\"_index\":20,\"name\":{\"22\":{},\"63\":{}},\"comment\":{}}],[\"transpose\",{\"_index\":11,\"name\":{\"13\":{},\"48\":{}},\"comment\":{}}],[\"uniformscale\",{\"_index\":27,\"name\":{\"29\":{},\"76\":{}},\"comment\":{}}],[\"uniformscaling\",{\"_index\":26,\"name\":{\"28\":{},\"75\":{}},\"comment\":{}}],[\"utils\",{\"_index\":76,\"name\":{\"130\":{}},\"comment\":{}}],[\"vec2\",{\"_index\":83,\"name\":{\"138\":{},\"139\":{}},\"comment\":{}}],[\"vec3\",{\"_index\":103,\"name\":{\"188\":{},\"189\":{}},\"comment\":{}}],[\"vec4\",{\"_index\":106,\"name\":{\"243\":{},\"244\":{}},\"comment\":{}}],[\"zero\",{\"_index\":97,\"name\":{\"170\":{},\"220\":{},\"272\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 18b4f8f..e509385 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -2,80 +2,38 @@ /* Light */ --light-color-background: #f2f4f8; --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; --light-color-icon-background: var(--light-color-background); --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; + --light-color-text-aside: #707070; + --light-color-link: #4da6ff; + --light-color-ts: #db1373; + --light-color-ts-interface: #139d2c; + --light-color-ts-enum: #9c891a; + --light-color-ts-class: #2484e5; --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - /* object literal not included as it is not used and will be removed in 0.25 */ - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - + --light-color-ts-namespace: #b111c9; + --light-color-ts-private: #707070; + --light-color-ts-variable: #4d68ff; --light-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; /* Dark */ --dark-color-background: #2b2e33; --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; --dark-color-icon-background: var(--dark-color-background-secondary); --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; --dark-color-text: #f5f5f5; --dark-color-text-aside: #dddddd; --dark-color-link: #00aff4; - - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; + --dark-color-ts: #ff6492; --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - /* object literal not included as it is not used and will be removed in 0.25 */ - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-class: #61b0ff; + --dark-color-ts-function: #9772ff; + --dark-color-ts-namespace: #e14dff; + --dark-color-ts-private: #e2e2e2; + --dark-color-ts-variable: #4d68ff; --dark-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; } @@ -84,38 +42,19 @@ :root { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts: var(--light-color-ts); + --color-ts-interface: var(--light-color-ts-interface); --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - + --color-ts-function: var(--light-color-ts-function); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-private: var(--light-color-ts-private); + --color-ts-variable: var(--light-color-ts-variable); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -125,38 +64,19 @@ :root { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts: var(--dark-color-ts); + --color-ts-interface: var(--dark-color-ts-interface); --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - + --color-ts-function: var(--dark-color-ts-function); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-private: var(--dark-color-ts-private); + --color-ts-variable: var(--dark-color-ts-variable); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } @@ -173,38 +93,19 @@ body { :root[data-theme="light"] { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts: var(--light-color-ts); + --color-ts-interface: var(--light-color-ts-interface); --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - + --color-ts-function: var(--light-color-ts-function); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-private: var(--light-color-ts-private); + --color-ts-variable: var(--light-color-ts-variable); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -212,47 +113,23 @@ body { :root[data-theme="dark"] { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts: var(--dark-color-ts); + --color-ts-interface: var(--dark-color-ts-interface); --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - + --color-ts-function: var(--dark-color-ts-function); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-private: var(--dark-color-ts-private); + --color-ts-variable: var(--dark-color-ts-variable); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - h1, h2, h3, @@ -262,16 +139,6 @@ h6 { line-height: 1.2; } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - h1 { font-size: 1.875rem; margin: 0.67rem 0; @@ -306,6 +173,12 @@ h6 { text-transform: uppercase; } +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + dl, menu, ol, @@ -318,10 +191,26 @@ dd { } .container { - max-width: 1700px; + max-width: 1600px; padding: 0 2rem; } +@media (min-width: 640px) { + .container { + padding: 0 4rem; + } +} +@media (min-width: 1200px) { + .container { + padding: 0 8rem; + } +} +@media (min-width: 1600px) { + .container { + padding: 0 12rem; + } +} + /* Footer */ .tsd-generator { border-top: 1px solid var(--color-accent); @@ -337,9 +226,26 @@ dd { } .container-main { + display: flex; + justify-content: space-between; + position: relative; margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); +} + +.col-4, +.col-8 { + box-sizing: border-box; + float: left; + padding: 2rem 1rem; +} + +.col-4 { + flex: 0 0 25%; +} +.col-8 { + flex: 1 0; + flex-wrap: wrap; + padding-left: 0; } @keyframes fade-in { @@ -382,6 +288,22 @@ dd { opacity: 0; } } +@keyframes shift-to-left { + from { + transform: translate(0, 0); + } + to { + transform: translate(-25%, 0); + } +} +@keyframes unshift-to-left { + from { + transform: translate(-25%, 0); + } + to { + transform: translate(0, 0); + } +} @keyframes pop-in-from-right { from { transform: translate(100%, 0); @@ -430,29 +352,13 @@ pre { } pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; padding: 10px; - border: 1px solid var(--color-accent); + border: 0.1em solid var(--color-accent); } pre code { padding: 0; font-size: 100%; } -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} blockquote { margin: 1em 0; @@ -486,6 +392,92 @@ blockquote { margin: 1em 0; } +@media (max-width: 1024px) { + html .col-content { + float: none; + max-width: 100%; + width: 100%; + padding-top: 3rem; + } + html .col-menu { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + max-width: 25rem; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-menu > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu :is(header, footer, .col-content) { + animation: shift-to-left 0.4s; + } + + .to-has-menu .col-menu { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu :is(header, footer, .col-content) { + animation: unshift-to-left 0.4s; + } + + .from-has-menu .col-menu { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu :is(header, footer, .col-content) { + transform: translate(-25%, 0); + } + .has-menu .col-menu { + visibility: visible; + transform: translate(0, 0); + display: grid; + align-items: center; + grid-template-rows: auto 1fr; + grid-gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + .tsd-breadcrumb { margin: 0; padding: 0; @@ -664,6 +656,43 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { -o-page-break-inside: avoid; page-break-inside: avoid; } +.tsd-index-panel a, +.tsd-index-panel a.tsd-parent-kind-module { + color: var(--color-ts); +} +.tsd-index-panel a.tsd-parent-kind-interface { + color: var(--color-ts-interface); +} +.tsd-index-panel a.tsd-parent-kind-enum { + color: var(--color-ts-enum); +} +.tsd-index-panel a.tsd-parent-kind-class { + color: var(--color-ts-class); +} +.tsd-index-panel a.tsd-kind-module { + color: var(--color-ts-namespace); +} +.tsd-index-panel a.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-index-panel a.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-index-panel a.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-index-panel a.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-index-panel a.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-index-panel a.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-index-panel a.tsd-is-private { + color: var(--color-ts-private); +} .tsd-flag { display: inline-block; @@ -678,7 +707,7 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-anchor { - position: relative; + position: absolute; top: -100px; } @@ -692,64 +721,108 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-bottom: 0; border-bottom: none; } - -.tsd-navigation.settings { - margin: 1rem 0; +.tsd-member [data-tsd-kind] { + color: var(--color-ts); +} +.tsd-member [data-tsd-kind="Interface"] { + color: var(--color-ts-interface); } -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); +.tsd-member [data-tsd-kind="Enum"] { + color: var(--color-ts-enum); } -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; +.tsd-member [data-tsd-kind="Class"] { + color: var(--color-ts-class); +} +.tsd-member [data-tsd-kind="Private"] { + color: var(--color-ts-private); +} + +.tsd-navigation a { + display: block; + margin: 0.4rem 0; + border-left: 2px solid transparent; color: var(--color-text); text-decoration: none; - box-sizing: border-box; + transition: border-left-color 0.1s; } -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { +.tsd-navigation a:hover { text-decoration: underline; } -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; +.tsd-navigation ul { + margin: 0; padding: 0; list-style: none; } -.tsd-navigation li, -.tsd-page-navigation li { +.tsd-navigation li { padding: 0; - max-width: 100%; } -.tsd-nested-navigation { - margin-left: 3rem; + +.tsd-navigation.primary .tsd-accordion-details > ul { + margin-top: 0.75rem; +} +.tsd-navigation.primary a { + padding: 0.75rem 0.5rem; + margin: 0; } -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; +.tsd-navigation.primary ul li a { + margin-left: 0.5rem; } -.tsd-small-nested-navigation { +.tsd-navigation.primary ul li li a { margin-left: 1.5rem; } -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; +.tsd-navigation.primary ul li li li a { + margin-left: 2.5rem; } - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); +.tsd-navigation.primary ul li li li li a { + margin-left: 3.5rem; +} +.tsd-navigation.primary ul li li li li li a { + margin-left: 4.5rem; +} +.tsd-navigation.primary ul li li li li li li a { + margin-left: 5.5rem; +} +.tsd-navigation.primary li.current > a { + border-left: 0.15rem var(--color-text) solid; +} +.tsd-navigation.primary li.selected > a { + font-weight: bold; + border-left: 0.2rem var(--color-text) solid; +} +.tsd-navigation.primary ul li a:hover { + border-left: 0.2rem var(--color-text-aside) solid; +} +.tsd-navigation.primary li.globals + li > span, +.tsd-navigation.primary li.globals + li > a { + padding-top: 20px; } -.tsd-page-navigation ul { - padding-left: 1.75rem; +.tsd-navigation.secondary.tsd-navigation--toolbar-hide { + max-height: calc(100vh - 1rem); + top: 0.5rem; +} +.tsd-navigation.secondary > ul { + display: inline; + padding-right: 0.5rem; + transition: opacity 0.2s; +} +.tsd-navigation.secondary ul li a { + padding-left: 0; +} +.tsd-navigation.secondary ul li li a { + padding-left: 1.1rem; +} +.tsd-navigation.secondary ul li li li a { + padding-left: 2.2rem; +} +.tsd-navigation.secondary ul li li li li a { + padding-left: 3.3rem; +} +.tsd-navigation.secondary ul li li li li li a { + padding-left: 4.4rem; +} +.tsd-navigation.secondary ul li li li li li li a { + padding-left: 5.5rem; } #tsd-sidebar-links a { @@ -762,31 +835,29 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } a.tsd-index-link { - padding: 0.25rem 0 !important; + margin: 0.25rem 0; font-size: 1rem; line-height: 1.25rem; display: inline-flex; align-items: center; - color: var(--color-text); } -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { +.tsd-accordion-summary > h1, +.tsd-accordion-summary > h2, +.tsd-accordion-summary > h3, +.tsd-accordion-summary > h4, +.tsd-accordion-summary > h5 { + display: inline-flex; + align-items: center; + vertical-align: middle; + margin-bottom: 0; user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; - - cursor: pointer; } -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); +.tsd-accordion-summary { + display: block; + cursor: pointer; } .tsd-accordion-summary > * { margin-top: 0; @@ -794,8 +865,11 @@ a.tsd-index-link { padding-top: 0; padding-bottom: 0; } -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; +.tsd-accordion-summary::-webkit-details-marker { + display: none; +} +.tsd-index-accordion .tsd-accordion-summary svg { + margin-right: 0.25rem; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -820,6 +894,34 @@ a.tsd-index-link { margin-right: 0.8rem; } +@media (min-width: 1024px) { + .col-content { + margin: 2rem auto; + } + + .menu-sticky-wrap { + position: sticky; + height: calc(100vh - 2rem); + top: 4rem; + right: 0; + padding: 0 1.5rem; + padding-top: 1rem; + margin-top: 3rem; + transition: 0.3s ease-in-out; + transition-property: top, padding-top, padding, height; + overflow-y: auto; + } + .col-menu { + border-left: 1px solid var(--color-accent); + } + .col-menu--hide { + top: 1rem; + } + .col-menu .tsd-navigation:not(:last-child) { + padding-bottom: 1.75rem; + } +} + .tsd-panel { margin-bottom: 2.5rem; } @@ -1025,7 +1127,7 @@ ul.tsd-type-parameter-list h5 { } .tsd-page-toolbar { - position: sticky; + position: fixed; z-index: 1; top: 0; left: 0; @@ -1065,6 +1167,10 @@ ul.tsd-type-parameter-list h5 { padding: 12px 0; } +.tsd-page-toolbar--hide { + transform: translateY(-100%); +} + .tsd-widget { display: inline-block; overflow: hidden; @@ -1092,6 +1198,12 @@ ul.tsd-type-parameter-list h5 { .tsd-widget.menu { display: none; } +@media (max-width: 1024px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } +} input[type="checkbox"] + .tsd-widget:before { background-position: -120px 0; } @@ -1125,84 +1237,6 @@ img { text-decoration: line-through; } -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - * { scrollbar-width: thin; scrollbar-color: var(--color-accent) var(--color-icon-background); @@ -1221,147 +1255,3 @@ img { border-radius: 999rem; border: 0.25rem solid var(--color-icon-background); } - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/functions/mat3.clone.html b/docs/functions/mat3.clone.html index 4e41da8..1c5f19b 100644 --- a/docs/functions/mat3.clone.html +++ b/docs/functions/mat3.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Copies a matrix (same as copy) -Also see create and set

      +

      Copies a matrix (same as copy) +Also see create and set

      + +

      Returns

      A copy of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      A copy of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.copy.html b/docs/functions/mat3.copy.html index 58b2290..6b1f976 100644 --- a/docs/functions/mat3.copy.html +++ b/docs/functions/mat3.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a matrix. (same as clone) -Also see create and set

      +

      Copies a matrix. (same as clone) +Also see create and set

      + +

      Returns

      A copy of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      A copy of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.create.html b/docs/functions/mat3.create.html index c9c04ba..133710b 100644 --- a/docs/functions/mat3.create.html +++ b/docs/functions/mat3.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Create a Mat3 from values

      Note: Since passing in a raw JavaScript array @@ -26,61 +26,61 @@

      Function create

      force a JavaScript array into a Mat3's specified type it would be faster to use

      const m = mat3.clone(someJSArray);
      -
      +

      Note: a consequence of the implementation is if your Mat3Type = Array instead of Float32Array or Float64Array then any values you don't pass in will be undefined. Usually this is not an issue since (a) using Array is rare and (b) using mat3.create is usually used to create a Mat3 to be filled out as in

      const m = mat3.create();
      mat3.perspective(fov, aspect, near, far, m); -
      + + +

      Returns

      matrix created from values.

Parameters

  • -
    Optional v0: number
    +
    Optional v0: number

    value for element 0

  • -
    Optional v1: number
    +
    Optional v1: number

    value for element 1

  • -
    Optional v2: number
    +
    Optional v2: number

    value for element 2

  • -
    Optional v3: number
    +
    Optional v3: number

    value for element 3

  • -
    Optional v4: number
    +
    Optional v4: number

    value for element 4

  • -
    Optional v5: number
    +
    Optional v5: number

    value for element 5

  • -
    Optional v6: number
    +
    Optional v6: number

    value for element 6

  • -
    Optional v7: number
    +
    Optional v7: number

    value for element 7

  • -
    Optional v8: number
    +
    Optional v8: number

    value for element 8

-

Returns Mat3

matrix created from values.

-
-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.determinant.html b/docs/functions/mat3.determinant.html index 32362b0..da87277 100644 --- a/docs/functions/mat3.determinant.html +++ b/docs/functions/mat3.determinant.html @@ -1,4 +1,4 @@ -determinant | wgpu-matrix
+determinant | wgpu-matrix
-
+

Function determinant

-
    - +
      +
    • Compute the determinant of a matrix

      + +

      Returns

      the determinant

      Parameters

      -

      Returns number

      the determinant

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.equals.html b/docs/functions/mat3.equals.html index 51d2239..f0719c6 100644 --- a/docs/functions/mat3.equals.html +++ b/docs/functions/mat3.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 matrices are exactly equal

      + +

      Returns

      true if matrices are exactly equal

      Parameters

      -

      Returns boolean

      true if matrices are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.equalsApproximately.html b/docs/functions/mat3.equalsApproximately.html index 20e6339..5ab47a0 100644 --- a/docs/functions/mat3.equalsApproximately.html +++ b/docs/functions/mat3.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 matrices are approximately equal

      + +

      Returns

      true if matrices are approximately equal

      Parameters

      -

      Returns boolean

      true if matrices are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.fromMat4.html b/docs/functions/mat3.fromMat4.html index 2b1987d..6cfb7ba 100644 --- a/docs/functions/mat3.fromMat4.html +++ b/docs/functions/mat3.fromMat4.html @@ -1,4 +1,4 @@ -fromMat4 | wgpu-matrix
+fromMat4 | wgpu-matrix
-
+

Function fromMat4

-
    - +
      +
    • Creates a Mat3 from the upper left 3x3 part of a Mat4

      + +

      Returns

      Mat3 made from m4

      Parameters

      • -
        m4: Mat4
        +
        m4: Mat4

        source matrix

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      Mat3 made from m4

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.fromQuat.html b/docs/functions/mat3.fromQuat.html index b06b14b..2bfb918 100644 --- a/docs/functions/mat3.fromQuat.html +++ b/docs/functions/mat3.fromQuat.html @@ -1,4 +1,4 @@ -fromQuat | wgpu-matrix
+fromQuat | wgpu-matrix
-
+

Function fromQuat

-
    - +
      +
    • Creates a Mat3 rotation matrix from a quaternion

      + +

      Returns

      Mat3 made from q

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to create matrix from

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      Mat3 made from q

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.getAxis.html b/docs/functions/mat3.getAxis.html index 7a8c273..899ef2b 100644 --- a/docs/functions/mat3.getAxis.html +++ b/docs/functions/mat3.getAxis.html @@ -1,4 +1,4 @@ -getAxis | wgpu-matrix
+getAxis | wgpu-matrix
-
+

Function getAxis

-
    - +
      +
    • Returns an axis of a 3x3 matrix as a vector with 2 entries

      + +

      Returns

      The axis component of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        axis: number
        +
        axis: number

        The axis 0 = x, 1 = y,

      • -
        Optional dst: Vec2
      -

      Returns Vec2

      The axis component of m.

      -
-
- +

Returns Vec2

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.getScaling.html b/docs/functions/mat3.getScaling.html index e9886f8..68db125 100644 --- a/docs/functions/mat3.getScaling.html +++ b/docs/functions/mat3.getScaling.html @@ -1,4 +1,4 @@ -getScaling | wgpu-matrix
+getScaling | wgpu-matrix
-
+

Function getScaling

-
    - +
      +
    • Returns the scaling component of the matrix

      @@ -26,19 +26,18 @@

      Function getScaling

Parameters

  • -
    m: Mat3
    +
    m: Mat3

    The Matrix

  • -
    Optional dst: Vec2
    +
    Optional dst: Vec2

    The vector to set. If not passed a new one is created.

-

Returns Vec2

-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.getTranslation.html b/docs/functions/mat3.getTranslation.html index 4cb7e84..4da71ea 100644 --- a/docs/functions/mat3.getTranslation.html +++ b/docs/functions/mat3.getTranslation.html @@ -1,4 +1,4 @@ -getTranslation | wgpu-matrix
+getTranslation | wgpu-matrix
-
+

Function getTranslation

-
    - +
      +
    • Returns the translation component of a 3-by-3 matrix as a vector with 3 entries.

      + +

      Returns

      The translation component of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The translation component of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.identity.html b/docs/functions/mat3.identity.html index 5e7f28f..53d8198 100644 --- a/docs/functions/mat3.identity.html +++ b/docs/functions/mat3.identity.html @@ -1,4 +1,4 @@ -identity | wgpu-matrix
+identity | wgpu-matrix
-
+

Function identity

-
    - +
      +
    • Creates a 3-by-3 identity matrix.

      + +

      Returns

      A 3-by-3 identity matrix.

      Parameters

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      A 3-by-3 identity matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.inverse.html b/docs/functions/mat3.inverse.html index 4b70122..38bfe3b 100644 --- a/docs/functions/mat3.inverse.html +++ b/docs/functions/mat3.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Computes the inverse of a 3-by-3 matrix.

      + +

      Returns

      The inverse of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The inverse of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.invert.html b/docs/functions/mat3.invert.html index a261e73..2417fdf 100644 --- a/docs/functions/mat3.invert.html +++ b/docs/functions/mat3.invert.html @@ -1,4 +1,4 @@ -invert | wgpu-matrix
+invert | wgpu-matrix
-
+

Function invert

-
    - +
      +
    • Computes the inverse of a 3-by-3 matrix. (same as inverse)

      + +

      Returns

      The inverse of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The inverse of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.mul.html b/docs/functions/mat3.mul.html index c9fcf49..d16060f 100644 --- a/docs/functions/mat3.mul.html +++ b/docs/functions/mat3.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)

      + +

      Returns

      The matrix product of a and b.

      Parameters

      • -
        a: Mat3
        +
        a: Mat3

        The matrix on the left.

      • -
        b: Mat3
        +
        b: Mat3

        The matrix on the right.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The matrix product of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.multiply.html b/docs/functions/mat3.multiply.html index 7a55ebf..666f539 100644 --- a/docs/functions/mat3.multiply.html +++ b/docs/functions/mat3.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies two 3-by-3 matrices with a on the left and b on the right

      + +

      Returns

      The matrix product of a and b.

      Parameters

      • -
        a: Mat3
        +
        a: Mat3

        The matrix on the left.

      • -
        b: Mat3
        +
        b: Mat3

        The matrix on the right.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The matrix product of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.negate.html b/docs/functions/mat3.negate.html index 5a73c9a..e65fdbe 100644 --- a/docs/functions/mat3.negate.html +++ b/docs/functions/mat3.negate.html @@ -1,4 +1,4 @@ -negate | wgpu-matrix
+negate | wgpu-matrix
-
+

Function negate

-
    - +
      +
    • Negates a matrix.

      + +

      Returns

      -m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      -m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.rotate.html b/docs/functions/mat3.rotate.html index 793a7b4..243ee6f 100644 --- a/docs/functions/mat3.rotate.html +++ b/docs/functions/mat3.rotate.html @@ -1,4 +1,4 @@ -rotate | wgpu-matrix
+rotate | wgpu-matrix
-
+

Function rotate

-
    - +
      +
    • Rotates the given 3-by-3 matrix by the given angle.

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.rotation.html b/docs/functions/mat3.rotation.html index e230c38..683ca37 100644 --- a/docs/functions/mat3.rotation.html +++ b/docs/functions/mat3.rotation.html @@ -1,4 +1,4 @@ -rotation | wgpu-matrix
+rotation | wgpu-matrix
-
+

Function rotation

-
    - +
      +
    • Creates a 3-by-3 matrix which rotates by the given angle.

      + +

      Returns

      The rotation matrix.

      Parameters

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The rotation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.scale.html b/docs/functions/mat3.scale.html index 7c256b4..7078d38 100644 --- a/docs/functions/mat3.scale.html +++ b/docs/functions/mat3.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Scales the given 3-by-3 matrix in each dimension by an amount given by the corresponding entry in the given vector; assumes the vector has three entries.

      + +

      Returns

      The scaled matrix.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix to be modified.

      • -
        v: Vec2
        +
        v: Vec2

        A vector of 2 entries specifying the factor by which to scale in each dimension.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The scaled matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.scaling.html b/docs/functions/mat3.scaling.html index b657c36..32b251e 100644 --- a/docs/functions/mat3.scaling.html +++ b/docs/functions/mat3.scaling.html @@ -1,4 +1,4 @@ -scaling | wgpu-matrix
+scaling | wgpu-matrix
-
+

Function scaling

-
    - +
      +
    • Creates a 3-by-3 matrix which scales in each dimension by an amount given by the corresponding entry in the given vector; assumes the vector has three entries.

      + +

      Returns

      The scaling matrix.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        A vector of 2 entries specifying the factor by which to scale in each dimension.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The scaling matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.set.html b/docs/functions/mat3.set.html index fc8674a..419caa0 100644 --- a/docs/functions/mat3.set.html +++ b/docs/functions/mat3.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Mat3 -Also see create and copy

      +Also see create and copy

      + +

      Returns

      Mat3 set from values.

      Parameters

      • -
        v0: number
        +
        v0: number

        value for element 0

      • -
        v1: number
        +
        v1: number

        value for element 1

      • -
        v2: number
        +
        v2: number

        value for element 2

      • -
        v3: number
        +
        v3: number

        value for element 3

      • -
        v4: number
        +
        v4: number

        value for element 4

      • -
        v5: number
        +
        v5: number

        value for element 5

      • -
        v6: number
        +
        v6: number

        value for element 6

      • -
        v7: number
        +
        v7: number

        value for element 7

      • -
        v8: number
        +
        v8: number

        value for element 8

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      Mat3 set from values.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.setAxis.html b/docs/functions/mat3.setAxis.html index 82b320a..6a968fe 100644 --- a/docs/functions/mat3.setAxis.html +++ b/docs/functions/mat3.setAxis.html @@ -1,4 +1,4 @@ -setAxis | wgpu-matrix
+setAxis | wgpu-matrix
-
+

Function setAxis

-
    - +
      +
    • Sets an axis of a 3x3 matrix as a vector with 2 entries

      + +

      Returns

      The matrix with axis set.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        v: Vec2
        +
        v: Vec2

        the axis vector

      • -
        axis: number
        +
        axis: number

        The axis 0 = x, 1 = y;

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

        The matrix to set. If not passed a new one is created.

      -

      Returns Mat3

      The matrix with axis set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.setDefaultType.html b/docs/functions/mat3.setDefaultType.html index caf4246..5bc4f02 100644 --- a/docs/functions/mat3.setDefaultType.html +++ b/docs/functions/mat3.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Mat3

      + +

      Returns

      previous constructor for Mat3

      Parameters

      • -
        ctor: (new (n) => Mat3)
        +
        ctor: (new (n: number) => Mat3)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Mat3
          • +
              +
            • new (n: number): Mat3
            • Parameters

              • -
                n: number
              -

              Returns Mat3

      -

      Returns Mat3LikeCtor

      previous constructor for Mat3

      -
-
- +

Returns Mat3

+

Returns Mat3LikeCtor

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.setTranslation.html b/docs/functions/mat3.setTranslation.html index 9bea843..f8ec3d3 100644 --- a/docs/functions/mat3.setTranslation.html +++ b/docs/functions/mat3.setTranslation.html @@ -1,4 +1,4 @@ -setTranslation | wgpu-matrix
+setTranslation | wgpu-matrix
-
+

Function setTranslation

-
    - +
      +
    • Sets the translation component of a 3-by-3 matrix to the given vector.

      + +

      Returns

      The matrix with translation set.

      Parameters

      • -
        a: Mat3
        +
        a: Mat3

        The matrix.

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The matrix with translation set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.translate.html b/docs/functions/mat3.translate.html index 5d777c8..3655f6a 100644 --- a/docs/functions/mat3.translate.html +++ b/docs/functions/mat3.translate.html @@ -1,4 +1,4 @@ -translate | wgpu-matrix
+translate | wgpu-matrix
-
+

Function translate

-
    - +
      +
    • Translates the given 3-by-3 matrix by the given vector v.

      + +

      Returns

      The translated matrix.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        v: Vec2
        +
        v: Vec2

        The vector by which to translate.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The translated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.translation.html b/docs/functions/mat3.translation.html index bf72e5c..af7137c 100644 --- a/docs/functions/mat3.translation.html +++ b/docs/functions/mat3.translation.html @@ -1,4 +1,4 @@ -translation | wgpu-matrix
+translation | wgpu-matrix
-
+

Function translation

-
    - +
      +
    • Creates a 3-by-3 matrix which translates by the given vector v.

      + +

      Returns

      The translation matrix.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector by which to translate.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The translation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat3.transpose.html b/docs/functions/mat3.transpose.html index 1165a96..31d1514 100644 --- a/docs/functions/mat3.transpose.html +++ b/docs/functions/mat3.transpose.html @@ -1,4 +1,4 @@ -transpose | wgpu-matrix
+transpose | wgpu-matrix
-
+

Function transpose

-
    - +
      +
    • Takes the transpose of a matrix.

      + +

      Returns

      The transpose of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Mat3
        +
        Optional dst: Mat3

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

      -

      Returns Mat3

      The transpose of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

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

Function uniformScale

+
+
    + +
  • +

    Scales the given 3-by-3 matrix in each dimension by an amount +given.

    + +

    Returns

    The scaled matrix.

    +
    +
    +

    Parameters

    +
      +
    • +
      m: Mat3
      +

      The matrix to be modified.

      +
    • +
    • +
      s: number
      +

      Amount to scale.

      +
    • +
    • +
      Optional dst: Mat3
      +

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

      +
    +

    Returns Mat3

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/functions/mat3.uniformScaling.html b/docs/functions/mat3.uniformScaling.html new file mode 100644 index 0000000..2c0d814 --- /dev/null +++ b/docs/functions/mat3.uniformScaling.html @@ -0,0 +1,103 @@ +uniformScaling | wgpu-matrix
+
+ +
+
+
+
+ +

Function uniformScaling

+
+
    + +
  • +

    Creates a 3-by-3 matrix which scales uniformly in each dimension

    + +

    Returns

    The scaling matrix.

    +
    +
    +

    Parameters

    +
      +
    • +
      s: number
      +

      Amount to scale

      +
    • +
    • +
      Optional dst: Mat3
      +

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

      +
    +

    Returns Mat3

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/functions/mat4.aim.html b/docs/functions/mat4.aim.html index 0cf7ca9..7577d4d 100644 --- a/docs/functions/mat4.aim.html +++ b/docs/functions/mat4.aim.html @@ -1,4 +1,4 @@ -aim | wgpu-matrix
+aim | wgpu-matrix
-
+

Function aim

-
    - +
      +
    • Computes a 4-by-4 aim transformation.

      This is a matrix which positions an object aiming down positive Z. toward the target.

      Note: this is NOT the inverse of lookAt as lookAt looks at negative Z.

      + +

      Returns

      The aim matrix.

      Parameters

      • -
        position: Vec3
        +
        position: Vec3

        The position of the object.

      • -
        target: Vec3
        +
        target: Vec3

        The position meant to be aimed at.

      • -
        up: Vec3
        +
        up: Vec3

        A vector pointing up.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The aim matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.axisRotate.html b/docs/functions/mat4.axisRotate.html index 4553dcb..175d87b 100644 --- a/docs/functions/mat4.axisRotate.html +++ b/docs/functions/mat4.axisRotate.html @@ -1,4 +1,4 @@ -axisRotate | wgpu-matrix
+axisRotate | wgpu-matrix
-
+

Function axisRotate

-
    - +
      +
    • Rotates the given 4-by-4 matrix around the given axis by the given angle.

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        axis: Vec3
        +
        axis: Vec3

        The axis about which to rotate.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.axisRotation.html b/docs/functions/mat4.axisRotation.html index e5fac37..60867e8 100644 --- a/docs/functions/mat4.axisRotation.html +++ b/docs/functions/mat4.axisRotation.html @@ -1,4 +1,4 @@ -axisRotation | wgpu-matrix
+axisRotation | wgpu-matrix
-
+

Function axisRotation

-
    - +
      +
    • Creates a 4-by-4 matrix which rotates around the given axis by the given angle.

      + +

      Returns

      A matrix which rotates angle radians + around the axis.

      Parameters

      • -
        axis: Vec3
        +
        axis: Vec3

        The axis about which to rotate.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      A matrix which rotates angle radians - around the axis.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.cameraAim.html b/docs/functions/mat4.cameraAim.html index ee5a058..f5c2d57 100644 --- a/docs/functions/mat4.cameraAim.html +++ b/docs/functions/mat4.cameraAim.html @@ -1,4 +1,4 @@ -cameraAim | wgpu-matrix
+cameraAim | wgpu-matrix
-
+

Function cameraAim

-
    - +
      +
    • Computes a 4-by-4 camera aim transformation.

      This is a matrix which positions an object aiming down negative Z. toward the target.

      Note: this is the inverse of lookAt

      + +

      Returns

      The aim matrix.

      Parameters

      • -
        eye: Vec3
        +
        eye: Vec3

        The position of the object.

      • -
        target: Vec3
        +
        target: Vec3

        The position meant to be aimed at.

      • -
        up: Vec3
        +
        up: Vec3

        A vector pointing up.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The aim matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.clone.html b/docs/functions/mat4.clone.html index bb08b86..a3d6660 100644 --- a/docs/functions/mat4.clone.html +++ b/docs/functions/mat4.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Copies a matrix (same as copy) -Also see create and set

      +

      Copies a matrix (same as copy) +Also see create and set

      + +

      Returns

      A copy of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      A copy of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.copy.html b/docs/functions/mat4.copy.html index 5f8ca3f..5494f97 100644 --- a/docs/functions/mat4.copy.html +++ b/docs/functions/mat4.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a matrix. (same as clone) -Also see create and set

      +

      Copies a matrix. (same as clone) +Also see create and set

      + +

      Returns

      A copy of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      A copy of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.create.html b/docs/functions/mat4.create.html index 481c0d6..845b8a6 100644 --- a/docs/functions/mat4.create.html +++ b/docs/functions/mat4.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Create a Mat4 from values

      Note: Since passing in a raw JavaScript array @@ -26,89 +26,89 @@

      Function create

      force a JavaScript array into a Mat4's specified type it would be faster to use

      const m = mat4.clone(someJSArray);
      -
      +

      Note: a consequence of the implementation is if your Mat4Type = Array instead of Float32Array or Float64Array then any values you don't pass in will be undefined. Usually this is not an issue since (a) using Array is rare and (b) using mat4.create is usually used to create a Mat4 to be filled out as in

      const m = mat4.create();
      mat4.perspective(fov, aspect, near, far, m); -
      + + +

      Returns

      created from values.

Parameters

  • -
    Optional v0: number
    +
    Optional v0: number

    value for element 0

  • -
    Optional v1: number
    +
    Optional v1: number

    value for element 1

  • -
    Optional v2: number
    +
    Optional v2: number

    value for element 2

  • -
    Optional v3: number
    +
    Optional v3: number

    value for element 3

  • -
    Optional v4: number
    +
    Optional v4: number

    value for element 4

  • -
    Optional v5: number
    +
    Optional v5: number

    value for element 5

  • -
    Optional v6: number
    +
    Optional v6: number

    value for element 6

  • -
    Optional v7: number
    +
    Optional v7: number

    value for element 7

  • -
    Optional v8: number
    +
    Optional v8: number

    value for element 8

  • -
    Optional v9: number
    +
    Optional v9: number

    value for element 9

  • -
    Optional v10: number
    +
    Optional v10: number

    value for element 10

  • -
    Optional v11: number
    +
    Optional v11: number

    value for element 11

  • -
    Optional v12: number
    +
    Optional v12: number

    value for element 12

  • -
    Optional v13: number
    +
    Optional v13: number

    value for element 13

  • -
    Optional v14: number
    +
    Optional v14: number

    value for element 14

  • -
    Optional v15: number
    +
    Optional v15: number

    value for element 15

-

Returns Mat4

created from values.

-
-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.determinant.html b/docs/functions/mat4.determinant.html index f1f7ae9..f5978e5 100644 --- a/docs/functions/mat4.determinant.html +++ b/docs/functions/mat4.determinant.html @@ -1,4 +1,4 @@ -determinant | wgpu-matrix
+determinant | wgpu-matrix
-
+

Function determinant

-
    - +
      +
    • Compute the determinant of a matrix

      + +

      Returns

      the determinant

      Parameters

      -

      Returns number

      the determinant

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.equals.html b/docs/functions/mat4.equals.html index 3489279..88afcc6 100644 --- a/docs/functions/mat4.equals.html +++ b/docs/functions/mat4.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 matrices are exactly equal

      + +

      Returns

      true if matrices are exactly equal

      Parameters

      -

      Returns boolean

      true if matrices are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.equalsApproximately.html b/docs/functions/mat4.equalsApproximately.html index c778ec1..ed8d4ec 100644 --- a/docs/functions/mat4.equalsApproximately.html +++ b/docs/functions/mat4.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 matrices are approximately equal

      + +

      Returns

      true if matrices are approximately equal

      Parameters

      -

      Returns boolean

      true if matrices are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.fromMat3.html b/docs/functions/mat4.fromMat3.html index accac74..00c1485 100644 --- a/docs/functions/mat4.fromMat3.html +++ b/docs/functions/mat4.fromMat3.html @@ -1,4 +1,4 @@ -fromMat3 | wgpu-matrix
+fromMat3 | wgpu-matrix
-
+

Function fromMat3

-
    - +
      +
    • Creates a Mat4 from a Mat3

      + +

      Returns

      Mat4 made from m3

      Parameters

      • -
        m3: Mat3
        +
        m3: Mat3

        source matrix

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      Mat4 made from m3

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.fromQuat.html b/docs/functions/mat4.fromQuat.html index ea5409a..8f20a54 100644 --- a/docs/functions/mat4.fromQuat.html +++ b/docs/functions/mat4.fromQuat.html @@ -1,4 +1,4 @@ -fromQuat | wgpu-matrix
+fromQuat | wgpu-matrix
-
+

Function fromQuat

-
    - +
      +
    • Creates a Mat4 rotation matrix from a quaternion

      + +

      Returns

      Mat4 made from q

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to create matrix from

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      Mat4 made from q

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.frustum.html b/docs/functions/mat4.frustum.html index 5936b52..be45811 100644 --- a/docs/functions/mat4.frustum.html +++ b/docs/functions/mat4.frustum.html @@ -1,4 +1,4 @@ -frustum | wgpu-matrix
+frustum | wgpu-matrix
-
+

Function frustum

-
    - +
      +
    • Computes a 4-by-4 perspective transformation matrix given the left, right, top, bottom, near and far clipping planes. The arguments define a frustum @@ -28,45 +28,45 @@

      Function frustum

      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 0 to 1 in the z dimension.

      + +

      Returns

      The perspective projection matrix.

Parameters

  • -
    left: number
    +
    left: number

    The x coordinate of the left plane of the box.

  • -
    right: number
    +
    right: number

    The x coordinate of the right plane of the box.

  • -
    bottom: number
    +
    bottom: number

    The y coordinate of the bottom plane of the box.

  • -
    top: number
    +
    top: number

    The y coordinate of the right plane of the box.

  • -
    near: number
    +
    near: number

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

  • -
    far: number
    +
    far: number

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

  • -
    Optional dst: Mat4
    +
    Optional dst: Mat4

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

-

Returns Mat4

The perspective projection matrix.

-
-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.getAxis.html b/docs/functions/mat4.getAxis.html index 4ef6b48..e08e6ab 100644 --- a/docs/functions/mat4.getAxis.html +++ b/docs/functions/mat4.getAxis.html @@ -1,4 +1,4 @@ -getAxis | wgpu-matrix
+getAxis | wgpu-matrix
-
+

Function getAxis

-
    - +
      +
    • Returns an axis of a 4x4 matrix as a vector with 3 entries

      + +

      Returns

      The axis component of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        axis: number
        +
        axis: number

        The axis 0 = x, 1 = y, 2 = z;

      • -
        Optional dst: Vec3
      -

      Returns Vec3

      The axis component of m.

      -
-
- +

Returns Vec3

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.getScaling.html b/docs/functions/mat4.getScaling.html index 6769320..18fe7ad 100644 --- a/docs/functions/mat4.getScaling.html +++ b/docs/functions/mat4.getScaling.html @@ -1,4 +1,4 @@ -getScaling | wgpu-matrix
+getScaling | wgpu-matrix
-
+

Function getScaling

-
    - +
      +
    • Returns the scaling component of the matrix

      @@ -26,19 +26,18 @@

      Function getScaling

Parameters

  • -
    m: Mat4
    +
    m: Mat4

    The Matrix

  • -
    Optional dst: Vec3
    +
    Optional dst: Vec3

    The vector to set. If not passed a new one is created.

-

Returns Vec3

-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.getTranslation.html b/docs/functions/mat4.getTranslation.html index 32bafee..842a5cc 100644 --- a/docs/functions/mat4.getTranslation.html +++ b/docs/functions/mat4.getTranslation.html @@ -1,4 +1,4 @@ -getTranslation | wgpu-matrix
+getTranslation | wgpu-matrix
-
+

Function getTranslation

-
    - +
      +
    • Returns the translation component of a 4-by-4 matrix as a vector with 3 entries.

      + +

      Returns

      The translation component of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The translation component of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.identity.html b/docs/functions/mat4.identity.html index bf8d564..60df92b 100644 --- a/docs/functions/mat4.identity.html +++ b/docs/functions/mat4.identity.html @@ -1,4 +1,4 @@ -identity | wgpu-matrix
+identity | wgpu-matrix
-
+

Function identity

-
    - +
      +
    • Creates a 4-by-4 identity matrix.

      + +

      Returns

      A 4-by-4 identity matrix.

      Parameters

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      A 4-by-4 identity matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.inverse.html b/docs/functions/mat4.inverse.html index df8fdd8..de65f1c 100644 --- a/docs/functions/mat4.inverse.html +++ b/docs/functions/mat4.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Computes the inverse of a 4-by-4 matrix.

      + +

      Returns

      The inverse of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The inverse of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.invert.html b/docs/functions/mat4.invert.html index d5de4ce..9fc1ce7 100644 --- a/docs/functions/mat4.invert.html +++ b/docs/functions/mat4.invert.html @@ -1,4 +1,4 @@ -invert | wgpu-matrix
+invert | wgpu-matrix
-
+

Function invert

-
    - +
      +
    • Computes the inverse of a 4-by-4 matrix. (same as inverse)

      + +

      Returns

      The inverse of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The inverse of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.lookAt.html b/docs/functions/mat4.lookAt.html index 5651cec..52cedce 100644 --- a/docs/functions/mat4.lookAt.html +++ b/docs/functions/mat4.lookAt.html @@ -1,4 +1,4 @@ -lookAt | wgpu-matrix
+lookAt | wgpu-matrix
-
+

Function lookAt

-
    - +
      +
    • Computes a 4-by-4 view transformation.

      This is a view matrix which transforms all other objects to be in the space of the view defined by the parameters.

      + +

      Returns

      The look-at matrix.

      Parameters

      • -
        eye: Vec3
        +
        eye: Vec3

        The position of the object.

      • -
        target: Vec3
        +
        target: Vec3

        The position meant to be aimed at.

      • -
        up: Vec3
        +
        up: Vec3

        A vector pointing up.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The look-at matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.mul.html b/docs/functions/mat4.mul.html index f4ac8e3..37b4f31 100644 --- a/docs/functions/mat4.mul.html +++ b/docs/functions/mat4.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)

      + +

      Returns

      The matrix product of a and b.

      Parameters

      • -
        a: Mat4
        +
        a: Mat4

        The matrix on the left.

      • -
        b: Mat4
        +
        b: Mat4

        The matrix on the right.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The matrix product of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.multiply.html b/docs/functions/mat4.multiply.html index c37f292..bd2892e 100644 --- a/docs/functions/mat4.multiply.html +++ b/docs/functions/mat4.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies two 4-by-4 matrices with a on the left and b on the right

      + +

      Returns

      The matrix product of a and b.

      Parameters

      • -
        a: Mat4
        +
        a: Mat4

        The matrix on the left.

      • -
        b: Mat4
        +
        b: Mat4

        The matrix on the right.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The matrix product of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.negate.html b/docs/functions/mat4.negate.html index 6483c8c..1db93f8 100644 --- a/docs/functions/mat4.negate.html +++ b/docs/functions/mat4.negate.html @@ -1,4 +1,4 @@ -negate | wgpu-matrix
+negate | wgpu-matrix
-
+

Function negate

-
    - +
      +
    • Negates a matrix.

      + +

      Returns

      -m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      -m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.ortho.html b/docs/functions/mat4.ortho.html index 94e8143..0973972 100644 --- a/docs/functions/mat4.ortho.html +++ b/docs/functions/mat4.ortho.html @@ -1,4 +1,4 @@ -ortho | wgpu-matrix
+ortho | wgpu-matrix
-
+

Function ortho

-
    - +
      +
    • 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 and 0 to +1 in z.

      + +

      Returns

      The orthographic projection matrix.

      Parameters

      • -
        left: number
        +
        left: number

        Left side of the near clipping plane viewport.

      • -
        right: number
        +
        right: number

        Right side of the near clipping plane viewport.

      • -
        bottom: number
        +
        bottom: number

        Bottom of the near clipping plane viewport.

      • -
        top: number
        +
        top: number

        Top of the near clipping plane viewport.

      • -
        near: number
        +
        near: number

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

      • -
        far: number
        +
        far: number

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

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The orthographic projection matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.perspective.html b/docs/functions/mat4.perspective.html index 31add06..35a9a74 100644 --- a/docs/functions/mat4.perspective.html +++ b/docs/functions/mat4.perspective.html @@ -1,4 +1,4 @@ -perspective | wgpu-matrix
+perspective | wgpu-matrix
-
+

Function perspective

-
    - +
      +
    • Computes a 4-by-4 perspective transformation matrix given the angular height of the frustum, the aspect ratio, and the near and far clipping planes. The @@ -33,39 +33,39 @@

      Function perspective

      Note: If you pass Infinity for zFar then it will produce a projection matrix returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z otherwise.

      + +

      Returns

      The perspective matrix.

Parameters

  • -
    fieldOfViewYInRadians: number
    +
    fieldOfViewYInRadians: number

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

  • -
    aspect: number
    +
    aspect: number

    The aspect ratio width / height.

  • -
    zNear: number
    +
    zNear: number

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

  • -
    zFar: number
    +
    zFar: number

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

  • -
    Optional dst: Mat4
    +
    Optional dst: Mat4

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

-

Returns Mat4

The perspective matrix.

-
-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotate.html b/docs/functions/mat4.rotate.html index f2362c1..61a3431 100644 --- a/docs/functions/mat4.rotate.html +++ b/docs/functions/mat4.rotate.html @@ -1,4 +1,4 @@ -rotate | wgpu-matrix
+rotate | wgpu-matrix
-
+

Function rotate

-
    - +
      +
    • Rotates the given 4-by-4 matrix around the given axis by the given angle. (same as rotate)

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        axis: Vec3
        +
        axis: Vec3

        The axis about which to rotate.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotateX.html b/docs/functions/mat4.rotateX.html index e684b87..ba03e4a 100644 --- a/docs/functions/mat4.rotateX.html +++ b/docs/functions/mat4.rotateX.html @@ -1,4 +1,4 @@ -rotateX | wgpu-matrix
+rotateX | wgpu-matrix
-
+

Function rotateX

-
    - +
      +
    • Rotates the given 4-by-4 matrix around the x-axis by the given angle.

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotateY.html b/docs/functions/mat4.rotateY.html index f42996e..776bada 100644 --- a/docs/functions/mat4.rotateY.html +++ b/docs/functions/mat4.rotateY.html @@ -1,4 +1,4 @@ -rotateY | wgpu-matrix
+rotateY | wgpu-matrix
-
+

Function rotateY

-
    - +
      +
    • Rotates the given 4-by-4 matrix around the y-axis by the given angle.

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotateZ.html b/docs/functions/mat4.rotateZ.html index de6caf8..06a2930 100644 --- a/docs/functions/mat4.rotateZ.html +++ b/docs/functions/mat4.rotateZ.html @@ -1,4 +1,4 @@ -rotateZ | wgpu-matrix
+rotateZ | wgpu-matrix
-
+

Function rotateZ

-
    - +
      +
    • Rotates the given 4-by-4 matrix around the z-axis by the given angle.

      + +

      Returns

      The rotated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotation.html b/docs/functions/mat4.rotation.html index 9d21e4a..1cb273e 100644 --- a/docs/functions/mat4.rotation.html +++ b/docs/functions/mat4.rotation.html @@ -1,4 +1,4 @@ -rotation | wgpu-matrix
+rotation | wgpu-matrix
-
+

Function rotation

-
    - +
      +
    • Creates a 4-by-4 matrix which rotates around the given axis by the given angle. (same as axisRotation)

      + +

      Returns

      A matrix which rotates angle radians + around the axis.

      Parameters

      • -
        axis: Vec3
        +
        axis: Vec3

        The axis about which to rotate.

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      A matrix which rotates angle radians - around the axis.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotationX.html b/docs/functions/mat4.rotationX.html index 551f2af..d7f5df4 100644 --- a/docs/functions/mat4.rotationX.html +++ b/docs/functions/mat4.rotationX.html @@ -1,4 +1,4 @@ -rotationX | wgpu-matrix
+rotationX | wgpu-matrix
-
+

Function rotationX

-
    - +
      +
    • Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.

      + +

      Returns

      The rotation matrix.

      Parameters

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotationY.html b/docs/functions/mat4.rotationY.html index e27e26a..0341a6d 100644 --- a/docs/functions/mat4.rotationY.html +++ b/docs/functions/mat4.rotationY.html @@ -1,4 +1,4 @@ -rotationY | wgpu-matrix
+rotationY | wgpu-matrix
-
+

Function rotationY

-
    - +
      +
    • Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.

      + +

      Returns

      The rotation matrix.

      Parameters

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.rotationZ.html b/docs/functions/mat4.rotationZ.html index f80bdb4..f37b509 100644 --- a/docs/functions/mat4.rotationZ.html +++ b/docs/functions/mat4.rotationZ.html @@ -1,4 +1,4 @@ -rotationZ | wgpu-matrix
+rotationZ | wgpu-matrix
-
+

Function rotationZ

-
    - +
      +
    • Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.

      + +

      Returns

      The rotation matrix.

      Parameters

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate (in radians).

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The rotation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.scale.html b/docs/functions/mat4.scale.html index 2f69bd3..414dd34 100644 --- a/docs/functions/mat4.scale.html +++ b/docs/functions/mat4.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Scales the given 4-by-4 matrix in each dimension by an amount given by the corresponding entry in the given vector; assumes the vector has three entries.

      + +

      Returns

      The scaled matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix to be modified.

      • -
        v: Vec3
        +
        v: Vec3

        A vector of three entries specifying the factor by which to scale in each dimension.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The scaled matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.scaling.html b/docs/functions/mat4.scaling.html index dc2bb48..a3520c8 100644 --- a/docs/functions/mat4.scaling.html +++ b/docs/functions/mat4.scaling.html @@ -1,4 +1,4 @@ -scaling | wgpu-matrix
+scaling | wgpu-matrix
-
+

Function scaling

-
    - +
      +
    • Creates a 4-by-4 matrix which scales in each dimension by an amount given by the corresponding entry in the given vector; assumes the vector has three entries.

      + +

      Returns

      The scaling matrix.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        A vector of three entries specifying the factor by which to scale in each dimension.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The scaling matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.set.html b/docs/functions/mat4.set.html index ec17a26..8b5937c 100644 --- a/docs/functions/mat4.set.html +++ b/docs/functions/mat4.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Mat4 -Also see create and copy

      +Also see create and copy

      + +

      Returns

      Mat4 created from values.

      Parameters

      • -
        v0: number
        +
        v0: number

        value for element 0

      • -
        v1: number
        +
        v1: number

        value for element 1

      • -
        v2: number
        +
        v2: number

        value for element 2

      • -
        v3: number
        +
        v3: number

        value for element 3

      • -
        v4: number
        +
        v4: number

        value for element 4

      • -
        v5: number
        +
        v5: number

        value for element 5

      • -
        v6: number
        +
        v6: number

        value for element 6

      • -
        v7: number
        +
        v7: number

        value for element 7

      • -
        v8: number
        +
        v8: number

        value for element 8

      • -
        v9: number
        +
        v9: number

        value for element 9

      • -
        v10: number
        +
        v10: number

        value for element 10

      • -
        v11: number
        +
        v11: number

        value for element 11

      • -
        v12: number
        +
        v12: number

        value for element 12

      • -
        v13: number
        +
        v13: number

        value for element 13

      • -
        v14: number
        +
        v14: number

        value for element 14

      • -
        v15: number
        +
        v15: number

        value for element 15

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      Mat4 created from values.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.setAxis.html b/docs/functions/mat4.setAxis.html index 658b60d..b43a43b 100644 --- a/docs/functions/mat4.setAxis.html +++ b/docs/functions/mat4.setAxis.html @@ -1,4 +1,4 @@ -setAxis | wgpu-matrix
+setAxis | wgpu-matrix
-
+

Function setAxis

-
    - +
      +
    • Sets an axis of a 4x4 matrix as a vector with 3 entries

      + +

      Returns

      The matrix with axis set.

      Parameters

      • -
        a: Mat4
      • +
        a: Mat4
      • -
        v: Vec3
        +
        v: Vec3

        the axis vector

      • -
        axis: number
        +
        axis: number

        The axis 0 = x, 1 = y, 2 = z;

      • -
        dst: Mat4
        +
        dst: Mat4

        The matrix to set. If not passed a new one is created.

      -

      Returns Mat4

      The matrix with axis set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.setDefaultType.html b/docs/functions/mat4.setDefaultType.html index f80dec9..c4a1492 100644 --- a/docs/functions/mat4.setDefaultType.html +++ b/docs/functions/mat4.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Mat4

      + +

      Returns

      previous constructor for Mat4

      Parameters

      • -
        ctor: (new (n) => Mat4)
        +
        ctor: (new (n: number) => Mat4)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Mat4
          • +
              +
            • new (n: number): Mat4
            • Parameters

              • -
                n: number
              -

              Returns Mat4

      -

      Returns Mat4LikeCtor

      previous constructor for Mat4

      -
-
- +

Returns Mat4

+

Returns Mat4LikeCtor

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.setTranslation.html b/docs/functions/mat4.setTranslation.html index cf73c34..f3eac73 100644 --- a/docs/functions/mat4.setTranslation.html +++ b/docs/functions/mat4.setTranslation.html @@ -1,4 +1,4 @@ -setTranslation | wgpu-matrix
+setTranslation | wgpu-matrix
-
+

Function setTranslation

-
    - +
      +
    • Sets the translation component of a 4-by-4 matrix to the given vector.

      + +

      Returns

      The matrix with translation set.

      Parameters

      • -
        a: Mat4
        +
        a: Mat4

        The matrix.

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The matrix with translation set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.translate.html b/docs/functions/mat4.translate.html index 52ad81a..3b0c196 100644 --- a/docs/functions/mat4.translate.html +++ b/docs/functions/mat4.translate.html @@ -1,4 +1,4 @@ -translate | wgpu-matrix
+translate | wgpu-matrix
-
+

Function translate

-
    - +
      +
    • Translates the given 4-by-4 matrix by the given vector v.

      + +

      Returns

      The translated matrix.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        v: Vec3
        +
        v: Vec3

        The vector by which to translate.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The translated matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.translation.html b/docs/functions/mat4.translation.html index c5d1edb..d1567d5 100644 --- a/docs/functions/mat4.translation.html +++ b/docs/functions/mat4.translation.html @@ -1,4 +1,4 @@ -translation | wgpu-matrix
+translation | wgpu-matrix
-
+

Function translation

-
    - +
      +
    • Creates a 4-by-4 matrix which translates by the given vector v.

      + +

      Returns

      The translation matrix.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector by which to translate.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The translation matrix.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/mat4.transpose.html b/docs/functions/mat4.transpose.html index 0038a0c..766daa4 100644 --- a/docs/functions/mat4.transpose.html +++ b/docs/functions/mat4.transpose.html @@ -1,4 +1,4 @@ -transpose | wgpu-matrix
+transpose | wgpu-matrix
-
+

Function transpose

-
    - +
      +
    • Takes the transpose of a matrix.

      + +

      Returns

      The transpose of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Mat4
        +
        Optional dst: Mat4

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

      -

      Returns Mat4

      The transpose of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

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

Function uniformScale

+
+
    + +
  • +

    Scales the given 4-by-4 matrix in each dimension by a uniform scale.

    + +

    Returns

    The scaled matrix.

    +
    +
    +

    Parameters

    +
      +
    • +
      m: Mat4
      +

      The matrix to be modified.

      +
    • +
    • +
      s: number
      +

      The amount to scale.

      +
    • +
    • +
      Optional dst: Mat4
      +

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

      +
    +

    Returns Mat4

+
+
+

Generated using TypeDoc

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

Function uniformScaling

+
+
    + +
  • +

    Creates a 4-by-4 matrix which scales a uniform amount in each dimension.

    + +

    Returns

    The scaling matrix.

    +
    +
    +

    Parameters

    +
      +
    • +
      s: number
      +

      the amount to scale

      +
    • +
    • +
      Optional dst: Mat4
      +

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

      +
    +

    Returns Mat4

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/functions/quat.add.html b/docs/functions/quat.add.html index 80efdfd..cf7c52c 100644 --- a/docs/functions/quat.add.html +++ b/docs/functions/quat.add.html @@ -1,4 +1,4 @@ -add | wgpu-matrix
+add | wgpu-matrix
-
+

Function add

-
    - +
      +
    • Adds two quaternions; assumes a and b have the same dimension.

      + +

      Returns

      A quaternion that is the sum of a and b.

      Parameters

      • -
        a: Quat
        +
        a: Quat

        Operand quaternion.

      • -
        b: Quat
        +
        b: Quat

        Operand quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the sum of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.angle.html b/docs/functions/quat.angle.html index 40f04ac..5c27af2 100644 --- a/docs/functions/quat.angle.html +++ b/docs/functions/quat.angle.html @@ -1,4 +1,4 @@ -angle | wgpu-matrix
+angle | wgpu-matrix
-
+

Function angle

-
    - +
      +
    • Returns the angle in degrees between two rotations a and b.

      + +

      Returns

      angle in radians between the two quaternions

      Parameters

      -

      Returns number

      angle in radians between the two quaternions

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.clone.html b/docs/functions/quat.clone.html index cc33316..e08ccc1 100644 --- a/docs/functions/quat.clone.html +++ b/docs/functions/quat.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Clones a quaternion. (same as copy) -Also see create and set

      +

      Clones a quaternion. (same as copy) +Also see create and set

      + +

      Returns

      A copy of q.

      Parameters

      • -
        q: Quat
        +
        q: Quat

        The quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A copy of q.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.conjugate.html b/docs/functions/quat.conjugate.html index 1d4866b..b54b73d 100644 --- a/docs/functions/quat.conjugate.html +++ b/docs/functions/quat.conjugate.html @@ -1,4 +1,4 @@ -conjugate | wgpu-matrix
+conjugate | wgpu-matrix
-
+

Function conjugate

-
    - +
      +
    • Compute the conjugate of a quaternion For quaternions with a magnitude of 1 (a unit quaternion) this returns the same as the inverse but is faster to calculate.

      + +

      Returns

      The conjugate of q

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to compute the conjugate of.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The conjugate of q

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.copy.html b/docs/functions/quat.copy.html index 8e98e07..2d25e0c 100644 --- a/docs/functions/quat.copy.html +++ b/docs/functions/quat.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a quaternion. (same as clone) -Also see create and set

      +

      Copies a quaternion. (same as clone) +Also see create and set

      + +

      Returns

      A quaternion that is a copy of q

      Parameters

      • -
        q: Quat
        +
        q: Quat

        The quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is a copy of q

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.create.html b/docs/functions/quat.create.html index c9f61bf..fc75230 100644 --- a/docs/functions/quat.create.html +++ b/docs/functions/quat.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Creates a quat4; may be called with x, y, z to set initial values.

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      • -
        Optional w: number
        +
        Optional w: number

        Initial w value.

      -

      Returns Quat

      the created vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.divScalar.html b/docs/functions/quat.divScalar.html index 41a5606..2e4fa67 100644 --- a/docs/functions/quat.divScalar.html +++ b/docs/functions/quat.divScalar.html @@ -1,4 +1,4 @@ -divScalar | wgpu-matrix
+divScalar | wgpu-matrix
-
+

Function divScalar

-
    - +
      +
    • Divides a vector by a scalar.

      + +

      Returns

      The scaled quaternion.

      Parameters

      • -
        v: Quat
        +
        v: Quat

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The scaled quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.dot.html b/docs/functions/quat.dot.html index d090cdb..9ff6cf4 100644 --- a/docs/functions/quat.dot.html +++ b/docs/functions/quat.dot.html @@ -1,4 +1,4 @@ -dot | wgpu-matrix
+dot | wgpu-matrix
-
+

Function dot

-
    - +
      +
    • Computes the dot product of two quaternions

      + +

      Returns

      dot product

      Parameters

      -

      Returns number

      dot product

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.equals.html b/docs/functions/quat.equals.html index 4ad7cfb..fa62b35 100644 --- a/docs/functions/quat.equals.html +++ b/docs/functions/quat.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 quaternions are exactly equal

      + +

      Returns

      true if quaternions are exactly equal

      Parameters

      -

      Returns boolean

      true if quaternions are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.equalsApproximately.html b/docs/functions/quat.equalsApproximately.html index 6b402d4..02cc2b6 100644 --- a/docs/functions/quat.equalsApproximately.html +++ b/docs/functions/quat.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 quaternions are approximately equal

      + +

      Returns

      true if quaternions are approximately equal

      Parameters

      -

      Returns boolean

      true if quaternions are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.fromAxisAngle.html b/docs/functions/quat.fromAxisAngle.html index 99ffc3c..5bedd8d 100644 --- a/docs/functions/quat.fromAxisAngle.html +++ b/docs/functions/quat.fromAxisAngle.html @@ -1,4 +1,4 @@ -fromAxisAngle | wgpu-matrix
+fromAxisAngle | wgpu-matrix
-
+

Function fromAxisAngle

-
    - +
      +
    • Sets a quaternion from the given angle and axis, then returns it.

      + +

      Returns

      The quaternion that represents the given axis and angle

      Parameters

      • -
        axis: Vec3
        +
        axis: Vec3

        the axis to rotate around

      • -
        angleInRadians: number
        +
        angleInRadians: number

        the angle

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The quaternion that represents the given axis and angle

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.fromEuler.html b/docs/functions/quat.fromEuler.html index 5b3c127..caaf22d 100644 --- a/docs/functions/quat.fromEuler.html +++ b/docs/functions/quat.fromEuler.html @@ -1,4 +1,4 @@ -fromEuler | wgpu-matrix
+fromEuler | wgpu-matrix
-
+

Function fromEuler

-
    - +
      +
    • Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.

      + +

      Returns

      A quaternion representing the same rotation as the euler angles applied in the given order

      Parameters

      • -
        xAngleInRadians: number
        +
        xAngleInRadians: number

        angle to rotate around X axis in radians.

      • -
        yAngleInRadians: number
        +
        yAngleInRadians: number

        angle to rotate around Y axis in radians.

      • -
        zAngleInRadians: number
        +
        zAngleInRadians: number

        angle to rotate around Z axis in radians.

      • -
        order: RotationOrder
        +
        order: RotationOrder

        order to apply euler angles

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion representing the same rotation as the euler angles applied in the given order

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.fromMat.html b/docs/functions/quat.fromMat.html index 17d72f1..78ef7ad 100644 --- a/docs/functions/quat.fromMat.html +++ b/docs/functions/quat.fromMat.html @@ -1,4 +1,4 @@ -fromMat | wgpu-matrix
+fromMat | wgpu-matrix
-
+

Function fromMat

-
    - +
      +
    • Creates a quaternion from the given rotation matrix.

      The created quaternion is not normalized.

      + +

      Returns

      the result

      Parameters

      • -
        m: Float32Array | Float64Array | number[]
        +
        m: Float32Array | Float64Array | number[]

        rotation matrix

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      the result

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.fromValues.html b/docs/functions/quat.fromValues.html index ef7ccfe..b3122c9 100644 --- a/docs/functions/quat.fromValues.html +++ b/docs/functions/quat.fromValues.html @@ -1,4 +1,4 @@ -fromValues | wgpu-matrix
+fromValues | wgpu-matrix
-
+

Function fromValues

-
    - +
      +
    • Creates a Quat; may be called with x, y, z to set initial values. (same as create)

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      • -
        Optional w: number
      -

      Returns Quat

      the created vector

      -
-
- +

Returns Quat

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.identity.html b/docs/functions/quat.identity.html index 8ae4667..96b692c 100644 --- a/docs/functions/quat.identity.html +++ b/docs/functions/quat.identity.html @@ -1,4 +1,4 @@ -identity | wgpu-matrix
+identity | wgpu-matrix
-
+

Function identity

-
    - +
      +
    • Creates an identity quaternion

      + +

      Returns

      an identity quaternion

      Parameters

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      an identity quaternion

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.inverse.html b/docs/functions/quat.inverse.html index c84243d..9dd54a4 100644 --- a/docs/functions/quat.inverse.html +++ b/docs/functions/quat.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Compute the inverse of a quaternion

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to compute the inverse of

      • -
        Optional dst: Quat
      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- +

Returns Quat

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.len.html b/docs/functions/quat.len.html index 0e7bf96..714defe 100644 --- a/docs/functions/quat.len.html +++ b/docs/functions/quat.len.html @@ -1,4 +1,4 @@ -len | wgpu-matrix
+len | wgpu-matrix
-
+

Function len

-
    - +
      +
    • Computes the length of quaternion (same as length)

      + +

      Returns

      length of quaternion.

      Parameters

      -

      Returns number

      length of quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.lenSq.html b/docs/functions/quat.lenSq.html index 4dc3511..82e6430 100644 --- a/docs/functions/quat.lenSq.html +++ b/docs/functions/quat.lenSq.html @@ -1,4 +1,4 @@ -lenSq | wgpu-matrix
+lenSq | wgpu-matrix
-
+

Function lenSq

-
    - +
      +
    • Computes the square of the length of quaternion (same as lengthSq)

      + +

      Returns

      square of the length of quaternion.

      Parameters

      -

      Returns number

      square of the length of quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.length.html b/docs/functions/quat.length.html index 2e8b0db..b050fec 100644 --- a/docs/functions/quat.length.html +++ b/docs/functions/quat.length.html @@ -1,4 +1,4 @@ -length | wgpu-matrix
+length | wgpu-matrix
-
+

Function length

-
    - +
      +
    • Computes the length of quaternion

      + +

      Returns

      length of quaternion.

      Parameters

      -

      Returns number

      length of quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.lengthSq.html b/docs/functions/quat.lengthSq.html index 63cf50e..1530d51 100644 --- a/docs/functions/quat.lengthSq.html +++ b/docs/functions/quat.lengthSq.html @@ -1,4 +1,4 @@ -lengthSq | wgpu-matrix
+lengthSq | wgpu-matrix
-
+

Function lengthSq

-
    - +
      +
    • Computes the square of the length of quaternion

      + +

      Returns

      square of the length of quaternion.

      Parameters

      -

      Returns number

      square of the length of quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.lerp.html b/docs/functions/quat.lerp.html index 5751612..b5732e2 100644 --- a/docs/functions/quat.lerp.html +++ b/docs/functions/quat.lerp.html @@ -1,4 +1,4 @@ -lerp | wgpu-matrix
+lerp | wgpu-matrix
-
+

Function lerp

-
    - +
      +
    • Performs linear interpolation on two quaternions. Given quaternions a and b and interpolation coefficient t, returns a + t * (b - a).

      + +

      Returns

      The linear interpolated result.

      Parameters

      • -
        a: Quat
        +
        a: Quat

        Operand quaternion.

      • -
        b: Quat
        +
        b: Quat

        Operand quaternion.

      • -
        t: number
        +
        t: number

        Interpolation coefficient.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.mul.html b/docs/functions/quat.mul.html index aeaac3f..0f24632 100644 --- a/docs/functions/quat.mul.html +++ b/docs/functions/quat.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies two quaternions

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        a: Quat
        +
        a: Quat

        the first quaternion

      • -
        b: Quat
        +
        b: Quat

        the second quaternion

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.mulScalar.html b/docs/functions/quat.mulScalar.html index 0aa6c49..64f2784 100644 --- a/docs/functions/quat.mulScalar.html +++ b/docs/functions/quat.mulScalar.html @@ -1,4 +1,4 @@ -mulScalar | wgpu-matrix
+mulScalar | wgpu-matrix
-
+

Function mulScalar

-
    - +
      +
    • Multiplies a quaternion by a scalar.

      + +

      Returns

      The scaled quaternion.

      Parameters

      • -
        v: Quat
        +
        v: Quat

        The quaternion.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The scaled quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.multiply.html b/docs/functions/quat.multiply.html index 752ec41..4c40d3b 100644 --- a/docs/functions/quat.multiply.html +++ b/docs/functions/quat.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies two quaternions

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        a: Quat
        +
        a: Quat

        the first quaternion

      • -
        b: Quat
        +
        b: Quat

        the second quaternion

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.normalize.html b/docs/functions/quat.normalize.html index 56b5d1c..2721f20 100644 --- a/docs/functions/quat.normalize.html +++ b/docs/functions/quat.normalize.html @@ -1,4 +1,4 @@ -normalize | wgpu-matrix
+normalize | wgpu-matrix
-
+

Function normalize

-
    - +
      +
    • Divides a quaternion by its Euclidean length and returns the quotient.

      + +

      Returns

      The normalized quaternion.

      Parameters

      • -
        v: Quat
        +
        v: Quat

        The quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The normalized quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.rotateX.html b/docs/functions/quat.rotateX.html index 55b287c..56aaf6d 100644 --- a/docs/functions/quat.rotateX.html +++ b/docs/functions/quat.rotateX.html @@ -1,4 +1,4 @@ -rotateX | wgpu-matrix
+rotateX | wgpu-matrix
-
+

Function rotateX

-
    - +
      +
    • Rotates the given quaternion around the X axis by the given angle.

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to rotate

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.rotateY.html b/docs/functions/quat.rotateY.html index 76c09b4..6e15536 100644 --- a/docs/functions/quat.rotateY.html +++ b/docs/functions/quat.rotateY.html @@ -1,4 +1,4 @@ -rotateY | wgpu-matrix
+rotateY | wgpu-matrix
-
+

Function rotateY

-
    - +
      +
    • Rotates the given quaternion around the Y axis by the given angle.

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to rotate

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.rotateZ.html b/docs/functions/quat.rotateZ.html index 5e6d141..1c2217c 100644 --- a/docs/functions/quat.rotateZ.html +++ b/docs/functions/quat.rotateZ.html @@ -1,4 +1,4 @@ -rotateZ | wgpu-matrix
+rotateZ | wgpu-matrix
-
+

Function rotateZ

-
    - +
      +
    • Rotates the given quaternion around the Z axis by the given angle.

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to rotate

      • -
        angleInRadians: number
        +
        angleInRadians: number

        The angle by which to rotate

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.rotationTo.html b/docs/functions/quat.rotationTo.html index 44f1ed6..58b94f3 100644 --- a/docs/functions/quat.rotationTo.html +++ b/docs/functions/quat.rotationTo.html @@ -1,4 +1,4 @@ -rotationTo | wgpu-matrix
+rotationTo | wgpu-matrix
-
+

Function rotationTo

-
    - +
      +
    • Computes a quaternion to represent the shortest rotation from one vector to another.

      + +

      Returns

      the result

      Parameters

      • -
        aUnit: Vec3
        +
        aUnit: Vec3

        the start vector

      • -
        bUnit: Vec3
        +
        bUnit: Vec3

        the end vector

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      the result

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.scale.html b/docs/functions/quat.scale.html index c1b6e68..56a47c7 100644 --- a/docs/functions/quat.scale.html +++ b/docs/functions/quat.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Multiplies a quaternion by a scalar. (same as mulScalar)

      + +

      Returns

      The scaled quaternion.

      Parameters

      • -
        v: Quat
        +
        v: Quat

        The quaternion.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      The scaled quaternion.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.set.html b/docs/functions/quat.set.html index 660cd89..e86e07c 100644 --- a/docs/functions/quat.set.html +++ b/docs/functions/quat.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Quat -Also see create and copy

      +Also see create and copy

      + +

      Returns

      A vector with its elements set.

      Parameters

      • -
        x: number
        +
        x: number

        first value

      • -
        y: number
        +
        y: number

        second value

      • -
        z: number
        +
        z: number

        third value

      • -
        w: number
        +
        w: number

        fourth value

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A vector with its elements set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.setDefaultType.html b/docs/functions/quat.setDefaultType.html index e6989e1..dd69059 100644 --- a/docs/functions/quat.setDefaultType.html +++ b/docs/functions/quat.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Quat4

      + +

      Returns

      previous constructor for Quat4

      Parameters

      • -
        ctor: (new (n) => Quat)
        +
        ctor: (new (n: number) => Quat)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Quat
          • +
              +
            • new (n: number): Quat
            • Parameters

              • -
                n: number
              -

              Returns Quat

      -

      Returns (new (n) => Quat)

      previous constructor for Quat4

      - +
      n: number
+

Returns Quat

+

Returns (new (n: number) => Quat)

  • -
      -
    • new (n): Quat
    • +
        +
      • new (n: number): Quat
      • Quat4 math functions.

        Almost all functions take an optional dst argument. If it is not passed in the functions will create a new Quat4. In other words you can do this

        const v = quat4.cross(v1, v2);  // Creates a new Quat4 with the cross product of v1 x v2.
        -
        +

        or

        const v = quat4.create();
        quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v -
        +

        The first style is often easier but depending on where it's used it generates garbage where as there is almost never allocation with the second style.

        It is always safe to pass any vector as the destination. So for example

        quat4.cross(v1, v2, v1);  // Puts the cross product of v1 x v2 in v1
        -
        +

        Parameters

        • -
          n: number
        -

        Returns Quat

-
- +

Returns Quat

+ - + - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.slerp.html b/docs/functions/quat.slerp.html index 6fc092e..f4fa377 100644 --- a/docs/functions/quat.slerp.html +++ b/docs/functions/quat.slerp.html @@ -1,4 +1,4 @@ -slerp | wgpu-matrix
+slerp | wgpu-matrix
-
+

Function slerp

-
    - +
      +
    • Spherically linear interpolate between two quaternions

      + +

      Returns

      A quaternion that is the result of a * b

      Parameters

      • -
        a: Quat
        +
        a: Quat

        starting value

      • -
        b: Quat
        +
        b: Quat

        ending value

      • -
        t: number
        +
        t: number

        value where 0 = a and 1 = b

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the result of a * b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.sqlerp.html b/docs/functions/quat.sqlerp.html index 623141b..96f4030 100644 --- a/docs/functions/quat.sqlerp.html +++ b/docs/functions/quat.sqlerp.html @@ -1,4 +1,4 @@ -sqlerp | wgpu-matrix
+sqlerp | wgpu-matrix
-
+

Function sqlerp

-
    - +
      +
    • Performs a spherical linear interpolation with two control points

      + +

      Returns

      result

      Parameters

      • -
        a: Quat
        +
        a: Quat

        the first quaternion

      • -
        b: Quat
        +
        b: Quat

        the second quaternion

      • -
        c: Quat
        +
        c: Quat

        the third quaternion

      • -
        d: Quat
        +
        d: Quat

        the fourth quaternion

      • -
        t: number
        +
        t: number

        Interpolation coefficient 0 to 1

      • -
        Optional dst: Quat
      -

      Returns Quat

      result

      -
-
- +

Returns Quat

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.sub.html b/docs/functions/quat.sub.html index e52967d..c0a8b58 100644 --- a/docs/functions/quat.sub.html +++ b/docs/functions/quat.sub.html @@ -1,4 +1,4 @@ -sub | wgpu-matrix
+sub | wgpu-matrix
-
+

Function sub

-
    - +
      +
    • Subtracts two quaternions.

      + +

      Returns

      A quaternion that is the difference of a and b.

      Parameters

      • -
        a: Quat
        +
        a: Quat

        Operand quaternion.

      • -
        b: Quat
        +
        b: Quat

        Operand quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.subtract.html b/docs/functions/quat.subtract.html index f84daff..81e7283 100644 --- a/docs/functions/quat.subtract.html +++ b/docs/functions/quat.subtract.html @@ -1,4 +1,4 @@ -subtract | wgpu-matrix
+subtract | wgpu-matrix
-
+

Function subtract

-
    - +
      +
    • Subtracts two quaternions.

      + +

      Returns

      A quaternion that is the difference of a and b.

      Parameters

      • -
        a: Quat
        +
        a: Quat

        Operand quaternion.

      • -
        b: Quat
        +
        b: Quat

        Operand quaternion.

      • -
        Optional dst: Quat
        +
        Optional dst: Quat

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

      -

      Returns Quat

      A quaternion that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/quat.toAxisAngle.html b/docs/functions/quat.toAxisAngle.html index 40e2371..2449c74 100644 --- a/docs/functions/quat.toAxisAngle.html +++ b/docs/functions/quat.toAxisAngle.html @@ -1,4 +1,4 @@ -toAxisAngle | wgpu-matrix
+toAxisAngle | wgpu-matrix
-
+

Function toAxisAngle

-
    - +
      +
    • Gets the rotation axis and angle

      + +

      Returns

      angle and axis

      Parameters

      • -
        q: Quat
        +
        q: Quat

        quaternion to compute from

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns {
          angle: number;
          axis: Vec3;
      }

      angle and axis

      - +

      Returns {
          angle: number;
          axis: Vec3;
      }

      • -
        angle: number
      • +
        angle: number
      • -
        axis: Vec3
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/setDefaultType.html b/docs/functions/setDefaultType.html index 1886708..8dc7812 100644 --- a/docs/functions/setDefaultType.html +++ b/docs/functions/setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for all types

      example:

      setDefaultType(Float64Array);
      -
      +

      Parameters

      • -
        ctor: (new (n) => Float32Array | Float64Array | number[])
        +
        ctor: (new (n: number) => Float32Array | Float64Array | number[])

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Float32Array | Float64Array | number[]
          • +
              +
            • new (n: number): Float32Array | Float64Array | number[]
            • Parameters

              • -
                n: number
              -

              Returns Float32Array | Float64Array | number[]

      +
      n: number
+

Returns Float32Array | Float64Array | number[]

Returns void

-
-
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.degToRad.html b/docs/functions/utils.degToRad.html index 6ad8bc0..96cc633 100644 --- a/docs/functions/utils.degToRad.html +++ b/docs/functions/utils.degToRad.html @@ -1,4 +1,4 @@ -degToRad | wgpu-matrix
+degToRad | wgpu-matrix
-
+

Function degToRad

-
    - +
      +
    • Convert degrees to radians

      + +

      Returns

      angle converted to radians

      Parameters

      • -
        degrees: number
        +
        degrees: number

        Angle in degrees

      -

      Returns number

      angle converted to radians

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.euclideanModulo.html b/docs/functions/utils.euclideanModulo.html index fe4504d..f7f9d50 100644 --- a/docs/functions/utils.euclideanModulo.html +++ b/docs/functions/utils.euclideanModulo.html @@ -1,4 +1,4 @@ -euclideanModulo | wgpu-matrix
+euclideanModulo | wgpu-matrix
-
+

Function euclideanModulo

-
    - +
      +
    • Compute the euclidean modulo

      // table for n / 3
      -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n
      ------------------------------------
      -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3
      1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3) -
      + + +

      Returns

      the euclidean modulo of n / m

      Parameters

      • -
        n: number
        +
        n: number

        dividend

      • -
        m: number
        +
        m: number

        divisor

      -

      Returns number

      the euclidean modulo of n / m

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.inverseLerp.html b/docs/functions/utils.inverseLerp.html index 6de93e0..9debbdb 100644 --- a/docs/functions/utils.inverseLerp.html +++ b/docs/functions/utils.inverseLerp.html @@ -1,4 +1,4 @@ -inverseLerp | wgpu-matrix
+inverseLerp | wgpu-matrix
-
+

Function inverseLerp

-
    - +
      +
    • Compute the opposite of lerp. Given a and b and a value between a and b returns a value between 0 and 1. 0 if a, 1 if b. Note: no clamping is done.

      + +

      Returns

      (v - a) / (b - a)

      Parameters

      • -
        a: number
        +
        a: number

        start value

      • -
        b: number
        +
        b: number

        end value

      • -
        v: number
        +
        v: number

        value between a and b

      -

      Returns number

      (v - a) / (b - a)

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.lerp.html b/docs/functions/utils.lerp.html index 16e8578..161429b 100644 --- a/docs/functions/utils.lerp.html +++ b/docs/functions/utils.lerp.html @@ -1,4 +1,4 @@ -lerp | wgpu-matrix
+lerp | wgpu-matrix
-
+

Function lerp

-
    - +
      +
    • Lerps between a and b via t

      + +

      Returns

      a + (b - a) * t

      Parameters

      • -
        a: number
        +
        a: number

        starting value

      • -
        b: number
        +
        b: number

        ending value

      • -
        t: number
        +
        t: number

        value where 0 = a and 1 = b

      -

      Returns number

      a + (b - a) * t

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.radToDeg.html b/docs/functions/utils.radToDeg.html index 485ac65..8e7e90b 100644 --- a/docs/functions/utils.radToDeg.html +++ b/docs/functions/utils.radToDeg.html @@ -1,4 +1,4 @@ -radToDeg | wgpu-matrix
+radToDeg | wgpu-matrix
-
+

Function radToDeg

-
    - +
      +
    • Convert radians to degrees

      + +

      Returns

      angle converted to degrees

      Parameters

      • -
        radians: number
        +
        radians: number

        Angle in radians

      -

      Returns number

      angle converted to degrees

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/utils.setEpsilon.html b/docs/functions/utils.setEpsilon.html index 6fb9a6a..964e812 100644 --- a/docs/functions/utils.setEpsilon.html +++ b/docs/functions/utils.setEpsilon.html @@ -1,4 +1,4 @@ -setEpsilon | wgpu-matrix
+setEpsilon | wgpu-matrix
-
+

Function setEpsilon

-
    - +
      +
    • Set the value for EPSILON for various checks

      + +

      Returns

      previous value of EPSILON;

      Parameters

      • -
        v: number
        +
        v: number

        Value to use for EPSILON.

      -

      Returns number

      previous value of EPSILON;

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.add.html b/docs/functions/vec2.add.html index 5251107..c1c15ed 100644 --- a/docs/functions/vec2.add.html +++ b/docs/functions/vec2.add.html @@ -1,4 +1,4 @@ -add | wgpu-matrix
+add | wgpu-matrix
-
+

Function add

-
    - +
      +
    • Adds two vectors; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the sum of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.addScaled.html b/docs/functions/vec2.addScaled.html index 5de5f62..991780f 100644 --- a/docs/functions/vec2.addScaled.html +++ b/docs/functions/vec2.addScaled.html @@ -1,4 +1,4 @@ -addScaled | wgpu-matrix
+addScaled | wgpu-matrix
-
+

Function addScaled

-
    - +
      +
    • Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a + b * scale.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        scale: number
        +
        scale: number

        Amount to scale b

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the sum of a + b * scale.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.angle.html b/docs/functions/vec2.angle.html index 5c8b32c..9bde391 100644 --- a/docs/functions/vec2.angle.html +++ b/docs/functions/vec2.angle.html @@ -1,4 +1,4 @@ -angle | wgpu-matrix
+angle | wgpu-matrix
-
+

Function angle

-
    - +
      +
    • Returns the angle in radians between two vectors.

      + +

      Returns

      The angle in radians between the 2 vectors.

      Parameters

      -

      Returns number

      The angle in radians between the 2 vectors.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.ceil.html b/docs/functions/vec2.ceil.html index 3e49fbe..989c13b 100644 --- a/docs/functions/vec2.ceil.html +++ b/docs/functions/vec2.ceil.html @@ -1,4 +1,4 @@ -ceil | wgpu-matrix
+ceil | wgpu-matrix
-
+

Function ceil

-
    - +
      +
    • Applies Math.ceil to each element of vector

      + +

      Returns

      A vector that is the ceil of each element of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the ceil of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.clamp.html b/docs/functions/vec2.clamp.html index b7df381..460a4c0 100644 --- a/docs/functions/vec2.clamp.html +++ b/docs/functions/vec2.clamp.html @@ -1,4 +1,4 @@ -clamp | wgpu-matrix
+clamp | wgpu-matrix
-
+

Function clamp

-
    - +
      +
    • Clamp each element of vector between min and max

      + +

      Returns

      A vector that the clamped value of each element of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        Operand vector.

      • -
        min: number = 0
        +
        min: number = 0

        Max value, default 1

      • -
        max: number = 1
        +
        max: number = 1

        Min value, default 0

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that the clamped value of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.clone.html b/docs/functions/vec2.clone.html index fa5224c..295c39a 100644 --- a/docs/functions/vec2.clone.html +++ b/docs/functions/vec2.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Clones a vector. (same as copy) -Also see create and set

      +

      Clones a vector. (same as copy) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.copy.html b/docs/functions/vec2.copy.html index 8cb742c..57b8c00 100644 --- a/docs/functions/vec2.copy.html +++ b/docs/functions/vec2.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a vector. (same as clone) -Also see create and set

      +

      Copies a vector. (same as clone) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.create.html b/docs/functions/vec2.create.html index d0d90ea..18318b7 100644 --- a/docs/functions/vec2.create.html +++ b/docs/functions/vec2.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Creates a Vec2; may be called with x, y, z to set initial values.

      Note: Since passing in a raw JavaScript array @@ -26,33 +26,33 @@

      Function create

      force a JavaScript array into a Vec2's specified type it would be faster to use

      const v = vec2.clone(someJSArray);
      -
      +

      Note: a consequence of the implementation is if your Vec2Type = Array instead of Float32Array or Float64Array then any values you don't pass in will be undefined. Usually this is not an issue since (a) using Array is rare and (b) using vec2.create is usually used to create a Vec2 to be filled out as in

      const sum = vec2.create();
      vec2.add(v1, v2, sum); -
      + + +

      Returns

      the created vector

Parameters

  • -
    x: number = 0
    +
    x: number = 0

    Initial x value.

  • -
    y: number = 0
    +
    y: number = 0

    Initial y value.

-

Returns Vec2

the created vector

-
-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.cross.html b/docs/functions/vec2.cross.html index 9b51a55..b8d95fc 100644 --- a/docs/functions/vec2.cross.html +++ b/docs/functions/vec2.cross.html @@ -1,4 +1,4 @@ -cross | wgpu-matrix
+cross | wgpu-matrix
-
+

Function cross

-
    - +
      +
    • Computes the cross product of two vectors; assumes both vectors have three entries.

      + +

      Returns

      The vector of a cross b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The vector of a cross b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.dist.html b/docs/functions/vec2.dist.html index 7679bb4..9f6e72d 100644 --- a/docs/functions/vec2.dist.html +++ b/docs/functions/vec2.dist.html @@ -1,4 +1,4 @@ -dist | wgpu-matrix
+dist | wgpu-matrix
-
+

Function dist

-
    - +
      +
    • Computes the distance between 2 points (same as distance)

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.distSq.html b/docs/functions/vec2.distSq.html index a3b2ee7..9a41d04 100644 --- a/docs/functions/vec2.distSq.html +++ b/docs/functions/vec2.distSq.html @@ -1,4 +1,4 @@ -distSq | wgpu-matrix
+distSq | wgpu-matrix
-
+

Function distSq

-
    - +
      +
    • Computes the square of the distance between 2 points (same as distanceSq)

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.distance.html b/docs/functions/vec2.distance.html index 7e26126..cde32ea 100644 --- a/docs/functions/vec2.distance.html +++ b/docs/functions/vec2.distance.html @@ -1,4 +1,4 @@ -distance | wgpu-matrix
+distance | wgpu-matrix
-
+

Function distance

-
    - +
      +
    • Computes the distance between 2 points

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.distanceSq.html b/docs/functions/vec2.distanceSq.html index 4ca307f..82e6bcf 100644 --- a/docs/functions/vec2.distanceSq.html +++ b/docs/functions/vec2.distanceSq.html @@ -1,4 +1,4 @@ -distanceSq | wgpu-matrix
+distanceSq | wgpu-matrix
-
+

Function distanceSq

-
    - +
      +
    • Computes the square of the distance between 2 points

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.div.html b/docs/functions/vec2.div.html index 3e1c29f..b593f72 100644 --- a/docs/functions/vec2.div.html +++ b/docs/functions/vec2.div.html @@ -1,4 +1,4 @@ -div | wgpu-matrix
+div | wgpu-matrix
-
+

Function div

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length. (same as divide)

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.divScalar.html b/docs/functions/vec2.divScalar.html index 7647e26..a9e8b32 100644 --- a/docs/functions/vec2.divScalar.html +++ b/docs/functions/vec2.divScalar.html @@ -1,4 +1,4 @@ -divScalar | wgpu-matrix
+divScalar | wgpu-matrix
-
+

Function divScalar

-
    - +
      +
    • Divides a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.divide.html b/docs/functions/vec2.divide.html index de80a1a..fd5e9d1 100644 --- a/docs/functions/vec2.divide.html +++ b/docs/functions/vec2.divide.html @@ -1,4 +1,4 @@ -divide | wgpu-matrix
+divide | wgpu-matrix
-
+

Function divide

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.dot.html b/docs/functions/vec2.dot.html index a0a1993..608e735 100644 --- a/docs/functions/vec2.dot.html +++ b/docs/functions/vec2.dot.html @@ -1,4 +1,4 @@ -dot | wgpu-matrix
+dot | wgpu-matrix
-
+

Function dot

-
    - +
      +
    • Computes the dot product of two vectors; assumes both vectors have three entries.

      + +

      Returns

      dot product

      Parameters

      -

      Returns number

      dot product

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.equals.html b/docs/functions/vec2.equals.html index 0ec6898..445e15d 100644 --- a/docs/functions/vec2.equals.html +++ b/docs/functions/vec2.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 vectors are exactly equal

      + +

      Returns

      true if vectors are exactly equal

      Parameters

      -

      Returns boolean

      true if vectors are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.equalsApproximately.html b/docs/functions/vec2.equalsApproximately.html index a1b0c67..e927a19 100644 --- a/docs/functions/vec2.equalsApproximately.html +++ b/docs/functions/vec2.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 vectors are approximately equal

      + +

      Returns

      true if vectors are approximately equal

      Parameters

      -

      Returns boolean

      true if vectors are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.floor.html b/docs/functions/vec2.floor.html index b5e99f5..8ef5052 100644 --- a/docs/functions/vec2.floor.html +++ b/docs/functions/vec2.floor.html @@ -1,4 +1,4 @@ -floor | wgpu-matrix
+floor | wgpu-matrix
-
+

Function floor

-
    - +
      +
    • Applies Math.floor to each element of vector

      + +

      Returns

      A vector that is the floor of each element of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the floor of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.fromValues.html b/docs/functions/vec2.fromValues.html index 531a28c..0917428 100644 --- a/docs/functions/vec2.fromValues.html +++ b/docs/functions/vec2.fromValues.html @@ -1,4 +1,4 @@ -fromValues | wgpu-matrix
+fromValues | wgpu-matrix
-
+

Function fromValues

-
    - +
      +
    • Creates a Vec2; may be called with x, y, z to set initial values. (same as create)

      + +

      Returns

      the created vector

      Parameters

      • -
        x: number = 0
        +
        x: number = 0

        Initial x value.

      • -
        y: number = 0
        +
        y: number = 0

        Initial y value.

      -

      Returns Vec2

      the created vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.inverse.html b/docs/functions/vec2.inverse.html index 34780e2..1aa42d8 100644 --- a/docs/functions/vec2.inverse.html +++ b/docs/functions/vec2.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Inverse a vector.

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.invert.html b/docs/functions/vec2.invert.html index 498d53b..441a1c8 100644 --- a/docs/functions/vec2.invert.html +++ b/docs/functions/vec2.invert.html @@ -1,4 +1,4 @@ -invert | wgpu-matrix
+invert | wgpu-matrix
-
+

Function invert

-
    - +
      +
    • Invert a vector. (same as inverse)

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.len.html b/docs/functions/vec2.len.html index 7025c25..dfd7780 100644 --- a/docs/functions/vec2.len.html +++ b/docs/functions/vec2.len.html @@ -1,4 +1,4 @@ -len | wgpu-matrix
+len | wgpu-matrix
-
+

Function len

-
    - +
      +
    • Computes the length of vector (same as length)

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.lenSq.html b/docs/functions/vec2.lenSq.html index 19422a1..2f34ebe 100644 --- a/docs/functions/vec2.lenSq.html +++ b/docs/functions/vec2.lenSq.html @@ -1,4 +1,4 @@ -lenSq | wgpu-matrix
+lenSq | wgpu-matrix
-
+

Function lenSq

-
    - +
      +
    • Computes the square of the length of vector (same as lengthSq)

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.length.html b/docs/functions/vec2.length.html index 7d8a587..263a342 100644 --- a/docs/functions/vec2.length.html +++ b/docs/functions/vec2.length.html @@ -1,4 +1,4 @@ -length | wgpu-matrix
+length | wgpu-matrix
-
+

Function length

-
    - +
      +
    • Computes the length of vector

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.lengthSq.html b/docs/functions/vec2.lengthSq.html index 876c78b..09f0679 100644 --- a/docs/functions/vec2.lengthSq.html +++ b/docs/functions/vec2.lengthSq.html @@ -1,4 +1,4 @@ -lengthSq | wgpu-matrix
+lengthSq | wgpu-matrix
-
+

Function lengthSq

-
    - +
      +
    • Computes the square of the length of vector

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.lerp.html b/docs/functions/vec2.lerp.html index c5d823e..8277442 100644 --- a/docs/functions/vec2.lerp.html +++ b/docs/functions/vec2.lerp.html @@ -1,4 +1,4 @@ -lerp | wgpu-matrix
+lerp | wgpu-matrix
-
+

Function lerp

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient t, returns a + t * (b - a).

      + +

      Returns

      The linear interpolated result.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        t: number
        +
        t: number

        Interpolation coefficient.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.lerpV.html b/docs/functions/vec2.lerpV.html index 8c26d3f..df27d3a 100644 --- a/docs/functions/vec2.lerpV.html +++ b/docs/functions/vec2.lerpV.html @@ -1,4 +1,4 @@ -lerpV | wgpu-matrix
+lerpV | wgpu-matrix
-
+

Function lerpV

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient vector t, returns a + t * (b - a).

      + +

      Returns

      the linear interpolated result.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        t: Vec2
        +
        t: Vec2

        Interpolation coefficients vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      the linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.max.html b/docs/functions/vec2.max.html index 0265924..47f4a56 100644 --- a/docs/functions/vec2.max.html +++ b/docs/functions/vec2.max.html @@ -1,4 +1,4 @@ -max | wgpu-matrix
+max | wgpu-matrix
-
+

Function max

-
    - +
      +
    • Return max values of two vectors. Given vectors a and b returns [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].

      + +

      Returns

      The max components vector.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The max components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.min.html b/docs/functions/vec2.min.html index 819a1e9..f5514c0 100644 --- a/docs/functions/vec2.min.html +++ b/docs/functions/vec2.min.html @@ -1,4 +1,4 @@ -min | wgpu-matrix
+min | wgpu-matrix
-
+

Function min

-
    - +
      +
    • Return min values of two vectors. Given vectors a and b returns [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].

      + +

      Returns

      The min components vector.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The min components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.mul.html b/docs/functions/vec2.mul.html index fc0b8d5..41e0ef1 100644 --- a/docs/functions/vec2.mul.html +++ b/docs/functions/vec2.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length. (same as mul)

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.mulScalar.html b/docs/functions/vec2.mulScalar.html index 05b34e2..773aed4 100644 --- a/docs/functions/vec2.mulScalar.html +++ b/docs/functions/vec2.mulScalar.html @@ -1,4 +1,4 @@ -mulScalar | wgpu-matrix
+mulScalar | wgpu-matrix
-
+

Function mulScalar

-
    - +
      +
    • Multiplies a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.multiply.html b/docs/functions/vec2.multiply.html index 948960b..1dc4738 100644 --- a/docs/functions/vec2.multiply.html +++ b/docs/functions/vec2.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.negate.html b/docs/functions/vec2.negate.html index cd7a066..768345a 100644 --- a/docs/functions/vec2.negate.html +++ b/docs/functions/vec2.negate.html @@ -1,4 +1,4 @@ -negate | wgpu-matrix
+negate | wgpu-matrix
-
+

Function negate

-
    - +
      +
    • Negates a vector.

      + +

      Returns

      -v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      -v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.normalize.html b/docs/functions/vec2.normalize.html index a3bb2c2..166d533 100644 --- a/docs/functions/vec2.normalize.html +++ b/docs/functions/vec2.normalize.html @@ -1,4 +1,4 @@ -normalize | wgpu-matrix
+normalize | wgpu-matrix
-
+

Function normalize

-
    - +
      +
    • Divides a vector by its Euclidean length and returns the quotient.

      + +

      Returns

      The normalized vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The normalized vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.random.html b/docs/functions/vec2.random.html index b6c6529..762d229 100644 --- a/docs/functions/vec2.random.html +++ b/docs/functions/vec2.random.html @@ -1,4 +1,4 @@ -random | wgpu-matrix
+random | wgpu-matrix
-
+

Function random

-
    - +
      +
    • Creates a random unit vector * scale

      + +

      Returns

      The random vector.

      Parameters

      • -
        scale: number = 1
        +
        scale: number = 1

        Default 1

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The random vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.round.html b/docs/functions/vec2.round.html index b94ee88..ff980e9 100644 --- a/docs/functions/vec2.round.html +++ b/docs/functions/vec2.round.html @@ -1,4 +1,4 @@ -round | wgpu-matrix
+round | wgpu-matrix
-
+

Function round

-
    - +
      +
    • Applies Math.round to each element of vector

      + +

      Returns

      A vector that is the round of each element of v.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the round of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.scale.html b/docs/functions/vec2.scale.html index 4100123..7c1b1d2 100644 --- a/docs/functions/vec2.scale.html +++ b/docs/functions/vec2.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Multiplies a vector by a scalar. (same as mulScalar)

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.set.html b/docs/functions/vec2.set.html index b7c834e..4c5c786 100644 --- a/docs/functions/vec2.set.html +++ b/docs/functions/vec2.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Vec2 -Also see create and copy

      +Also see create and copy

      + +

      Returns

      A vector with its elements set.

      Parameters

      • -
        x: number
        +
        x: number

        first value

      • -
        y: number
        +
        y: number

        second value

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector with its elements set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.setDefaultType.html b/docs/functions/vec2.setDefaultType.html index 2faafca..b6df841 100644 --- a/docs/functions/vec2.setDefaultType.html +++ b/docs/functions/vec2.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Vec2

      + +

      Returns

      previous constructor for Vec2

      Parameters

      • -
        ctor: (new (n) => Vec2)
        +
        ctor: (new (n: number) => Vec2)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Vec2
          • +
              +
            • new (n: number): Vec2
            • Parameters

              • -
                n: number
              -

              Returns Vec2

      -

      Returns (new (n) => Vec2)

      previous constructor for Vec2

      - +
      n: number
+

Returns Vec2

+

Returns (new (n: number) => Vec2)

  • -
      -
    • new (n): Vec2
    • +
        +
      • new (n: number): Vec2
      • Vec2 math functions.

        Almost all functions take an optional dst argument. If it is not passed in the functions will create a new Vec2. In other words you can do this

        const v = vec2.cross(v1, v2);  // Creates a new Vec2 with the cross product of v1 x v2.
        -
        +

        or

        const v = vec2.create();
        vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v -
        +

        The first style is often easier but depending on where it's used it generates garbage where as there is almost never allocation with the second style.

        It is always safe to pass any vector as the destination. So for example

        vec2.cross(v1, v2, v1);  // Puts the cross product of v1 x v2 in v1
        -
        +

        Parameters

        • -
          n: number
        -

        Returns Vec2

-
- +

Returns Vec2

+ - + - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.sub.html b/docs/functions/vec2.sub.html index a327463..5f928eb 100644 --- a/docs/functions/vec2.sub.html +++ b/docs/functions/vec2.sub.html @@ -1,4 +1,4 @@ -sub | wgpu-matrix
+sub | wgpu-matrix
-
+

Function sub

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.subtract.html b/docs/functions/vec2.subtract.html index 53a65bb..cea10b3 100644 --- a/docs/functions/vec2.subtract.html +++ b/docs/functions/vec2.subtract.html @@ -1,4 +1,4 @@ -subtract | wgpu-matrix
+subtract | wgpu-matrix
-
+

Function subtract

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec2
        +
        a: Vec2

        Operand vector.

      • -
        b: Vec2
        +
        b: Vec2

        Operand vector.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.transformMat3.html b/docs/functions/vec2.transformMat3.html index e802b30..e0cf0e4 100644 --- a/docs/functions/vec2.transformMat3.html +++ b/docs/functions/vec2.transformMat3.html @@ -1,4 +1,4 @@ -transformMat3 | wgpu-matrix
+transformMat3 | wgpu-matrix
-
+

Function transformMat3

-
    - +
      +
    • Transforms vec4 by 3x3 matrix

      + +

      Returns

      the transformed vector

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        the vector

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

        optional Vec2 to store result. If not passed a new one is created.

      -

      Returns Vec2

      the transformed vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.transformMat4.html b/docs/functions/vec2.transformMat4.html index 460d41d..a36cad1 100644 --- a/docs/functions/vec2.transformMat4.html +++ b/docs/functions/vec2.transformMat4.html @@ -1,4 +1,4 @@ -transformMat4 | wgpu-matrix
+transformMat4 | wgpu-matrix
-
+

Function transformMat4

-
    - +
      +
    • transform Vec2 by 4x4 matrix

      + +

      Returns

      the transformed vector

      Parameters

      • -
        v: Vec2
        +
        v: Vec2

        the vector

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

        optional Vec2 to store result. If not passed a new one is created.

      -

      Returns Vec2

      the transformed vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec2.zero.html b/docs/functions/vec2.zero.html index 39297b7..99afaef 100644 --- a/docs/functions/vec2.zero.html +++ b/docs/functions/vec2.zero.html @@ -1,4 +1,4 @@ -zero | wgpu-matrix
+zero | wgpu-matrix
-
+

Function zero

-
    - +
      +
    • Zero's a vector

      + +

      Returns

      The zeroed vector.

      Parameters

      • -
        Optional dst: Vec2
        +
        Optional dst: Vec2

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

      -

      Returns Vec2

      The zeroed vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.add.html b/docs/functions/vec3.add.html index d53e89a..228d64c 100644 --- a/docs/functions/vec3.add.html +++ b/docs/functions/vec3.add.html @@ -1,4 +1,4 @@ -add | wgpu-matrix
+add | wgpu-matrix
-
+

Function add

-
    - +
      +
    • Adds two vectors; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the sum of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.addScaled.html b/docs/functions/vec3.addScaled.html index 6c28b99..44fa577 100644 --- a/docs/functions/vec3.addScaled.html +++ b/docs/functions/vec3.addScaled.html @@ -1,4 +1,4 @@ -addScaled | wgpu-matrix
+addScaled | wgpu-matrix
-
+

Function addScaled

-
    - +
      +
    • Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a + b * scale.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        scale: number
        +
        scale: number

        Amount to scale b

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the sum of a + b * scale.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.angle.html b/docs/functions/vec3.angle.html index 0bc1c19..fbfffce 100644 --- a/docs/functions/vec3.angle.html +++ b/docs/functions/vec3.angle.html @@ -1,4 +1,4 @@ -angle | wgpu-matrix
+angle | wgpu-matrix
-
+

Function angle

-
    - +
      +
    • Returns the angle in radians between two vectors.

      + +

      Returns

      The angle in radians between the 2 vectors.

      Parameters

      -

      Returns number

      The angle in radians between the 2 vectors.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.ceil.html b/docs/functions/vec3.ceil.html index 5ffdafa..0906e3a 100644 --- a/docs/functions/vec3.ceil.html +++ b/docs/functions/vec3.ceil.html @@ -1,4 +1,4 @@ -ceil | wgpu-matrix
+ceil | wgpu-matrix
-
+

Function ceil

-
    - +
      +
    • Applies Math.ceil to each element of vector

      + +

      Returns

      A vector that is the ceil of each element of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the ceil of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.clamp.html b/docs/functions/vec3.clamp.html index 38189bc..18c2462 100644 --- a/docs/functions/vec3.clamp.html +++ b/docs/functions/vec3.clamp.html @@ -1,4 +1,4 @@ -clamp | wgpu-matrix
+clamp | wgpu-matrix
-
+

Function clamp

-
    - +
      +
    • Clamp each element of vector between min and max

      + +

      Returns

      A vector that the clamped value of each element of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        Operand vector.

      • -
        min: number = 0
        +
        min: number = 0

        Max value, default 1

      • -
        max: number = 1
        +
        max: number = 1

        Min value, default 0

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that the clamped value of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.clone.html b/docs/functions/vec3.clone.html index 8a8d1b5..8333c8c 100644 --- a/docs/functions/vec3.clone.html +++ b/docs/functions/vec3.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Clones a vector. (same as copy) -Also see create and set

      +

      Clones a vector. (same as copy) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.copy.html b/docs/functions/vec3.copy.html index 1b52af1..16f85be 100644 --- a/docs/functions/vec3.copy.html +++ b/docs/functions/vec3.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a vector. (same as clone) -Also see create and set

      +

      Copies a vector. (same as clone) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.create.html b/docs/functions/vec3.create.html index a2b4cde..5f1eda4 100644 --- a/docs/functions/vec3.create.html +++ b/docs/functions/vec3.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Creates a vec3; may be called with x, y, z to set initial values.

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      -

      Returns Vec3

      the created vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.cross.html b/docs/functions/vec3.cross.html index 46fd3bc..9c3126b 100644 --- a/docs/functions/vec3.cross.html +++ b/docs/functions/vec3.cross.html @@ -1,4 +1,4 @@ -cross | wgpu-matrix
+cross | wgpu-matrix
-
+

Function cross

-
    - +
      +
    • Computes the cross product of two vectors; assumes both vectors have three entries.

      + +

      Returns

      The vector of a cross b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The vector of a cross b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.dist.html b/docs/functions/vec3.dist.html index f345a29..4d0bc98 100644 --- a/docs/functions/vec3.dist.html +++ b/docs/functions/vec3.dist.html @@ -1,4 +1,4 @@ -dist | wgpu-matrix
+dist | wgpu-matrix
-
+

Function dist

-
    - +
      +
    • Computes the distance between 2 points (same as distance)

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.distSq.html b/docs/functions/vec3.distSq.html index b2ff520..5fce341 100644 --- a/docs/functions/vec3.distSq.html +++ b/docs/functions/vec3.distSq.html @@ -1,4 +1,4 @@ -distSq | wgpu-matrix
+distSq | wgpu-matrix
-
+

Function distSq

-
    - +
      +
    • Computes the square of the distance between 2 points (same as distanceSq)

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.distance.html b/docs/functions/vec3.distance.html index eaa5030..adfb322 100644 --- a/docs/functions/vec3.distance.html +++ b/docs/functions/vec3.distance.html @@ -1,4 +1,4 @@ -distance | wgpu-matrix
+distance | wgpu-matrix
-
+

Function distance

-
    - +
      +
    • Computes the distance between 2 points

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.distanceSq.html b/docs/functions/vec3.distanceSq.html index dfdeb5b..2ea3be0 100644 --- a/docs/functions/vec3.distanceSq.html +++ b/docs/functions/vec3.distanceSq.html @@ -1,4 +1,4 @@ -distanceSq | wgpu-matrix
+distanceSq | wgpu-matrix
-
+

Function distanceSq

-
    - +
      +
    • Computes the square of the distance between 2 points

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.div.html b/docs/functions/vec3.div.html index 6c1b391..0326dbe 100644 --- a/docs/functions/vec3.div.html +++ b/docs/functions/vec3.div.html @@ -1,4 +1,4 @@ -div | wgpu-matrix
+div | wgpu-matrix
-
+

Function div

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length. (same as divide)

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.divScalar.html b/docs/functions/vec3.divScalar.html index 9507af1..0ba2d4c 100644 --- a/docs/functions/vec3.divScalar.html +++ b/docs/functions/vec3.divScalar.html @@ -1,4 +1,4 @@ -divScalar | wgpu-matrix
+divScalar | wgpu-matrix
-
+

Function divScalar

-
    - +
      +
    • Divides a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.divide.html b/docs/functions/vec3.divide.html index e68ba0f..5a091cc 100644 --- a/docs/functions/vec3.divide.html +++ b/docs/functions/vec3.divide.html @@ -1,4 +1,4 @@ -divide | wgpu-matrix
+divide | wgpu-matrix
-
+

Function divide

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.dot.html b/docs/functions/vec3.dot.html index 4b2c55b..6010f81 100644 --- a/docs/functions/vec3.dot.html +++ b/docs/functions/vec3.dot.html @@ -1,4 +1,4 @@ -dot | wgpu-matrix
+dot | wgpu-matrix
-
+

Function dot

-
    - +
      +
    • Computes the dot product of two vectors; assumes both vectors have three entries.

      + +

      Returns

      dot product

      Parameters

      -

      Returns number

      dot product

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.equals.html b/docs/functions/vec3.equals.html index 747512d..c22b967 100644 --- a/docs/functions/vec3.equals.html +++ b/docs/functions/vec3.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 vectors are exactly equal

      + +

      Returns

      true if vectors are exactly equal

      Parameters

      -

      Returns boolean

      true if vectors are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.equalsApproximately.html b/docs/functions/vec3.equalsApproximately.html index 5902c9e..7fde7b2 100644 --- a/docs/functions/vec3.equalsApproximately.html +++ b/docs/functions/vec3.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 vectors are approximately equal

      + +

      Returns

      true if vectors are approximately equal

      Parameters

      -

      Returns boolean

      true if vectors are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.floor.html b/docs/functions/vec3.floor.html index 4e578ec..a444433 100644 --- a/docs/functions/vec3.floor.html +++ b/docs/functions/vec3.floor.html @@ -1,4 +1,4 @@ -floor | wgpu-matrix
+floor | wgpu-matrix
-
+

Function floor

-
    - +
      +
    • Applies Math.floor to each element of vector

      + +

      Returns

      A vector that is the floor of each element of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the floor of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.fromValues.html b/docs/functions/vec3.fromValues.html index fb3eac9..81d5d06 100644 --- a/docs/functions/vec3.fromValues.html +++ b/docs/functions/vec3.fromValues.html @@ -1,4 +1,4 @@ -fromValues | wgpu-matrix
+fromValues | wgpu-matrix
-
+

Function fromValues

-
    - +
      +
    • Creates a vec3; may be called with x, y, z to set initial values. (same as create)

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      -

      Returns Vec3

      the created vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.getAxis.html b/docs/functions/vec3.getAxis.html index 2a6d7c2..09d9779 100644 --- a/docs/functions/vec3.getAxis.html +++ b/docs/functions/vec3.getAxis.html @@ -1,4 +1,4 @@ -getAxis | wgpu-matrix
+getAxis | wgpu-matrix
-
+

Function getAxis

-
    - +
      +
    • Returns an axis of a 4x4 matrix as a vector with 3 entries

      + +

      Returns

      The axis component of m.

      Parameters

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        axis: number
        +
        axis: number

        The axis 0 = x, 1 = y, 2 = z;

      • -
        Optional dst: Vec3
      -

      Returns Vec3

      The axis component of m.

      -
-
- +

Returns Vec3

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.getScaling.html b/docs/functions/vec3.getScaling.html index 1254b09..d2f8063 100644 --- a/docs/functions/vec3.getScaling.html +++ b/docs/functions/vec3.getScaling.html @@ -1,4 +1,4 @@ -getScaling | wgpu-matrix
+getScaling | wgpu-matrix
-
+

Function getScaling

-
    - +
      +
    • Returns the scaling component of the matrix

      @@ -26,19 +26,18 @@

      Function getScaling

Parameters

  • -
    m: Mat4
    +
    m: Mat4

    The Matrix

  • -
    dst: Vec3
    +
    dst: Vec3

    The vector to set. If not passed a new one is created.

-

Returns Vec3

-
- + -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.getTranslation.html b/docs/functions/vec3.getTranslation.html index 22586b2..b9bb177 100644 --- a/docs/functions/vec3.getTranslation.html +++ b/docs/functions/vec3.getTranslation.html @@ -1,4 +1,4 @@ -getTranslation | wgpu-matrix
+getTranslation | wgpu-matrix
-
+

Function getTranslation

-
    - +
      +
    • Returns the translation component of a 4-by-4 matrix as a vector with 3 entries.

      + +

      Returns

      The translation component of m.

      Parameters

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The translation component of m.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.inverse.html b/docs/functions/vec3.inverse.html index 93c0637..920ddad 100644 --- a/docs/functions/vec3.inverse.html +++ b/docs/functions/vec3.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Inverse a vector.

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.invert.html b/docs/functions/vec3.invert.html index c0b9c86..c1ac437 100644 --- a/docs/functions/vec3.invert.html +++ b/docs/functions/vec3.invert.html @@ -1,4 +1,4 @@ -invert | wgpu-matrix
+invert | wgpu-matrix
-
+

Function invert

-
    - +
      +
    • Invert a vector. (same as inverse)

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.len.html b/docs/functions/vec3.len.html index 1fef31f..1d5fcf3 100644 --- a/docs/functions/vec3.len.html +++ b/docs/functions/vec3.len.html @@ -1,4 +1,4 @@ -len | wgpu-matrix
+len | wgpu-matrix
-
+

Function len

-
    - +
      +
    • Computes the length of vector (same as length)

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.lenSq.html b/docs/functions/vec3.lenSq.html index f406018..a31f13a 100644 --- a/docs/functions/vec3.lenSq.html +++ b/docs/functions/vec3.lenSq.html @@ -1,4 +1,4 @@ -lenSq | wgpu-matrix
+lenSq | wgpu-matrix
-
+

Function lenSq

-
    - +
      +
    • Computes the square of the length of vector (same as lengthSq)

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.length.html b/docs/functions/vec3.length.html index 57506ea..9a3432b 100644 --- a/docs/functions/vec3.length.html +++ b/docs/functions/vec3.length.html @@ -1,4 +1,4 @@ -length | wgpu-matrix
+length | wgpu-matrix
-
+

Function length

-
    - +
      +
    • Computes the length of vector

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.lengthSq.html b/docs/functions/vec3.lengthSq.html index 8d75ae1..6e0a254 100644 --- a/docs/functions/vec3.lengthSq.html +++ b/docs/functions/vec3.lengthSq.html @@ -1,4 +1,4 @@ -lengthSq | wgpu-matrix
+lengthSq | wgpu-matrix
-
+

Function lengthSq

-
    - +
      +
    • Computes the square of the length of vector

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.lerp.html b/docs/functions/vec3.lerp.html index 6c14cd2..06f42c0 100644 --- a/docs/functions/vec3.lerp.html +++ b/docs/functions/vec3.lerp.html @@ -1,4 +1,4 @@ -lerp | wgpu-matrix
+lerp | wgpu-matrix
-
+

Function lerp

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient t, returns a + t * (b - a).

      + +

      Returns

      The linear interpolated result.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        t: number
        +
        t: number

        Interpolation coefficient.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.lerpV.html b/docs/functions/vec3.lerpV.html index b80a861..b37c083 100644 --- a/docs/functions/vec3.lerpV.html +++ b/docs/functions/vec3.lerpV.html @@ -1,4 +1,4 @@ -lerpV | wgpu-matrix
+lerpV | wgpu-matrix
-
+

Function lerpV

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient vector t, returns a + t * (b - a).

      + +

      Returns

      the linear interpolated result.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        t: Vec3
        +
        t: Vec3

        Interpolation coefficients vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      the linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.max.html b/docs/functions/vec3.max.html index 880c41e..5f76c63 100644 --- a/docs/functions/vec3.max.html +++ b/docs/functions/vec3.max.html @@ -1,4 +1,4 @@ -max | wgpu-matrix
+max | wgpu-matrix
-
+

Function max

-
    - +
      +
    • Return max values of two vectors. Given vectors a and b returns [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].

      + +

      Returns

      The max components vector.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The max components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.min.html b/docs/functions/vec3.min.html index f8977f3..7b0cab9 100644 --- a/docs/functions/vec3.min.html +++ b/docs/functions/vec3.min.html @@ -1,4 +1,4 @@ -min | wgpu-matrix
+min | wgpu-matrix
-
+

Function min

-
    - +
      +
    • Return min values of two vectors. Given vectors a and b returns [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].

      + +

      Returns

      The min components vector.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The min components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.mul.html b/docs/functions/vec3.mul.html index c4857c7..df84778 100644 --- a/docs/functions/vec3.mul.html +++ b/docs/functions/vec3.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length. (same as mul)

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.mulScalar.html b/docs/functions/vec3.mulScalar.html index 9f49271..d8cba7c 100644 --- a/docs/functions/vec3.mulScalar.html +++ b/docs/functions/vec3.mulScalar.html @@ -1,4 +1,4 @@ -mulScalar | wgpu-matrix
+mulScalar | wgpu-matrix
-
+

Function mulScalar

-
    - +
      +
    • Multiplies a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.multiply.html b/docs/functions/vec3.multiply.html index f1fecfa..df81999 100644 --- a/docs/functions/vec3.multiply.html +++ b/docs/functions/vec3.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.negate.html b/docs/functions/vec3.negate.html index 0b2ce6c..d2a0aad 100644 --- a/docs/functions/vec3.negate.html +++ b/docs/functions/vec3.negate.html @@ -1,4 +1,4 @@ -negate | wgpu-matrix
+negate | wgpu-matrix
-
+

Function negate

-
    - +
      +
    • Negates a vector.

      + +

      Returns

      -v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      -v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.normalize.html b/docs/functions/vec3.normalize.html index d7bc282..a6de142 100644 --- a/docs/functions/vec3.normalize.html +++ b/docs/functions/vec3.normalize.html @@ -1,4 +1,4 @@ -normalize | wgpu-matrix
+normalize | wgpu-matrix
-
+

Function normalize

-
    - +
      +
    • Divides a vector by its Euclidean length and returns the quotient.

      + +

      Returns

      The normalized vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The normalized vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.random.html b/docs/functions/vec3.random.html index 1c27c7b..f60661d 100644 --- a/docs/functions/vec3.random.html +++ b/docs/functions/vec3.random.html @@ -1,4 +1,4 @@ -random | wgpu-matrix
+random | wgpu-matrix
-
+

Function random

-
    - +
      +
    • Creates a random vector

      + +

      Returns

      The random vector.

      Parameters

      • -
        scale: number = 1
        +
        scale: number = 1

        Default 1

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The random vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.round.html b/docs/functions/vec3.round.html index be91f2e..52b16f2 100644 --- a/docs/functions/vec3.round.html +++ b/docs/functions/vec3.round.html @@ -1,4 +1,4 @@ -round | wgpu-matrix
+round | wgpu-matrix
-
+

Function round

-
    - +
      +
    • Applies Math.round to each element of vector

      + +

      Returns

      A vector that is the round of each element of v.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the round of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.scale.html b/docs/functions/vec3.scale.html index dd316f4..1b97336 100644 --- a/docs/functions/vec3.scale.html +++ b/docs/functions/vec3.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Multiplies a vector by a scalar. (same as mulScalar)

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.set.html b/docs/functions/vec3.set.html index a7643a0..c8bf9b2 100644 --- a/docs/functions/vec3.set.html +++ b/docs/functions/vec3.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Vec3 -Also see create and copy

      +Also see create and copy

      + +

      Returns

      A vector with its elements set.

      Parameters

      • -
        x: number
        +
        x: number

        first value

      • -
        y: number
        +
        y: number

        second value

      • -
        z: number
        +
        z: number

        third value

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector with its elements set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.setDefaultType.html b/docs/functions/vec3.setDefaultType.html index c4cc044..b898537 100644 --- a/docs/functions/vec3.setDefaultType.html +++ b/docs/functions/vec3.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Vec3

      + +

      Returns

      previous constructor for Vec3

      Parameters

      • -
        ctor: (new (n) => Vec3)
        +
        ctor: (new (n: number) => Vec3)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Vec3
          • +
              +
            • new (n: number): Vec3
            • Parameters

              • -
                n: number
              -

              Returns Vec3

      -

      Returns (new (n) => Vec3)

      previous constructor for Vec3

      - +
      n: number
+

Returns Vec3

+

Returns (new (n: number) => Vec3)

  • -
      -
    • new (n): Vec3
    • +
        +
      • new (n: number): Vec3
      • Vec3 math functions.

        Almost all functions take an optional dst argument. If it is not passed in the functions will create a new Vec3. In other words you can do this

        const v = vec3.cross(v1, v2);  // Creates a new Vec3 with the cross product of v1 x v2.
        -
        +

        or

        const v = vec3.create();
        vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v -
        +

        The first style is often easier but depending on where it's used it generates garbage where as there is almost never allocation with the second style.

        It is always safe to pass any vector as the destination. So for example

        vec3.cross(v1, v2, v1);  // Puts the cross product of v1 x v2 in v1
        -
        +

        Parameters

        • -
          n: number
        -

        Returns Vec3

-
- +

Returns Vec3

+ - + - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.sub.html b/docs/functions/vec3.sub.html index 8e8c5b6..efb4fd8 100644 --- a/docs/functions/vec3.sub.html +++ b/docs/functions/vec3.sub.html @@ -1,4 +1,4 @@ -sub | wgpu-matrix
+sub | wgpu-matrix
-
+

Function sub

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.subtract.html b/docs/functions/vec3.subtract.html index 289f655..3693514 100644 --- a/docs/functions/vec3.subtract.html +++ b/docs/functions/vec3.subtract.html @@ -1,4 +1,4 @@ -subtract | wgpu-matrix
+subtract | wgpu-matrix
-
+

Function subtract

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec3
        +
        a: Vec3

        Operand vector.

      • -
        b: Vec3
        +
        b: Vec3

        Operand vector.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.transformMat3.html b/docs/functions/vec3.transformMat3.html index 4073448..c920cf2 100644 --- a/docs/functions/vec3.transformMat3.html +++ b/docs/functions/vec3.transformMat3.html @@ -1,4 +1,4 @@ -transformMat3 | wgpu-matrix
+transformMat3 | wgpu-matrix
-
+

Function transformMat3

-
    - +
      +
    • Transforms vec3 by 3x3 matrix

      + +

      Returns

      the transformed vector

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        the vector

      • -
        m: Mat3
        +
        m: Mat3

        The matrix.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

        optional vec3 to store result. If not passed a new one is created.

      -

      Returns Vec3

      the transformed vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.transformMat4.html b/docs/functions/vec3.transformMat4.html index 4118391..4630c5f 100644 --- a/docs/functions/vec3.transformMat4.html +++ b/docs/functions/vec3.transformMat4.html @@ -1,4 +1,4 @@ -transformMat4 | wgpu-matrix
+transformMat4 | wgpu-matrix
-
+

Function transformMat4

-
    - +
      +
    • transform vec3 by 4x4 matrix

      + +

      Returns

      the transformed vector

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        the vector

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

        optional vec3 to store result. If not passed a new one is created.

      -

      Returns Vec3

      the transformed vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.transformMat4Upper3x3.html b/docs/functions/vec3.transformMat4Upper3x3.html index 837a092..7fde240 100644 --- a/docs/functions/vec3.transformMat4Upper3x3.html +++ b/docs/functions/vec3.transformMat4Upper3x3.html @@ -1,4 +1,4 @@ -transformMat4Upper3x3 | wgpu-matrix
+transformMat4Upper3x3 | wgpu-matrix
-
+

Function transformMat4Upper3x3

-
    - +
      +
    • Transform vec4 by upper 3x3 matrix inside 4x4 matrix.

      + +

      Returns

      The transformed vector.

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        The direction.

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

        optional Vec3 to store result. If not passed a new one is created.

      -

      Returns Vec3

      The transformed vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.transformQuat.html b/docs/functions/vec3.transformQuat.html index 810164a..d55473a 100644 --- a/docs/functions/vec3.transformQuat.html +++ b/docs/functions/vec3.transformQuat.html @@ -1,4 +1,4 @@ -transformQuat | wgpu-matrix
+transformQuat | wgpu-matrix
-
+

Function transformQuat

-
    - +
      +
    • Transforms vec3 by Quaternion

      + +

      Returns

      the transformed

      Parameters

      • -
        v: Vec3
        +
        v: Vec3

        the vector to transform

      • -
        q: Quat
        +
        q: Quat

        the quaternion to transform by

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

        optional vec3 to store result. If not passed a new one is created.

      -

      Returns Vec3

      the transformed

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec3.zero.html b/docs/functions/vec3.zero.html index 2ef08cd..5970a45 100644 --- a/docs/functions/vec3.zero.html +++ b/docs/functions/vec3.zero.html @@ -1,4 +1,4 @@ -zero | wgpu-matrix
+zero | wgpu-matrix
-
+

Function zero

-
    - +
      +
    • Zero's a vector

      + +

      Returns

      The zeroed vector.

      Parameters

      • -
        Optional dst: Vec3
        +
        Optional dst: Vec3

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

      -

      Returns Vec3

      The zeroed vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.add.html b/docs/functions/vec4.add.html index 021eb7a..e82be3b 100644 --- a/docs/functions/vec4.add.html +++ b/docs/functions/vec4.add.html @@ -1,4 +1,4 @@ -add | wgpu-matrix
+add | wgpu-matrix
-
+

Function add

-
    - +
      +
    • Adds two vectors; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the sum of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.addScaled.html b/docs/functions/vec4.addScaled.html index 278fd2c..bb717cf 100644 --- a/docs/functions/vec4.addScaled.html +++ b/docs/functions/vec4.addScaled.html @@ -1,4 +1,4 @@ -addScaled | wgpu-matrix
+addScaled | wgpu-matrix
-
+

Function addScaled

-
    - +
      +
    • Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.

      + +

      Returns

      A vector that is the sum of a + b * scale.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        scale: number
        +
        scale: number

        Amount to scale b

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the sum of a + b * scale.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.ceil.html b/docs/functions/vec4.ceil.html index 76f98df..07590a5 100644 --- a/docs/functions/vec4.ceil.html +++ b/docs/functions/vec4.ceil.html @@ -1,4 +1,4 @@ -ceil | wgpu-matrix
+ceil | wgpu-matrix
-
+

Function ceil

-
    - +
      +
    • Applies Math.ceil to each element of vector

      + +

      Returns

      A vector that is the ceil of each element of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the ceil of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.clamp.html b/docs/functions/vec4.clamp.html index c4ac6ac..44c7e6e 100644 --- a/docs/functions/vec4.clamp.html +++ b/docs/functions/vec4.clamp.html @@ -1,4 +1,4 @@ -clamp | wgpu-matrix
+clamp | wgpu-matrix
-
+

Function clamp

-
    - +
      +
    • Clamp each element of vector between min and max

      + +

      Returns

      A vector that the clamped value of each element of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        Operand vector.

      • -
        min: number = 0
        +
        min: number = 0

        Max value, default 1

      • -
        max: number = 1
        +
        max: number = 1

        Min value, default 0

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that the clamped value of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.clone.html b/docs/functions/vec4.clone.html index a11a134..8e0172f 100644 --- a/docs/functions/vec4.clone.html +++ b/docs/functions/vec4.clone.html @@ -1,4 +1,4 @@ -clone | wgpu-matrix
+clone | wgpu-matrix
-
+

Function clone

-
    - +
      +
    • -

      Clones a vector. (same as copy) -Also see create and set

      +

      Clones a vector. (same as copy) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.copy.html b/docs/functions/vec4.copy.html index 7fb629e..d7c9f74 100644 --- a/docs/functions/vec4.copy.html +++ b/docs/functions/vec4.copy.html @@ -1,4 +1,4 @@ -copy | wgpu-matrix
+copy | wgpu-matrix
-
+

Function copy

-
    - +
      +
    • -

      Copies a vector. (same as clone) -Also see create and set

      +

      Copies a vector. (same as clone) +Also see create and set

      + +

      Returns

      A copy of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A copy of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.create.html b/docs/functions/vec4.create.html index c0dd4f9..ab6f8c4 100644 --- a/docs/functions/vec4.create.html +++ b/docs/functions/vec4.create.html @@ -1,4 +1,4 @@ -create | wgpu-matrix
+create | wgpu-matrix
-
+

Function create

-
    - +
      +
    • Creates a vec4; may be called with x, y, z to set initial values.

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      • -
        Optional w: number
        +
        Optional w: number

        Initial w value.

      -

      Returns Vec4

      the created vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.dist.html b/docs/functions/vec4.dist.html index 5ba33d4..225d54d 100644 --- a/docs/functions/vec4.dist.html +++ b/docs/functions/vec4.dist.html @@ -1,4 +1,4 @@ -dist | wgpu-matrix
+dist | wgpu-matrix
-
+

Function dist

-
    - +
      +
    • Computes the distance between 2 points (same as distance)

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.distSq.html b/docs/functions/vec4.distSq.html index da0891b..d771efc 100644 --- a/docs/functions/vec4.distSq.html +++ b/docs/functions/vec4.distSq.html @@ -1,4 +1,4 @@ -distSq | wgpu-matrix
+distSq | wgpu-matrix
-
+

Function distSq

-
    - +
      +
    • Computes the square of the distance between 2 points (same as distanceSq)

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.distance.html b/docs/functions/vec4.distance.html index 08dcf94..7150ae8 100644 --- a/docs/functions/vec4.distance.html +++ b/docs/functions/vec4.distance.html @@ -1,4 +1,4 @@ -distance | wgpu-matrix
+distance | wgpu-matrix
-
+

Function distance

-
    - +
      +
    • Computes the distance between 2 points

      + +

      Returns

      distance between a and b

      Parameters

      -

      Returns number

      distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.distanceSq.html b/docs/functions/vec4.distanceSq.html index bdbaf56..efed7bb 100644 --- a/docs/functions/vec4.distanceSq.html +++ b/docs/functions/vec4.distanceSq.html @@ -1,4 +1,4 @@ -distanceSq | wgpu-matrix
+distanceSq | wgpu-matrix
-
+

Function distanceSq

-
    - +
      +
    • Computes the square of the distance between 2 points

      + +

      Returns

      square of the distance between a and b

      Parameters

      -

      Returns number

      square of the distance between a and b

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.div.html b/docs/functions/vec4.div.html index c471474..3444794 100644 --- a/docs/functions/vec4.div.html +++ b/docs/functions/vec4.div.html @@ -1,4 +1,4 @@ -div | wgpu-matrix
+div | wgpu-matrix
-
+

Function div

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length. (same as divide)

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.divScalar.html b/docs/functions/vec4.divScalar.html index c82bad7..30737a5 100644 --- a/docs/functions/vec4.divScalar.html +++ b/docs/functions/vec4.divScalar.html @@ -1,4 +1,4 @@ -divScalar | wgpu-matrix
+divScalar | wgpu-matrix
-
+

Function divScalar

-
    - +
      +
    • Divides a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.divide.html b/docs/functions/vec4.divide.html index 5a4635e..28f2c41 100644 --- a/docs/functions/vec4.divide.html +++ b/docs/functions/vec4.divide.html @@ -1,4 +1,4 @@ -divide | wgpu-matrix
+divide | wgpu-matrix
-
+

Function divide

-
    - +
      +
    • Divides a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of quotients of entries of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The vector of quotients of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.dot.html b/docs/functions/vec4.dot.html index 7a6f3db..a6a7e0e 100644 --- a/docs/functions/vec4.dot.html +++ b/docs/functions/vec4.dot.html @@ -1,4 +1,4 @@ -dot | wgpu-matrix
+dot | wgpu-matrix
-
+

Function dot

-
    - +
      +
    • Computes the dot product of two vectors

      + +

      Returns

      dot product

      Parameters

      -

      Returns number

      dot product

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.equals.html b/docs/functions/vec4.equals.html index d2c283b..2d0d9d3 100644 --- a/docs/functions/vec4.equals.html +++ b/docs/functions/vec4.equals.html @@ -1,4 +1,4 @@ -equals | wgpu-matrix
+equals | wgpu-matrix
-
+

Function equals

-
    - +
      +
    • Check if 2 vectors are exactly equal

      + +

      Returns

      true if vectors are exactly equal

      Parameters

      -

      Returns boolean

      true if vectors are exactly equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.equalsApproximately.html b/docs/functions/vec4.equalsApproximately.html index fa32865..6718a12 100644 --- a/docs/functions/vec4.equalsApproximately.html +++ b/docs/functions/vec4.equalsApproximately.html @@ -1,4 +1,4 @@ -equalsApproximately | wgpu-matrix
+equalsApproximately | wgpu-matrix
-
+

Function equalsApproximately

-
    - +
      +
    • Check if 2 vectors are approximately equal

      + +

      Returns

      true if vectors are approximately equal

      Parameters

      -

      Returns boolean

      true if vectors are approximately equal

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.floor.html b/docs/functions/vec4.floor.html index ef8a3b8..3db2f4d 100644 --- a/docs/functions/vec4.floor.html +++ b/docs/functions/vec4.floor.html @@ -1,4 +1,4 @@ -floor | wgpu-matrix
+floor | wgpu-matrix
-
+

Function floor

-
    - +
      +
    • Applies Math.floor to each element of vector

      + +

      Returns

      A vector that is the floor of each element of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the floor of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.fromValues.html b/docs/functions/vec4.fromValues.html index cfdd85d..9d95c69 100644 --- a/docs/functions/vec4.fromValues.html +++ b/docs/functions/vec4.fromValues.html @@ -1,4 +1,4 @@ -fromValues | wgpu-matrix
+fromValues | wgpu-matrix
-
+

Function fromValues

-
    - +
      +
    • Creates a vec4; may be called with x, y, z to set initial values. (same as create)

      + +

      Returns

      the created vector

      Parameters

      • -
        Optional x: number
        +
        Optional x: number

        Initial x value.

      • -
        Optional y: number
        +
        Optional y: number

        Initial y value.

      • -
        Optional z: number
        +
        Optional z: number

        Initial z value.

      • -
        Optional w: number
      -

      Returns Vec4

      the created vector

      -
-
- +

Returns Vec4

+ -
+ - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.inverse.html b/docs/functions/vec4.inverse.html index 0d553f2..13ddb84 100644 --- a/docs/functions/vec4.inverse.html +++ b/docs/functions/vec4.inverse.html @@ -1,4 +1,4 @@ -inverse | wgpu-matrix
+inverse | wgpu-matrix
-
+

Function inverse

-
    - +
      +
    • Inverse a vector.

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.invert.html b/docs/functions/vec4.invert.html index 36f2d5d..3422574 100644 --- a/docs/functions/vec4.invert.html +++ b/docs/functions/vec4.invert.html @@ -1,4 +1,4 @@ -invert | wgpu-matrix
+invert | wgpu-matrix
-
+

Function invert

-
    - +
      +
    • Invert a vector. (same as inverse)

      + +

      Returns

      The inverted vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The inverted vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.len.html b/docs/functions/vec4.len.html index 758f96e..1c802d5 100644 --- a/docs/functions/vec4.len.html +++ b/docs/functions/vec4.len.html @@ -1,4 +1,4 @@ -len | wgpu-matrix
+len | wgpu-matrix
-
+

Function len

-
    - +
      +
    • Computes the length of vector (same as length)

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.lenSq.html b/docs/functions/vec4.lenSq.html index a2549ea..0d9f7ed 100644 --- a/docs/functions/vec4.lenSq.html +++ b/docs/functions/vec4.lenSq.html @@ -1,4 +1,4 @@ -lenSq | wgpu-matrix
+lenSq | wgpu-matrix
-
+

Function lenSq

-
    - +
      +
    • Computes the square of the length of vector (same as lengthSq)

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.length.html b/docs/functions/vec4.length.html index 8493f51..6e16601 100644 --- a/docs/functions/vec4.length.html +++ b/docs/functions/vec4.length.html @@ -1,4 +1,4 @@ -length | wgpu-matrix
+length | wgpu-matrix
-
+

Function length

-
    - +
      +
    • Computes the length of vector

      + +

      Returns

      length of vector.

      Parameters

      -

      Returns number

      length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.lengthSq.html b/docs/functions/vec4.lengthSq.html index e4da321..afb6f67 100644 --- a/docs/functions/vec4.lengthSq.html +++ b/docs/functions/vec4.lengthSq.html @@ -1,4 +1,4 @@ -lengthSq | wgpu-matrix
+lengthSq | wgpu-matrix
-
+

Function lengthSq

-
    - +
      +
    • Computes the square of the length of vector

      + +

      Returns

      square of the length of vector.

      Parameters

      -

      Returns number

      square of the length of vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.lerp.html b/docs/functions/vec4.lerp.html index 241db8b..f2c0416 100644 --- a/docs/functions/vec4.lerp.html +++ b/docs/functions/vec4.lerp.html @@ -1,4 +1,4 @@ -lerp | wgpu-matrix
+lerp | wgpu-matrix
-
+

Function lerp

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient t, returns a + t * (b - a).

      + +

      Returns

      The linear interpolated result.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        t: number
        +
        t: number

        Interpolation coefficient.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.lerpV.html b/docs/functions/vec4.lerpV.html index e5a9640..b6ffcdb 100644 --- a/docs/functions/vec4.lerpV.html +++ b/docs/functions/vec4.lerpV.html @@ -1,4 +1,4 @@ -lerpV | wgpu-matrix
+lerpV | wgpu-matrix
-
+

Function lerpV

-
    - +
      +
    • Performs linear interpolation on two vectors. Given vectors a and b and interpolation coefficient vector t, returns a + t * (b - a).

      + +

      Returns

      the linear interpolated result.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        t: Vec4
        +
        t: Vec4

        Interpolation coefficients vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      the linear interpolated result.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.max.html b/docs/functions/vec4.max.html index ab2ec94..87b6eb5 100644 --- a/docs/functions/vec4.max.html +++ b/docs/functions/vec4.max.html @@ -1,4 +1,4 @@ -max | wgpu-matrix
+max | wgpu-matrix
-
+

Function max

-
    - +
      +
    • Return max values of two vectors. Given vectors a and b returns [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].

      + +

      Returns

      The max components vector.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The max components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.min.html b/docs/functions/vec4.min.html index 3650097..5c65a8f 100644 --- a/docs/functions/vec4.min.html +++ b/docs/functions/vec4.min.html @@ -1,4 +1,4 @@ -min | wgpu-matrix
+min | wgpu-matrix
-
+

Function min

-
    - +
      +
    • Return min values of two vectors. Given vectors a and b returns [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].

      + +

      Returns

      The min components vector.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The min components vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.mul.html b/docs/functions/vec4.mul.html index fe1aad0..7843b31 100644 --- a/docs/functions/vec4.mul.html +++ b/docs/functions/vec4.mul.html @@ -1,4 +1,4 @@ -mul | wgpu-matrix
+mul | wgpu-matrix
-
+

Function mul

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length. (same as mul)

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.mulScalar.html b/docs/functions/vec4.mulScalar.html index e4bf1ab..5dda10d 100644 --- a/docs/functions/vec4.mulScalar.html +++ b/docs/functions/vec4.mulScalar.html @@ -1,4 +1,4 @@ -mulScalar | wgpu-matrix
+mulScalar | wgpu-matrix
-
+

Function mulScalar

-
    - +
      +
    • Multiplies a vector by a scalar.

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.multiply.html b/docs/functions/vec4.multiply.html index 1575b9d..8969b53 100644 --- a/docs/functions/vec4.multiply.html +++ b/docs/functions/vec4.multiply.html @@ -1,4 +1,4 @@ -multiply | wgpu-matrix
+multiply | wgpu-matrix
-
+

Function multiply

-
    - +
      +
    • Multiplies a vector by another vector (component-wise); assumes a and b have the same length.

      + +

      Returns

      The vector of products of entries of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The vector of products of entries of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.negate.html b/docs/functions/vec4.negate.html index 8383ce9..c826ba2 100644 --- a/docs/functions/vec4.negate.html +++ b/docs/functions/vec4.negate.html @@ -1,4 +1,4 @@ -negate | wgpu-matrix
+negate | wgpu-matrix
-
+

Function negate

-
    - +
      +
    • Negates a vector.

      + +

      Returns

      -v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      -v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.normalize.html b/docs/functions/vec4.normalize.html index 6d78f2a..0eacf66 100644 --- a/docs/functions/vec4.normalize.html +++ b/docs/functions/vec4.normalize.html @@ -1,4 +1,4 @@ -normalize | wgpu-matrix
+normalize | wgpu-matrix
-
+

Function normalize

-
    - +
      +
    • Divides a vector by its Euclidean length and returns the quotient.

      + +

      Returns

      The normalized vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The normalized vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.round.html b/docs/functions/vec4.round.html index 57061f5..76e5935 100644 --- a/docs/functions/vec4.round.html +++ b/docs/functions/vec4.round.html @@ -1,4 +1,4 @@ -round | wgpu-matrix
+round | wgpu-matrix
-
+

Function round

-
    - +
      +
    • Applies Math.round to each element of vector

      + +

      Returns

      A vector that is the round of each element of v.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the round of each element of v.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.scale.html b/docs/functions/vec4.scale.html index 0026b64..095bf9e 100644 --- a/docs/functions/vec4.scale.html +++ b/docs/functions/vec4.scale.html @@ -1,4 +1,4 @@ -scale | wgpu-matrix
+scale | wgpu-matrix
-
+

Function scale

-
    - +
      +
    • Multiplies a vector by a scalar. (same as mulScalar)

      + +

      Returns

      The scaled vector.

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        The vector.

      • -
        k: number
        +
        k: number

        The scalar.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The scaled vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.set.html b/docs/functions/vec4.set.html index 2d1c6d4..291d469 100644 --- a/docs/functions/vec4.set.html +++ b/docs/functions/vec4.set.html @@ -1,4 +1,4 @@ -set | wgpu-matrix
+set | wgpu-matrix
-
+

Function set

-
    - +
      +
    • Sets the values of a Vec4 -Also see create and copy

      +Also see create and copy

      + +

      Returns

      A vector with its elements set.

      Parameters

      • -
        x: number
        +
        x: number

        first value

      • -
        y: number
        +
        y: number

        second value

      • -
        z: number
        +
        z: number

        third value

      • -
        w: number
        +
        w: number

        fourth value

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector with its elements set.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.setDefaultType.html b/docs/functions/vec4.setDefaultType.html index 1ce7d05..aac3ef1 100644 --- a/docs/functions/vec4.setDefaultType.html +++ b/docs/functions/vec4.setDefaultType.html @@ -1,4 +1,4 @@ -setDefaultType | wgpu-matrix
+setDefaultType | wgpu-matrix
-
+

Function setDefaultType

-
    - +
      +
    • Sets the type this library creates for a Vec4

      + +

      Returns

      previous constructor for Vec4

      Parameters

      • -
        ctor: (new (n) => Vec4)
        +
        ctor: (new (n: number) => Vec4)

        the constructor for the type. Either Float32Array, Float64Array, or Array

        • -
            -
          • new (n): Vec4
          • +
              +
            • new (n: number): Vec4
            • Parameters

              • -
                n: number
              -

              Returns Vec4

      -

      Returns (new (n) => Vec4)

      previous constructor for Vec4

      - +
      n: number
+

Returns Vec4

+

Returns (new (n: number) => Vec4)

  • -
      -
    • new (n): Vec4
    • +
        +
      • new (n: number): Vec4
      • Vec4 math functions.

        Almost all functions take an optional dst argument. If it is not passed in the functions will create a new Vec4. In other words you can do this

        const v = vec4.cross(v1, v2);  // Creates a new Vec4 with the cross product of v1 x v2.
        -
        +

        or

        const v = vec4.create();
        vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v -
        +

        The first style is often easier but depending on where it's used it generates garbage where as there is almost never allocation with the second style.

        It is always safe to pass any vector as the destination. So for example

        vec4.cross(v1, v2, v1);  // Puts the cross product of v1 x v2 in v1
        -
        +

        Parameters

        • -
          n: number
        -

        Returns Vec4

-
- +

Returns Vec4

+ - + - + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.sub.html b/docs/functions/vec4.sub.html index 38f6a1b..aea4822 100644 --- a/docs/functions/vec4.sub.html +++ b/docs/functions/vec4.sub.html @@ -1,4 +1,4 @@ -sub | wgpu-matrix
+sub | wgpu-matrix
-
+

Function sub

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.subtract.html b/docs/functions/vec4.subtract.html index d7ff6fe..c145bb3 100644 --- a/docs/functions/vec4.subtract.html +++ b/docs/functions/vec4.subtract.html @@ -1,4 +1,4 @@ -subtract | wgpu-matrix
+subtract | wgpu-matrix
-
+

Function subtract

-
    - +
      +
    • Subtracts two vectors.

      + +

      Returns

      A vector that is the difference of a and b.

      Parameters

      • -
        a: Vec4
        +
        a: Vec4

        Operand vector.

      • -
        b: Vec4
        +
        b: Vec4

        Operand vector.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      A vector that is the difference of a and b.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.transformMat4.html b/docs/functions/vec4.transformMat4.html index 468baff..083c740 100644 --- a/docs/functions/vec4.transformMat4.html +++ b/docs/functions/vec4.transformMat4.html @@ -1,4 +1,4 @@ -transformMat4 | wgpu-matrix
+transformMat4 | wgpu-matrix
-
+

Function transformMat4

-
    - +
      +
    • transform vec4 by 4x4 matrix

      + +

      Returns

      the transformed vector

      Parameters

      • -
        v: Vec4
        +
        v: Vec4

        the vector

      • -
        m: Mat4
        +
        m: Mat4

        The matrix.

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

        optional vec4 to store result. If not passed a new one is created.

      -

      Returns Vec4

      the transformed vector

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/functions/vec4.zero.html b/docs/functions/vec4.zero.html index 3743db2..c1d6883 100644 --- a/docs/functions/vec4.zero.html +++ b/docs/functions/vec4.zero.html @@ -1,4 +1,4 @@ -zero | wgpu-matrix
+zero | wgpu-matrix
-
+

Function zero

-
    - +
      +
    • Zero's a vector

      + +

      Returns

      The zeroed vector.

      Parameters

      • -
        Optional dst: Vec4
        +
        Optional dst: Vec4

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

      -

      Returns Vec4

      The zeroed vector.

      -
-
- + -
+
- + +

Generated using TypeDoc

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 3d6ff4a..4227bc7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,4 @@ -wgpu-matrix
+wgpu-matrix
-
+

wgpu-matrix

-

wgpu-matrix

NPM Package

+
+ +

wgpu-matrix

+
+

NPM Package

Fast 3d math library for webgpu

-

Why another 3d math library?

    + + +

    Why another 3d math library?

    +
    +
    • Most other 3D math libraries are designed for WebGL, not WebGPU
      • WebGPU uses clip space Z 0 to 1, vs WebGL -1 to 1. So ortho, perspective, frustum are different
      • WebGPU mat3s are 12 floats (padded), WebGL they're 9.
      • @@ -28,52 +36,68 @@

        wgpu-matrix

  • Many other 3D math libraries are overly verbose
    • compare

      // wgpu-matrix
      const t = mat4.translation([x, y, z]);
      const p = mat4.perspective(fov, aspect, near, far);
      const r = mat4.rotationX(rad); -
      +
      // gl-matrix
      const t = mat4.create();
      mat4.fromTranslation(t, [x, y, z]);

      const p = mat4.create();
      mat4.perspective(p, fov, aspect, near, far);

      const r = mat4.create();
      mat4.fromXRotation(r, rad); -
      +

      note that if you want to pre-create matrices you can still do this in wgpu-matrix

      const t = mat4.create();
      mat4.translation([x, y, z], t);

      const p = mat4.create();
      mat4.perspective(fov, aspect, near, far, p);

      const r = mat4.create();
      mat4.rotationX(rad, r); -
      +
  • -

    Usage

    import {
    vec3,
    mat4,
    } from 'https://wgpu-matrix.org/dist/2.x/wgpu-matrix.module.js';

    const fov = 60 * Math.PI / 180
    const aspect = width / height;
    const near = 0.1;
    const far = 1000;
    const perspective = mat4.perspective(fov, aspect, near, far);

    const eye = [3, 5, 10];
    const target = [0, 4, 0];
    const up = [0, 1, 0];
    const view = mat4.lookAt(eye, target, up); -
    + + +

    Usage

    +
    +
    import {
    vec3,
    mat4,
    } from 'https://wgpu-matrix.org/dist/2.x/wgpu-matrix.module.js';

    const fov = 60 * Math.PI / 180
    const aspect = width / height;
    const near = 0.1;
    const far = 1000;
    const perspective = mat4.perspective(fov, aspect, near, far);

    const eye = [3, 5, 10];
    const target = [0, 4, 0];
    const up = [0, 1, 0];
    const view = mat4.lookAt(eye, target, up); +

    Note: for translation, rotation, and scaling there are 2 versions of each function. One generates a translation, rotation, or scaling matrix. The other translates, rotates, or scales a matrix.

    const t = mat4.translation([1, 2, 3]);    // a translation matrix
    const r = mat4.rotationX(Math.PI * 0.5); // a rotation matrix
    const s = mat4.scaling([1, 2, 3]); // a scaling matrix -
    +
    const m = mat4.identity();
    const t = mat4.translate(m, [1, 2, 3]); // m * translation([1, 2, 3])
    const r = mat4.rotateX(m, Math.PI * 0.5); // m * rotationX(Math.PI * 0.5)
    const s = mat4.scale(m, [1, 2, 3]); // m * scaling([1, 2, 3]) -
    +

    Functions take an optional destination to hold the result.

    const m = mat4.create();            // m = new mat4
    mat4.identity(m); // m = identity
    mat4.translate(m, [1, 2, 3], m); // m *= translation([1, 2, 3])
    mat4.rotateX(m, Math.PI * 0.5, m); // m *= rotationX(Math.PI * 0.5)
    mat4.scale(m, [1, 2, 3], m); // m *= scaling([1, 2, 3]) -
    +

    There is also the minified version

    import {
    vec3,
    mat4,
    } from 'https://wgpu-matrix.org/dist/2.x/wgpu-matrix.module.min.js';

    // ... etc ... -
    +

    or via npm

    -
    npm install --save wgpu-matrix
    -
    +
    npm install --save wgpu-matrix
    +

    then using a build process

    import {vec3, mat3} from 'wgpu-matrix';

    // ... etc ... -
    +

    Example

    -

    Download

      + + +

      Download

      +
      + -

      Notes

      mat4.perspective, + + +

      Notes

      + +

      mat4.perspective, mat4.ortho, and mat4.frustum all return matrices with Z clip space from 0 to 1 (unlike most WebGL matrix libraries which return -1 to 1)

      mat4.create makes an all zero matrix if passed no parameters. If you want an identity matrix call mat4.identity

      -

      Important!

      mat3 uses the space of 12 elements

      + + +

      Important!

      +
      +

      mat3 uses the space of 12 elements

      // a mat3
      [
      xx, xy, xz, ?
      yx, yy, yz, ?
      zx, zy, zz, ?
      ] -
      +

      This is because WebGPU requires mat3s to be in this format and since this library is for WebGPU it makes sense to match so you can manipulate mat3s in TypeArrays directly.

      @@ -81,30 +105,46 @@

      wgpu-matrix

    vec3 in a Uniform Block or other structure in WGSL, each vec3 is padded to 4 floats! In other words, if you declare

    struct Foo {
    bar: vec3<f32>[3];
    }; -
    +

    then bar[0] is at byte offset 0, bar[1] at byte offset 16, bar[2] at byte offset 32.

    See the WGSL spec on alignment and size.

    -

    Columns vs Rows

    WebGPU follows the same conventions as OpenGL, Vulkan, Metal for matrices. Some people call this "column major". The issue is the columns of + + +

    Columns vs Rows

    + +

    WebGPU follows the same conventions as OpenGL, Vulkan, Metal for matrices. Some people call this "column major". The issue is the columns of a traditional "math" matrix are stored as rows when declaring a matrix in code.

    [
    x1, x2, x3, x4, // <- column 0
    y1, y2, y3, y4, // <- column 1
    z1, z2, z3, z4, // <- column 2
    w1, w2, w3, w4, // <- column 3
    ] -
    +

    To put it another way, the translation vector is in elements 12, 13, 14

    [
    xx, xy, xz, 0, // <- x-axis
    yx, yy, yz, 0, // <- y-axis
    zx, zy, zz, 0, // <- z-axis
    tx, ty, tz, 1, // <- translation
    ] -
    +

    This issue has confused programmers since at least the early 90s 😌

    -

    Performance vs Convenience

    Most functions take an optional destination as the last argument. + + +

    Performance vs Convenience

    + +

    Most functions take an optional destination as the last argument. If you don't supply it, a new one (vector, matrix) will be created for you.

    // convenient usage

    const persp = mat4.perspective(fov, aspect, near, far);
    const camera = mat4.lookAt(eye, target, up);
    const view = mat4.inverse(camera); -
    +
    // performant usage

    // at init time
    const persp = mat4.create();
    const camera = mat4.create();
    const view = mat4.create();

    // at usage time
    mat4.perspective(fov, aspect, near, far, persp);
    mat4.lookAt(eye, target, up, camera);
    mat4.inverse(camera, view); -
    +

    For me, most of the stuff I do in WebGPU, the supposed performance I might lose from using the convenient style is so small as to be unmeasurable. I'd prefer to stay convenient and then, if and only if I find a performance issue, then I might bother to switch to the performant style.

    As the saying goes premature optimization is the root of all evil. 😉

    -

    Migration

    1.x -> 2.x

      + + +

      Migration

      +
      + + +

      1.x -> 2.x

      +
      +
      • mat4.lookAt changed from a "camera matrix" to a "view matrix" (same as gluLookAt). If you want a matrix that orients an something in world space see @@ -113,25 +153,32 @@

        wgpu-matrix

    and it seemed prudent to make this change now and save more people from frustration going forward. -

    Development

    git clone https://github.com/greggman/wgpu-matrix.git
    cd wgpu-matrix
    npm i
    npm run build
    npm test -
    + + +

    Development

    +
    +
    git clone https://github.com/greggman/wgpu-matrix.git
    cd wgpu-matrix
    npm i
    npm run build
    npm test +

    You can run tests in the browser by starting a local server

    -
    npx servez
    -
    +
    npx servez
    +

    Now go to wherever your server serves pages. In the case of servez that's probably http://localhost:8080/test/.

    By default the tests test the minified version. To test the source use src=true as in http://localhost:8080/test/?src=true.

    To limit which tests are run use grep=<regex>. For example -http://localhost:8080/test/?src=true&grep=mat3.*?translate +http://localhost:8080/test/?src=true&grep=mat3.*?translate runs only tests with mat3 followed by translate in the name of test.

    -

    License

    MIT

    + + +

    License

    +
    +

    MIT

    -
    -
    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html index 6961b99..58e6754 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1,4 +1,4 @@ -wgpu-matrix
    +wgpu-matrix
    -
    +

    wgpu-matrix

    @@ -17,32 +17,31 @@

    wgpu-matrix

    Index

    Namespaces

    -

    Type Aliases

    -

    Functions

    -
    -
    -
    +
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/mat3.html b/docs/modules/mat3.html index 5f7f5d1..b6c700d 100644 --- a/docs/modules/mat3.html +++ b/docs/modules/mat3.html @@ -1,4 +1,4 @@ -mat3 | wgpu-matrix
    +mat3 | wgpu-matrix
    -
    + -
    -
    +
    -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/mat4.html b/docs/modules/mat4.html index 421d56e..51859a0 100644 --- a/docs/modules/mat4.html +++ b/docs/modules/mat4.html @@ -1,4 +1,4 @@ -mat4 | wgpu-matrix
    +mat4 | wgpu-matrix
    - -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/quat.html b/docs/modules/quat.html index 2e6bb28..8a9d48c 100644 --- a/docs/modules/quat.html +++ b/docs/modules/quat.html @@ -1,4 +1,4 @@ -quat | wgpu-matrix
    +quat | wgpu-matrix
    -
    + -
    -
    +
    -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/utils.html b/docs/modules/utils.html index c44a971..5ccf636 100644 --- a/docs/modules/utils.html +++ b/docs/modules/utils.html @@ -1,4 +1,4 @@ -utils | wgpu-matrix
    +utils | wgpu-matrix
    -
    +

    Index

    Variables

    -

    Functions

    -
    -
    -
    +
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/vec2.html b/docs/modules/vec2.html index 4277b9e..e5c722f 100644 --- a/docs/modules/vec2.html +++ b/docs/modules/vec2.html @@ -1,4 +1,4 @@ -vec2 | wgpu-matrix
    +vec2 | wgpu-matrix
    -
    + -
    -
    +
    -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/vec3.html b/docs/modules/vec3.html index 7e8a7be..a3f309d 100644 --- a/docs/modules/vec3.html +++ b/docs/modules/vec3.html @@ -1,4 +1,4 @@ -vec3 | wgpu-matrix
    +vec3 | wgpu-matrix
    - -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/modules/vec4.html b/docs/modules/vec4.html index 992ff70..d0d9de6 100644 --- a/docs/modules/vec4.html +++ b/docs/modules/vec4.html @@ -1,4 +1,4 @@ -vec4 | wgpu-matrix
    +vec4 | wgpu-matrix
    -
    + -
    -
    +
    -
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Mat3-1.html b/docs/types/Mat3-1.html index 81c02d5..2ceb9f0 100644 --- a/docs/types/Mat3-1.html +++ b/docs/types/Mat3-1.html @@ -1,4 +1,4 @@ -Mat3 | wgpu-matrix
    +Mat3 | wgpu-matrix
    -
    +

    Type alias Mat3

    -
    Mat3: number[] | Float32Array | Float64Array
    +
    Mat3: number[] | Float32Array | Float64Array

    A JavaScript array with 12 values, a Float32Array with 12 values, or a Float64Array with 12 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Mat4-1.html b/docs/types/Mat4-1.html index d3fa3da..35844c6 100644 --- a/docs/types/Mat4-1.html +++ b/docs/types/Mat4-1.html @@ -1,4 +1,4 @@ -Mat4 | wgpu-matrix
    +Mat4 | wgpu-matrix
    -
    +

    Type alias Mat4

    -
    Mat4: number[] | Float32Array | Float64Array
    +
    Mat4: number[] | Float32Array | Float64Array

    A JavaScript array with 16 values, a Float32Array with 16 values, or a Float64Array with 16 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Quat-1.html b/docs/types/Quat-1.html index e71ae0f..f39a994 100644 --- a/docs/types/Quat-1.html +++ b/docs/types/Quat-1.html @@ -1,4 +1,4 @@ -Quat | wgpu-matrix
    +Quat | wgpu-matrix
    -
    +

    Type alias Quat

    -
    Quat: number[] | Float32Array | Float64Array
    +
    Quat: number[] | Float32Array | Float64Array

    A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Vec2-1.html b/docs/types/Vec2-1.html index e428d45..45bf401 100644 --- a/docs/types/Vec2-1.html +++ b/docs/types/Vec2-1.html @@ -1,4 +1,4 @@ -Vec2 | wgpu-matrix
    +Vec2 | wgpu-matrix
    -
    +

    Type alias Vec2

    -
    Vec2: number[] | Float32Array | Float64Array
    +
    Vec2: number[] | Float32Array | Float64Array

    A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Vec3-1.html b/docs/types/Vec3-1.html index 35e183c..7a10912 100644 --- a/docs/types/Vec3-1.html +++ b/docs/types/Vec3-1.html @@ -1,4 +1,4 @@ -Vec3 | wgpu-matrix
    +Vec3 | wgpu-matrix
    -
    +

    Type alias Vec3

    -
    Vec3: number[] | Float32Array | Float64Array
    +
    Vec3: number[] | Float32Array | Float64Array

    A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/Vec4-1.html b/docs/types/Vec4-1.html index 0410823..8652c39 100644 --- a/docs/types/Vec4-1.html +++ b/docs/types/Vec4-1.html @@ -1,4 +1,4 @@ -Vec4 | wgpu-matrix
    +Vec4 | wgpu-matrix
    -
    +

    Type alias Vec4

    -
    Vec4: number[] | Float32Array | Float64Array
    +
    Vec4: number[] | Float32Array | Float64Array

    A JavaScript array with 4 values, Float32Array with 4 values, or a Float64Array with 4 values. When created by the library will create the default type which is Float32Array -but can be set by calling setDefaultType.

    +but can be set by calling setDefaultType.

    -
    -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/mat3.Mat3LikeCtor.html b/docs/types/mat3.Mat3LikeCtor.html index 05fb797..0131f8c 100644 --- a/docs/types/mat3.Mat3LikeCtor.html +++ b/docs/types/mat3.Mat3LikeCtor.html @@ -1,4 +1,4 @@ -Mat3LikeCtor | wgpu-matrix
    +Mat3LikeCtor | wgpu-matrix
    -
    +

    Type alias Mat3LikeCtor

    -
    Mat3LikeCtor: (new (n) => Mat3)
    +
    Mat3LikeCtor: (new (n: number) => Mat3)

    Type declaration

    • -
        -
      • new (n): Mat3
      • +
          +
        • new (n: number): Mat3
        • Parameters

          • -
            n: number
          -

          Returns Mat3

    -
    - +

    Returns Mat3

    + -
    + - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/mat4.Mat4LikeCtor.html b/docs/types/mat4.Mat4LikeCtor.html index 5a5c45c..13abbc7 100644 --- a/docs/types/mat4.Mat4LikeCtor.html +++ b/docs/types/mat4.Mat4LikeCtor.html @@ -1,4 +1,4 @@ -Mat4LikeCtor | wgpu-matrix
    +Mat4LikeCtor | wgpu-matrix
    -
    +

    Type alias Mat4LikeCtor

    -
    Mat4LikeCtor: (new (n) => Mat4)
    +
    Mat4LikeCtor: (new (n: number) => Mat4)

    Type declaration

    • -
        -
      • new (n): Mat4
      • +
          +
        • new (n: number): Mat4
        • Parameters

          • -
            n: number
          -

          Returns Mat4

    -
    - +

    Returns Mat4

    + -
    + - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/quat.RotationOrder.html b/docs/types/quat.RotationOrder.html index 90729db..8fc6dd2 100644 --- a/docs/types/quat.RotationOrder.html +++ b/docs/types/quat.RotationOrder.html @@ -1,4 +1,4 @@ -RotationOrder | wgpu-matrix
    +RotationOrder | wgpu-matrix
    -
    +

    Type alias RotationOrder

    -
    RotationOrder: "xyz" | "xzy" | "yxz" | "yzx" | "zxy" | "zyx"
    -
    - + -
    +
    - + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/variables/utils.EPSILON.html b/docs/variables/utils.EPSILON.html index ca94452..5128524 100644 --- a/docs/variables/utils.EPSILON.html +++ b/docs/variables/utils.EPSILON.html @@ -1,4 +1,4 @@ -EPSILON | wgpu-matrix
    +EPSILON | wgpu-matrix
    -
    +

    Variable EPSILON

    -
    EPSILON: number = 0.000001
    -
    - + -
    -
    +

    Theme

    + + +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file