From 4a99254dbdef92e1c4c2c72c5e8ccf8e47c58a93 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 20 Mar 2024 13:55:40 -0700 Subject: [PATCH] port rotate from gl-matrix for vec2, vec3. fixes #23 --- dist/2.x/mat3-impl.d.ts | 2 +- dist/2.x/mat3.d.ts | 2 +- dist/2.x/mat4-impl.d.ts | 2 +- 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-impl.d.ts | 9 + dist/2.x/vec2.d.ts | 2 +- dist/2.x/vec3-impl.d.ts | 30 + dist/2.x/vec3.d.ts | 2 +- dist/2.x/vec4.d.ts | 2 +- dist/2.x/wgpu-matrix.js | 475 ++++++---- dist/2.x/wgpu-matrix.js.map | 2 +- dist/2.x/wgpu-matrix.min.js | 124 +-- dist/2.x/wgpu-matrix.module.js | 475 ++++++---- 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 | 386 ++++++-- docs/functions/mat3.copy.html | 386 ++++++-- docs/functions/mat3.create.html | 400 +++++++-- docs/functions/mat3.determinant.html | 380 ++++++-- docs/functions/mat3.equals.html | 382 ++++++-- docs/functions/mat3.equalsApproximately.html | 382 ++++++-- docs/functions/mat3.fromMat4.html | 382 ++++++-- docs/functions/mat3.fromQuat.html | 382 ++++++-- docs/functions/mat3.getAxis.html | 384 ++++++-- docs/functions/mat3.getScaling.html | 379 ++++++-- docs/functions/mat3.getTranslation.html | 382 ++++++-- docs/functions/mat3.identity.html | 380 ++++++-- docs/functions/mat3.inverse.html | 382 ++++++-- docs/functions/mat3.invert.html | 382 ++++++-- docs/functions/mat3.mul.html | 384 ++++++-- docs/functions/mat3.multiply.html | 384 ++++++-- docs/functions/mat3.negate.html | 382 ++++++-- docs/functions/mat3.rotate.html | 384 ++++++-- docs/functions/mat3.rotation.html | 382 ++++++-- docs/functions/mat3.scale.html | 384 ++++++-- docs/functions/mat3.scaling.html | 382 ++++++-- docs/functions/mat3.set.html | 400 +++++++-- docs/functions/mat3.setAxis.html | 386 ++++++-- docs/functions/mat3.setDefaultType.html | 388 ++++++-- docs/functions/mat3.setTranslation.html | 384 ++++++-- docs/functions/mat3.translate.html | 384 ++++++-- docs/functions/mat3.translation.html | 382 ++++++-- docs/functions/mat3.transpose.html | 382 ++++++-- docs/functions/mat3.uniformScale.html | 384 ++++++-- docs/functions/mat3.uniformScaling.html | 382 ++++++-- docs/functions/mat4.aim.html | 400 +++++++-- docs/functions/mat4.axisRotate.html | 400 +++++++-- docs/functions/mat4.axisRotation.html | 400 +++++++-- docs/functions/mat4.cameraAim.html | 400 +++++++-- docs/functions/mat4.clone.html | 400 +++++++-- docs/functions/mat4.copy.html | 400 +++++++-- docs/functions/mat4.create.html | 428 +++++++-- docs/functions/mat4.determinant.html | 394 +++++++-- docs/functions/mat4.equals.html | 396 +++++++-- docs/functions/mat4.equalsApproximately.html | 396 +++++++-- docs/functions/mat4.fromMat3.html | 396 +++++++-- docs/functions/mat4.fromQuat.html | 396 +++++++-- docs/functions/mat4.frustum.html | 406 +++++++-- docs/functions/mat4.getAxis.html | 398 +++++++-- docs/functions/mat4.getScaling.html | 393 ++++++-- docs/functions/mat4.getTranslation.html | 396 +++++++-- docs/functions/mat4.identity.html | 394 +++++++-- docs/functions/mat4.inverse.html | 396 +++++++-- docs/functions/mat4.invert.html | 396 +++++++-- docs/functions/mat4.lookAt.html | 400 +++++++-- docs/functions/mat4.mul.html | 398 +++++++-- docs/functions/mat4.multiply.html | 398 +++++++-- docs/functions/mat4.negate.html | 396 +++++++-- docs/functions/mat4.ortho.html | 406 +++++++-- docs/functions/mat4.perspective.html | 402 +++++++-- docs/functions/mat4.rotate.html | 400 +++++++-- docs/functions/mat4.rotateX.html | 398 +++++++-- docs/functions/mat4.rotateY.html | 398 +++++++-- docs/functions/mat4.rotateZ.html | 398 +++++++-- docs/functions/mat4.rotation.html | 400 +++++++-- docs/functions/mat4.rotationX.html | 396 +++++++-- docs/functions/mat4.rotationY.html | 396 +++++++-- docs/functions/mat4.rotationZ.html | 396 +++++++-- docs/functions/mat4.scale.html | 398 +++++++-- docs/functions/mat4.scaling.html | 396 +++++++-- docs/functions/mat4.set.html | 428 +++++++-- docs/functions/mat4.setAxis.html | 400 +++++++-- docs/functions/mat4.setDefaultType.html | 402 +++++++-- docs/functions/mat4.setTranslation.html | 398 +++++++-- docs/functions/mat4.translate.html | 398 +++++++-- docs/functions/mat4.translation.html | 396 +++++++-- docs/functions/mat4.transpose.html | 396 +++++++-- docs/functions/mat4.uniformScale.html | 398 +++++++-- docs/functions/mat4.uniformScaling.html | 396 +++++++-- docs/functions/quat.add.html | 391 ++++++-- docs/functions/quat.angle.html | 389 ++++++-- docs/functions/quat.clone.html | 393 ++++++-- docs/functions/quat.conjugate.html | 389 ++++++-- docs/functions/quat.copy.html | 393 ++++++-- docs/functions/quat.create.html | 393 ++++++-- docs/functions/quat.divScalar.html | 391 ++++++-- docs/functions/quat.dot.html | 389 ++++++-- docs/functions/quat.equals.html | 389 ++++++-- docs/functions/quat.equalsApproximately.html | 389 ++++++-- docs/functions/quat.fromAxisAngle.html | 391 ++++++-- docs/functions/quat.fromEuler.html | 395 +++++++-- docs/functions/quat.fromMat.html | 389 ++++++-- docs/functions/quat.fromValues.html | 393 ++++++-- docs/functions/quat.identity.html | 387 ++++++-- docs/functions/quat.inverse.html | 389 ++++++-- docs/functions/quat.len.html | 387 ++++++-- docs/functions/quat.lenSq.html | 387 ++++++-- docs/functions/quat.length.html | 387 ++++++-- docs/functions/quat.lengthSq.html | 387 ++++++-- docs/functions/quat.lerp.html | 393 ++++++-- docs/functions/quat.mul.html | 391 ++++++-- docs/functions/quat.mulScalar.html | 391 ++++++-- docs/functions/quat.multiply.html | 391 ++++++-- docs/functions/quat.normalize.html | 389 ++++++-- docs/functions/quat.rotateX.html | 391 ++++++-- docs/functions/quat.rotateY.html | 391 ++++++-- docs/functions/quat.rotateZ.html | 391 ++++++-- docs/functions/quat.rotationTo.html | 391 ++++++-- docs/functions/quat.scale.html | 391 ++++++-- docs/functions/quat.set.html | 397 +++++++-- docs/functions/quat.setDefaultType.html | 409 +++++++-- docs/functions/quat.slerp.html | 393 ++++++-- docs/functions/quat.sqlerp.html | 397 +++++++-- docs/functions/quat.sub.html | 391 ++++++-- docs/functions/quat.subtract.html | 391 ++++++-- docs/functions/quat.toAxisAngle.html | 393 ++++++-- docs/functions/setDefaultType.html | 360 +++++++- docs/functions/utils.degToRad.html | 355 +++++++- docs/functions/utils.euclideanModulo.html | 359 +++++++- docs/functions/utils.inverseLerp.html | 359 +++++++- docs/functions/utils.lerp.html | 359 +++++++- docs/functions/utils.radToDeg.html | 355 +++++++- docs/functions/utils.setEpsilon.html | 355 +++++++- docs/functions/vec2.add.html | 399 +++++++-- docs/functions/vec2.addScaled.html | 401 +++++++-- docs/functions/vec2.angle.html | 397 +++++++-- docs/functions/vec2.ceil.html | 397 +++++++-- docs/functions/vec2.clamp.html | 401 +++++++-- docs/functions/vec2.clone.html | 401 +++++++-- docs/functions/vec2.copy.html | 401 +++++++-- docs/functions/vec2.create.html | 401 +++++++-- docs/functions/vec2.cross.html | 399 +++++++-- docs/functions/vec2.dist.html | 397 +++++++-- docs/functions/vec2.distSq.html | 397 +++++++-- docs/functions/vec2.distance.html | 397 +++++++-- docs/functions/vec2.distanceSq.html | 397 +++++++-- docs/functions/vec2.div.html | 399 +++++++-- docs/functions/vec2.divScalar.html | 399 +++++++-- docs/functions/vec2.divide.html | 399 +++++++-- docs/functions/vec2.dot.html | 397 +++++++-- docs/functions/vec2.equals.html | 397 +++++++-- docs/functions/vec2.equalsApproximately.html | 397 +++++++-- docs/functions/vec2.floor.html | 397 +++++++-- docs/functions/vec2.fromValues.html | 397 +++++++-- docs/functions/vec2.inverse.html | 397 +++++++-- docs/functions/vec2.invert.html | 397 +++++++-- docs/functions/vec2.len.html | 395 +++++++-- docs/functions/vec2.lenSq.html | 395 +++++++-- docs/functions/vec2.length.html | 395 +++++++-- docs/functions/vec2.lengthSq.html | 395 +++++++-- docs/functions/vec2.lerp.html | 401 +++++++-- docs/functions/vec2.lerpV.html | 401 +++++++-- docs/functions/vec2.max.html | 399 +++++++-- docs/functions/vec2.min.html | 399 +++++++-- docs/functions/vec2.mul.html | 399 +++++++-- docs/functions/vec2.mulScalar.html | 399 +++++++-- docs/functions/vec2.multiply.html | 399 +++++++-- docs/functions/vec2.negate.html | 397 +++++++-- docs/functions/vec2.normalize.html | 397 +++++++-- docs/functions/vec2.random.html | 397 +++++++-- docs/functions/vec2.rotate.html | 369 ++++++++ docs/functions/vec2.round.html | 397 +++++++-- docs/functions/vec2.scale.html | 399 +++++++-- docs/functions/vec2.set.html | 401 +++++++-- docs/functions/vec2.setDefaultType.html | 417 +++++++-- docs/functions/vec2.sub.html | 399 +++++++-- docs/functions/vec2.subtract.html | 399 +++++++-- docs/functions/vec2.transformMat3.html | 399 +++++++-- docs/functions/vec2.transformMat4.html | 399 +++++++-- docs/functions/vec2.zero.html | 395 +++++++-- docs/functions/vec3.add.html | 404 +++++++-- docs/functions/vec3.addScaled.html | 406 +++++++-- docs/functions/vec3.angle.html | 402 +++++++-- docs/functions/vec3.ceil.html | 402 +++++++-- docs/functions/vec3.clamp.html | 406 +++++++-- docs/functions/vec3.clone.html | 406 +++++++-- docs/functions/vec3.copy.html | 406 +++++++-- docs/functions/vec3.create.html | 404 +++++++-- docs/functions/vec3.cross.html | 404 +++++++-- docs/functions/vec3.dist.html | 402 +++++++-- docs/functions/vec3.distSq.html | 402 +++++++-- docs/functions/vec3.distance.html | 402 +++++++-- docs/functions/vec3.distanceSq.html | 402 +++++++-- docs/functions/vec3.div.html | 404 +++++++-- docs/functions/vec3.divScalar.html | 404 +++++++-- docs/functions/vec3.divide.html | 404 +++++++-- docs/functions/vec3.dot.html | 402 +++++++-- docs/functions/vec3.equals.html | 402 +++++++-- docs/functions/vec3.equalsApproximately.html | 402 +++++++-- docs/functions/vec3.floor.html | 402 +++++++-- docs/functions/vec3.fromValues.html | 404 +++++++-- docs/functions/vec3.getAxis.html | 404 +++++++-- docs/functions/vec3.getScaling.html | 399 +++++++-- docs/functions/vec3.getTranslation.html | 402 +++++++-- docs/functions/vec3.inverse.html | 402 +++++++-- docs/functions/vec3.invert.html | 402 +++++++-- docs/functions/vec3.len.html | 400 +++++++-- docs/functions/vec3.lenSq.html | 400 +++++++-- docs/functions/vec3.length.html | 400 +++++++-- docs/functions/vec3.lengthSq.html | 400 +++++++-- docs/functions/vec3.lerp.html | 406 +++++++-- docs/functions/vec3.lerpV.html | 406 +++++++-- docs/functions/vec3.max.html | 404 +++++++-- docs/functions/vec3.min.html | 404 +++++++-- docs/functions/vec3.mul.html | 404 +++++++-- docs/functions/vec3.mulScalar.html | 404 +++++++-- docs/functions/vec3.multiply.html | 404 +++++++-- docs/functions/vec3.negate.html | 402 +++++++-- docs/functions/vec3.normalize.html | 402 +++++++-- docs/functions/vec3.random.html | 402 +++++++-- docs/functions/vec3.rotateX.html | 371 ++++++++ docs/functions/vec3.rotateY.html | 371 ++++++++ docs/functions/vec3.rotateZ.html | 371 ++++++++ docs/functions/vec3.round.html | 402 +++++++-- docs/functions/vec3.scale.html | 404 +++++++-- docs/functions/vec3.set.html | 408 +++++++-- docs/functions/vec3.setDefaultType.html | 422 +++++++-- docs/functions/vec3.sub.html | 404 +++++++-- docs/functions/vec3.subtract.html | 404 +++++++-- docs/functions/vec3.transformMat3.html | 404 +++++++-- docs/functions/vec3.transformMat4.html | 404 +++++++-- .../functions/vec3.transformMat4Upper3x3.html | 404 +++++++-- docs/functions/vec3.transformQuat.html | 404 +++++++-- docs/functions/vec3.zero.html | 400 +++++++-- docs/functions/vec4.add.html | 395 +++++++-- docs/functions/vec4.addScaled.html | 397 +++++++-- docs/functions/vec4.ceil.html | 393 ++++++-- docs/functions/vec4.clamp.html | 397 +++++++-- docs/functions/vec4.clone.html | 397 +++++++-- docs/functions/vec4.copy.html | 397 +++++++-- docs/functions/vec4.create.html | 397 +++++++-- docs/functions/vec4.dist.html | 393 ++++++-- docs/functions/vec4.distSq.html | 393 ++++++-- docs/functions/vec4.distance.html | 393 ++++++-- docs/functions/vec4.distanceSq.html | 393 ++++++-- docs/functions/vec4.div.html | 395 +++++++-- docs/functions/vec4.divScalar.html | 395 +++++++-- docs/functions/vec4.divide.html | 395 +++++++-- docs/functions/vec4.dot.html | 393 ++++++-- docs/functions/vec4.equals.html | 393 ++++++-- docs/functions/vec4.equalsApproximately.html | 393 ++++++-- docs/functions/vec4.floor.html | 393 ++++++-- docs/functions/vec4.fromValues.html | 397 +++++++-- docs/functions/vec4.inverse.html | 393 ++++++-- docs/functions/vec4.invert.html | 393 ++++++-- docs/functions/vec4.len.html | 391 ++++++-- docs/functions/vec4.lenSq.html | 391 ++++++-- docs/functions/vec4.length.html | 391 ++++++-- docs/functions/vec4.lengthSq.html | 391 ++++++-- docs/functions/vec4.lerp.html | 397 +++++++-- docs/functions/vec4.lerpV.html | 397 +++++++-- docs/functions/vec4.max.html | 395 +++++++-- docs/functions/vec4.min.html | 395 +++++++-- docs/functions/vec4.mul.html | 395 +++++++-- docs/functions/vec4.mulScalar.html | 395 +++++++-- docs/functions/vec4.multiply.html | 395 +++++++-- docs/functions/vec4.negate.html | 393 ++++++-- docs/functions/vec4.normalize.html | 393 ++++++-- docs/functions/vec4.round.html | 393 ++++++-- docs/functions/vec4.scale.html | 395 +++++++-- docs/functions/vec4.set.html | 401 +++++++-- docs/functions/vec4.setDefaultType.html | 413 +++++++-- docs/functions/vec4.sub.html | 395 +++++++-- docs/functions/vec4.subtract.html | 395 +++++++-- docs/functions/vec4.transformMat4.html | 395 +++++++-- docs/functions/vec4.zero.html | 391 ++++++-- docs/index.html | 472 +++++++--- docs/modules.html | 372 +++++++- docs/modules/mat3.html | 438 +++++++-- docs/modules/mat4.html | 480 +++++++--- docs/modules/quat.html | 459 +++++++--- docs/modules/utils.html | 358 +++++++- docs/modules/vec2.html | 484 +++++++--- docs/modules/vec3.html | 501 ++++++++--- docs/modules/vec4.html | 471 +++++++--- docs/types/Mat3-1.html | 350 +++++++- docs/types/Mat4-1.html | 350 +++++++- docs/types/Quat-1.html | 350 +++++++- docs/types/Vec2-1.html | 350 +++++++- docs/types/Vec3-1.html | 350 +++++++- docs/types/Vec4-1.html | 350 +++++++- docs/types/mat3.Mat3LikeCtor.html | 379 ++++++-- docs/types/mat4.Mat4LikeCtor.html | 393 ++++++-- docs/types/quat.RotationOrder.html | 378 ++++++-- docs/variables/utils.EPSILON.html | 348 +++++++- src/vec2-impl.ts | 23 + src/vec3-impl.ts | 95 +- test/tests/vec2-test.js | 25 + test/tests/vec3-test.js | 71 ++ 303 files changed, 92056 insertions(+), 20928 deletions(-) create mode 100644 docs/functions/vec2.rotate.html create mode 100644 docs/functions/vec3.rotateX.html create mode 100644 docs/functions/vec3.rotateY.html create mode 100644 docs/functions/vec3.rotateZ.html diff --git a/dist/2.x/mat3-impl.d.ts b/dist/2.x/mat3-impl.d.ts index e36cf05..23f3ebe 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 declare type Mat3LikeCtor = new (n: number) => Mat3; +export 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` diff --git a/dist/2.x/mat3.d.ts b/dist/2.x/mat3.d.ts index d916eb9..691ff27 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 declare type Mat3 = number[] | Float32Array | Float64Array; +export type Mat3 = number[] | Float32Array | Float64Array; diff --git a/dist/2.x/mat4-impl.d.ts b/dist/2.x/mat4-impl.d.ts index b0263f4..c024bec 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 declare type Mat4LikeCtor = new (n: number) => Mat4; +export 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` diff --git a/dist/2.x/mat4.d.ts b/dist/2.x/mat4.d.ts index 0fc8d12..90b1708 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 declare type Mat4 = number[] | Float32Array | Float64Array; +export type Mat4 = number[] | Float32Array | Float64Array; diff --git a/dist/2.x/quat-impl.d.ts b/dist/2.x/quat-impl.d.ts index ad93ebd..7153b02 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 declare type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx'; +export 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 3aea92e..7a35408 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 declare type Quat = number[] | Float32Array | Float64Array; +export type Quat = number[] | Float32Array | Float64Array; /** * * Quat4 math functions. diff --git a/dist/2.x/vec2-impl.d.ts b/dist/2.x/vec2-impl.d.ts index a102ade..fb50c44 100644 --- a/dist/2.x/vec2-impl.d.ts +++ b/dist/2.x/vec2-impl.d.ts @@ -350,3 +350,12 @@ export declare function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2; * @returns the transformed vector */ export declare function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2; +/** + * Rotate a 2D vector + * + * @param a The vec2 point to rotate + * @param b The origin of the rotation + * @param rad The angle of rotation in radians + * @returns the rotated vector + */ +export declare function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2): Vec2; diff --git a/dist/2.x/vec2.d.ts b/dist/2.x/vec2.d.ts index 6965cc8..ab730b6 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 declare type Vec2 = number[] | Float32Array | Float64Array; +export type Vec2 = number[] | Float32Array | Float64Array; /** * * Vec2 math functions. diff --git a/dist/2.x/vec3-impl.d.ts b/dist/2.x/vec3-impl.d.ts index cf222ec..20b256d 100644 --- a/dist/2.x/vec3-impl.d.ts +++ b/dist/2.x/vec3-impl.d.ts @@ -389,3 +389,33 @@ export declare function getAxis(m: Mat4, axis: number, dst?: Vec3): Vec3; * @param dst - The vector to set. If not passed a new one is created. */ export declare function getScaling(m: Mat4, dst: Vec3): Vec3; +/** + * Rotate a 3D vector around the x-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +export declare function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3): Vec3; +/** + * Rotate a 3D vector around the y-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +export declare function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3): Vec3; +/** + * Rotate a 3D vector around the z-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns {vec3} out + */ +export declare function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3): Vec3; diff --git a/dist/2.x/vec3.d.ts b/dist/2.x/vec3.d.ts index dc13eef..7d21ca3 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 declare type Vec3 = number[] | Float32Array | Float64Array; +export 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 3f6426a..09a3f29 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 declare type Vec4 = number[] | Float32Array | Float64Array; +export 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 997286a..8ced8df 100644 --- a/dist/2.x/wgpu-matrix.js +++ b/dist/2.x/wgpu-matrix.js @@ -100,12 +100,12 @@ var utils = /*#__PURE__*/Object.freeze({ __proto__: null, get EPSILON () { return EPSILON; }, - setEpsilon: setEpsilon, degToRad: degToRad, - radToDeg: radToDeg, - lerp: lerp$4, + euclideanModulo: euclideanModulo, inverseLerp: inverseLerp, - euclideanModulo: euclideanModulo + lerp: lerp$4, + radToDeg: radToDeg, + setEpsilon: setEpsilon }); /* @@ -816,55 +816,73 @@ dst[1] = m[1] * x + m[5] * y + m[9]; return dst; } + /** + * Rotate a 2D vector + * + * @param a The vec2 point to rotate + * @param b The origin of the rotation + * @param rad The angle of rotation in radians + * @returns the rotated vector + */ + function rotate$2(a, b, rad, dst) { + dst = dst || new VecType$2(2); + // Translate point to the origin + const p0 = a[0] - b[0], p1 = a[1] - b[1], sinC = Math.sin(rad), cosC = Math.cos(rad); + //perform rotation and translate to correct position + dst[0] = p0 * cosC - p1 * sinC + b[0]; + dst[1] = p0 * sinC + p1 * cosC + b[1]; + return dst; + } 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, - subtract: subtract$3, - sub: sub$3, - equalsApproximately: equalsApproximately$5, + 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, + 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, lerp: lerp$3, lerpV: lerpV$2, max: max$2, min: min$2, + mul: mul$5, mulScalar: mulScalar$3, - 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, + negate: negate$4, + normalize: normalize$3, random: random$1, - zero: zero$2, + rotate: rotate$2, + round: round$2, + scale: scale$5, + set: set$5, + setDefaultType: setDefaultType$6, + sub: sub$3, + subtract: subtract$3, + transformMat3: transformMat3$1, transformMat4: transformMat4$2, - transformMat3: transformMat3$1 + zero: zero$2 }); /* @@ -1619,36 +1637,36 @@ var mat3Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - setDefaultType: setDefaultType$4, + clone: clone$4, + copy: copy$4, create: create$3, - set: set$4, + determinant: determinant$1, + equals: equals$4, + equalsApproximately: equalsApproximately$4, fromMat4: fromMat4, fromQuat: fromQuat$1, - negate: negate$3, - copy: copy$4, - clone: clone$4, - equalsApproximately: equalsApproximately$4, - equals: equals$4, + getAxis: getAxis$2, + getScaling: getScaling$2, + getTranslation: getTranslation$2, identity: identity$2, - transpose: transpose$1, inverse: inverse$4, - determinant: determinant$1, invert: invert$3, - multiply: multiply$4, mul: mul$4, - setTranslation: setTranslation$1, - getTranslation: getTranslation$2, - getAxis: getAxis$2, - setAxis: setAxis$1, - getScaling: getScaling$2, - translation: translation$1, - translate: translate$1, - rotation: rotation$1, + multiply: multiply$4, + negate: negate$3, rotate: rotate$1, - scaling: scaling$1, + rotation: rotation$1, scale: scale$4, - uniformScaling: uniformScaling$1, - uniformScale: uniformScale$1 + scaling: scaling$1, + set: set$4, + setAxis: setAxis$1, + setDefaultType: setDefaultType$4, + setTranslation: setTranslation$1, + translate: translate$1, + translation: translation$1, + transpose: transpose$1, + uniformScale: uniformScale$1, + uniformScaling: uniformScaling$1 }); /* @@ -2323,60 +2341,141 @@ dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz); return dst; } + /** + * Rotate a 3D vector around the x-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ + function rotateX$2(a, b, rad, dst) { + dst = dst || new VecType$1(3); + let p = [], r = []; + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + //perform rotation + r[0] = p[0]; + r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad); + r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); + //translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + return dst; + } + /** + * Rotate a 3D vector around the y-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ + function rotateY$2(a, b, rad, dst) { + dst = dst || new VecType$1(3); + let p = [], r = []; + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + // perform rotation + r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad); + r[1] = p[1]; + r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); + // translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + return dst; + } + /** + * Rotate a 3D vector around the z-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns {vec3} out + */ + function rotateZ$2(a, b, rad, dst) { + dst = dst || new VecType$1(3); + let p = [], r = []; + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + // perform rotation + r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad); + r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad); + r[2] = p[2]; + // translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + return dst; + } var vec3Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - create: create$4, - setDefaultType: setDefaultType$5, - 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, - subtract: subtract$2, - sub: sub$2, - equalsApproximately: equalsApproximately$3, + ceil: ceil$1, + clamp: clamp$1, + clone: clone$3, + copy: copy$3, + create: create$4, + 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, + 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, lerp: lerp$2, lerpV: lerpV$1, max: max$1, min: min$1, + mul: mul$3, mulScalar: mulScalar$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, + negate: negate$2, + normalize: normalize$2, random: random, - zero: zero$1, + rotateX: rotateX$2, + rotateY: rotateY$2, + rotateZ: rotateZ$2, + round: round$1, + scale: scale$3, + set: set$3, + setDefaultType: setDefaultType$5, + sub: sub$2, + subtract: subtract$2, + transformMat3: transformMat3, transformMat4: transformMat4$1, transformMat4Upper3x3: transformMat4Upper3x3, - transformMat3: transformMat3, transformQuat: transformQuat, - getTranslation: getTranslation$1, - getAxis: getAxis$1, - getScaling: getScaling$1 + zero: zero$1 }); /** @@ -3901,50 +4000,50 @@ var mat4Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - setDefaultType: setDefaultType$3, + aim: aim, + axisRotate: axisRotate, + axisRotation: axisRotation, + cameraAim: cameraAim, + clone: clone$2, + copy: copy$2, create: create$2, - set: set$2, + determinant: determinant, + equals: equals$2, + equalsApproximately: equalsApproximately$2, fromMat3: fromMat3, fromQuat: fromQuat, - negate: negate$1, - copy: copy$2, - clone: clone$2, - equalsApproximately: equalsApproximately$2, - equals: equals$2, + frustum: frustum, + getAxis: getAxis, + getScaling: getScaling, + getTranslation: getTranslation, identity: identity$1, - transpose: transpose, inverse: inverse$2, - determinant: determinant, invert: invert$1, - multiply: multiply$2, + lookAt: lookAt, mul: mul$2, - setTranslation: setTranslation, - getTranslation: getTranslation, - getAxis: getAxis, - setAxis: setAxis, - getScaling: getScaling, - perspective: perspective, + multiply: multiply$2, + negate: negate$1, ortho: ortho, - frustum: frustum, - aim: aim, - cameraAim: cameraAim, - lookAt: lookAt, - translation: translation, - translate: translate, - rotationX: rotationX, + perspective: perspective, + rotate: rotate, rotateX: rotateX$1, - rotationY: rotationY, rotateY: rotateY$1, - rotationZ: rotationZ, rotateZ: rotateZ$1, - axisRotation: axisRotation, rotation: rotation, - axisRotate: axisRotate, - rotate: rotate, - scaling: scaling, + rotationX: rotationX, + rotationY: rotationY, + rotationZ: rotationZ, scale: scale$2, - uniformScaling: uniformScaling, - uniformScale: uniformScale + scaling: scaling, + set: set$2, + setAxis: setAxis, + setDefaultType: setDefaultType$3, + setTranslation: setTranslation, + translate: translate, + translation: translation, + transpose: transpose, + uniformScale: uniformScale, + uniformScaling: uniformScaling }); /* @@ -4711,43 +4810,43 @@ var quatImpl = /*#__PURE__*/Object.freeze({ __proto__: null, - create: create$1, - setDefaultType: setDefaultType$2, - fromValues: fromValues$1, - set: set$1, - fromAxisAngle: fromAxisAngle, - toAxisAngle: toAxisAngle, + add: add$1, angle: angle, - multiply: multiply$1, - mul: mul$1, - rotateX: rotateX, - rotateY: rotateY, - rotateZ: rotateZ, - slerp: slerp, - inverse: inverse$1, + clone: clone$1, conjugate: conjugate, - fromMat: fromMat, - fromEuler: fromEuler, copy: copy$1, - clone: clone$1, - add: add$1, - subtract: subtract$1, - sub: sub$1, - mulScalar: mulScalar$1, - scale: scale$1, + create: create$1, divScalar: divScalar$1, dot: dot$1, - lerp: lerp$1, - length: length$1, + equals: equals$1, + equalsApproximately: equalsApproximately$1, + fromAxisAngle: fromAxisAngle, + fromEuler: fromEuler, + fromMat: fromMat, + fromValues: fromValues$1, + identity: identity, + inverse: inverse$1, len: len$1, - lengthSq: lengthSq$1, lenSq: lenSq$1, + length: length$1, + lengthSq: lengthSq$1, + lerp: lerp$1, + mul: mul$1, + mulScalar: mulScalar$1, + multiply: multiply$1, normalize: normalize$1, - equalsApproximately: equalsApproximately$1, - equals: equals$1, - identity: identity, + rotateX: rotateX, + rotateY: rotateY, + rotateZ: rotateZ, rotationTo: rotationTo, - sqlerp: sqlerp + scale: scale$1, + set: set$1, + setDefaultType: setDefaultType$2, + slerp: slerp, + sqlerp: sqlerp, + sub: sub$1, + subtract: subtract$1, + toAxisAngle: toAxisAngle }); /* @@ -5374,48 +5473,48 @@ var vec4Impl = /*#__PURE__*/Object.freeze({ __proto__: null, - create: create, - setDefaultType: setDefaultType$1, - fromValues: fromValues, - set: set, - ceil: ceil, - floor: floor, - round: round, - clamp: clamp, add: add, addScaled: addScaled, - subtract: subtract, - sub: sub, - equalsApproximately: equalsApproximately, + ceil: ceil, + 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, + equalsApproximately: equalsApproximately, + floor: floor, + fromValues: fromValues, + inverse: inverse, + invert: invert, + len: len, + lenSq: lenSq, + length: length, + lengthSq: lengthSq, lerp: lerp, lerpV: lerpV, max: max, min: min, + mul: mul, mulScalar: mulScalar, - scale: scale, - 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 + negate: negate, + normalize: normalize, + round: round, + scale: scale, + set: set, + setDefaultType: setDefaultType$1, + sub: sub, + subtract: subtract, + transformMat4: transformMat4, + zero: zero }); /** diff --git a/dist/2.x/wgpu-matrix.js.map b/dist/2.x/wgpu-matrix.js.map index 3476f61..fae371d 100644 --- a/dist/2.x/wgpu-matrix.js.map +++ b/dist/2.x/wgpu-matrix.js.map @@ -1 +1 @@ -{"version":3,"file":"wgpu-matrix.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = 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?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = 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","Vec3Type","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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G,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,MA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,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,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,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"} \ No newline at end of file +{"version":3,"file":"wgpu-matrix.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = 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?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n * \n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = 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}\n\n/**\n * Rotate a 3D vector around the x-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n","\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","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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G,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;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,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAC9D,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GA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G;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,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AG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,IAAA,G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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 15ed94b..b54883c 100644 --- a/dist/2.x/wgpu-matrix.min.js +++ b/dist/2.x/wgpu-matrix.min.js @@ -1,68 +1,70 @@ /* wgpu-matrix@2.5.1, 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){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))); +(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){const b=v;v=a;return b}function H(a,b,c){const d=new v(3);void 0!==a&&(d[0]=a,void 0!==b&&(d[1]=b,void 0!==c&&(d[2]=c))); return d}function wa(a,b,c){c=c||new z(2);c[0]=a[0]-b[0];c[1]=a[1]-b[1];return c}function xa(a,b,c){c=c||new z(2);c[0]=a[0]*b;c[1]=a[1]*b;return c}function ya(a,b){b=b||new z(2);b[0]=1/a[0];b[1]=1/a[1];return b}function za(a,b){return a[0]*b[0]+a[1]*b[1]}function Aa(a){const b=a[0];a=a[1];return Math.sqrt(b*b+a*a)}function Ba(a){const b=a[0];a=a[1];return b*b+a*a}function Ca(a,b){const c=a[0]-b[0];a=a[1]-b[1];return Math.sqrt(c*c+a*a)}function Da(a,b){const c=a[0]-b[0];a=a[1]-b[1];return c*c+a*a} function Ea(a,b){b=b||new z(2);b[0]=a[0];b[1]=a[1];return b}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,b,c){c=c||new z(2);c[0]=a[0]/b[0];c[1]=a[1]/b[1];return c}function Ha(a){const b=Ia;Ia=a;G=Ja.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 Ka(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 La(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 Ma(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 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-5m&&(m=-m,h=-h,l=-l,k=-k,b=-b);if(1-m>t){const n=Math.acos(m),q=Math.sin(n);m=Math.sin((1-c)*n)/q;c=Math.sin(c*n)/q}else m=1-c;d[0]=m*e+c*h;d[1]=m*f+c* l;d[2]=m*g+c*k;d[3]=m*a+c*b;return d}function gb(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}function hb(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}function ib(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}function jb(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function kb(a){const b=a[0],c=a[1],d=a[2];a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)}function lb(a){const b=a[0],c=a[1],d=a[2];a=a[3]; return b*b+c*c+d*d+a*a}function mb(a,b){b=b||new B(4);const c=a[0],d=a[1],e=a[2];a=a[3];const f=Math.sqrt(c*c+d*d+e*e+a*a);1E-5new Float32Array(12)],[Float64Array,()=>new Float64Array(12)],[Array,()=>Array(12).fill(0)]]);let G=Ja.get(Float32Array);var Bb=Object.freeze({__proto__:null,setDefaultType:Ha,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(.999999new Float32Array(12)],[Float64Array,()=>new Float64Array(12)],[Array,()=>Array(12).fill(0)]]);let G=Ja.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=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},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||H();ta=ta||H(1,0,0);ua=ua||H(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]) Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = 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?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = 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","Vec3Type","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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AG,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,G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G,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,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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"} \ No newline at end of file +{"version":3,"file":"wgpu-matrix.module.js","sources":["../../../src/utils.ts","../../../src/vec2.ts","../../../src/vec3.ts","../../../src/vec2-impl.ts","../../../src/mat3-impl.ts","../../../src/vec3-impl.ts","../../../src/mat4-impl.ts","../../../src/quat.ts","../../../src/quat-impl.ts","../../../src/vec4.ts","../../../src/vec4-impl.ts","../../../src/wgpu-matrix.ts"],"sourcesContent":["/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nexport let EPSILON = 0.000001;\n\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nexport function setEpsilon(v: number): number {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nexport function degToRad(degrees: number): number {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nexport function radToDeg(radians: number): number {\n return radians * 180 / Math.PI;\n}\n\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nexport function inverseLerp(a: number, b: number, v: number): number {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 2 values, Float32Array with 2 values, or a Float64Array with 2 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec2.setDefaultType}.\n */\nexport type Vec2 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec2 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nexport function setDefaultType(ctor: new (n: number) => Vec2) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport function create(x = 0, y = 0): Vec2 {\n const dst = new VecType(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * A JavaScript array with 3 values, Float32Array with 3 values, or a Float64Array with 3 values.\n * When created by the library will create the default type which is `Float32Array`\n * but can be set by calling {@link vec3.setDefaultType}.\n */\nexport type Vec3 = number[] | Float32Array | Float64Array;\n\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\n\nexport let VecType: new (n: number) => Vec3 = Float32Array;\n\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nexport function setDefaultType(ctor: new (n: number) => Vec3) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport function create(x?: number, y?: number, z?: number): Vec3 {\n const dst = new VecType(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Vec2, create, setDefaultType, VecType } from './vec2';\nimport { Vec3, VecType as Vec3Type } from './vec3';\n\nexport default Vec2;\nexport { create, setDefaultType };\n\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = x;\n dst[1] = y;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec2, min = 0, max = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec2, b: Vec2, scale: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec2, b: Vec2): number {\n const ax = a[0];\n const ay = a[1];\n const bx = 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?: Vec3): Vec3 {\n dst = dst || new Vec3Type(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nexport function dot(a: Vec2, b: Vec2): number {\n return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nexport function length(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nexport const len = length;\n\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport function lengthSq(v: Vec2): number {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nexport const lenSq = lengthSq;\n\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport function distance(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nexport const dist = distance;\n\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport function distanceSq(a: Vec2, b: Vec2): number {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nexport const distSq = distanceSq;\n\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nexport function normalize(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n } else {\n dst[0] = 0;\n dst[1] = 0;\n }\n\n return dst;\n}\n\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nexport function negate(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = -v[0];\n dst[1] = -v[1];\n\n return dst;\n}\n\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport function copy(v: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = v[0];\n dst[1] = v[1];\n\n return dst;\n}\n\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nexport const clone = copy;\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport function multiply(a: Vec2, b: Vec2, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n\n return dst;\n}\n\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport function divide(a: Vec2, b: Vec2, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n\n return dst;\n}\n\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nexport const div = divide;\n\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nexport function random(scale = 1, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n\n return dst;\n}\n\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nexport function zero(dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n dst[0] = 0;\n dst[1] = 0;\n\n return dst;\n}\n\n\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat4(v: Vec2, m: Mat4, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n\n return dst;\n}\n\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nexport function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || new VecType(2);\n\n const x = v[0];\n const y = v[1];\n\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n\n return dst;\n}\n\n/**\n * Rotate a 2D vector\n * \n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\nexport function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) {\n dst = dst || new VecType(2);\n\n // Translate point to the origin\n const p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad);\n\n //perform rotation and translate to correct position\n dst[0] = p0 * cosC - p1 * sinC + b[0];\n dst[1] = p0 * sinC + p1 * cosC + b[1];\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\nimport * as utils from './utils.js';\nimport { Quat } from './quat';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport Vec2, * as vec2 from './vec2-impl';\n\nexport default Mat3;\n\nexport type Mat3LikeCtor = new (n: number) => Mat3;\n\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType: Mat3LikeCtor = Float32Array;\n\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map Mat3>([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3: () => Mat3 = ctorMap.get(Float32Array)!;\n\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nexport function setDefaultType(ctor: new (n: number) => Mat3) {\n const oldType = MatType;\n MatType = ctor;\n newMat3 = ctorMap.get(ctor)!;\n return oldType;\n}\n\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nexport function create(\n v0?: number, v1?: number, v2?: number,\n v3?: number, v4?: number, v5?: number,\n v6?: number, v7?: number, v8?: number): Mat3 {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return dst;\n}\n\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nexport function set(\n v0: number, v1: number, v2: number,\n v3: number, v4: number, v5: number,\n v6: number, v7: number, v8: number, dst?: Mat3) {\n dst = dst || newMat3();\n\n dst[0] = v0; dst[1] = v1; dst[ 2] = v2; dst[ 3] = 0;\n dst[4] = v3; dst[5] = v4; dst[ 6] = v5; dst[ 7] = 0;\n dst[8] = v6; dst[9] = v7; dst[10] = v8; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nexport function fromMat4(m4: Mat4, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n dst[0] = m4[0]; dst[1] = m4[1]; dst[ 2] = m4[ 2]; dst[ 3] = 0;\n dst[4] = m4[4]; dst[5] = m4[5]; dst[ 6] = m4[ 6]; dst[ 7] = 0;\n dst[8] = m4[8]; dst[9] = m4[9]; dst[10] = m4[10]; dst[11] = 0;\n return dst;\n}\n\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nexport function fromQuat(q: Quat, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3];\n const x2 = x + x; const y2 = y + y; const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dst[ 0] = 1 - yy - zz; dst[ 1] = yx + wz; dst[ 2] = zx - wy; dst[ 3] = 0;\n dst[ 4] = yx - wz; dst[ 5] = 1 - xx - zz; dst[ 6] = zy + wx; dst[ 7] = 0;\n dst[ 8] = zx + wy; dst[ 9] = zy - wx; dst[10] = 1 - xx - yy; dst[11] = 0;\n\n return dst;\n}\n\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nexport function negate(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = -m[ 0]; dst[ 1] = -m[ 1]; dst[ 2] = -m[ 2];\n dst[ 4] = -m[ 4]; dst[ 5] = -m[ 5]; dst[ 6] = -m[ 6];\n dst[ 8] = -m[ 8]; dst[ 9] = -m[ 9]; dst[10] = -m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport function copy(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = m[ 0]; dst[ 1] = m[ 1]; dst[ 2] = m[ 2];\n dst[ 4] = m[ 4]; dst[ 5] = m[ 5]; dst[ 6] = m[ 6];\n dst[ 8] = m[ 8]; dst[ 9] = m[ 9]; dst[10] = m[10];\n\n return dst;\n}\n\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nexport const clone = copy;\n\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nexport function equalsApproximately(a: Mat3, b: Mat3): boolean {\n return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON &&\n Math.abs(a[ 1] - b[ 1]) < utils.EPSILON &&\n Math.abs(a[ 2] - b[ 2]) < utils.EPSILON &&\n Math.abs(a[ 4] - b[ 4]) < utils.EPSILON &&\n Math.abs(a[ 5] - b[ 5]) < utils.EPSILON &&\n Math.abs(a[ 6] - b[ 6]) < utils.EPSILON &&\n Math.abs(a[ 8] - b[ 8]) < utils.EPSILON &&\n Math.abs(a[ 9] - b[ 9]) < utils.EPSILON &&\n Math.abs(a[10] - b[10]) < utils.EPSILON;\n}\n\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nexport function equals(a: Mat3, b: Mat3): boolean {\n return a[ 0] === b[ 0] &&\n a[ 1] === b[ 1] &&\n a[ 2] === b[ 2] &&\n a[ 4] === b[ 4] &&\n a[ 5] === b[ 5] &&\n a[ 6] === b[ 6] &&\n a[ 8] === b[ 8] &&\n a[ 9] === b[ 9] &&\n a[10] === b[10];\n}\n\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nexport function identity(dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nexport function transpose(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n if (dst === m) {\n let t: number;\n\n // 0 1 2\n // 4 5 6\n // 8 9 10\n\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n\n return dst;\n }\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n dst[ 0] = m00; dst[ 1] = m10; dst[ 2] = m20;\n dst[ 4] = m01; dst[ 5] = m11; dst[ 6] = m21;\n dst[ 8] = m02; dst[ 9] = m12; dst[10] = m22;\n\n return dst;\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport function inverse(m: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n\n dst[ 0] = b01 * invDet;\n dst[ 1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[ 2] = ( m12 * m01 - m02 * m11) * invDet;\n dst[ 4] = b11 * invDet;\n dst[ 5] = ( m22 * m00 - m02 * m20) * invDet;\n dst[ 6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[ 8] = b21 * invDet;\n dst[ 9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = ( m11 * m00 - m01 * m10) * invDet;\n\n return dst;\n}\n\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nexport function determinant(m: Mat3): number {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nexport const invert = inverse;\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport function multiply(a: Mat3, b: Mat3, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[ 4 + 0];\n const a11 = a[ 4 + 1];\n const a12 = a[ 4 + 2];\n const a20 = a[ 8 + 0];\n const a21 = a[ 8 + 1];\n const a22 = a[ 8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[ 4 + 0];\n const b11 = b[ 4 + 1];\n const b12 = b[ 4 + 2];\n const b20 = b[ 8 + 0];\n const b21 = b[ 8 + 1];\n const b22 = b[ 8 + 2];\n\n dst[ 0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[ 1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[ 2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[ 4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[ 5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[ 6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[ 8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[ 9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\n return dst;\n}\n\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nexport const mul = multiply;\n\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nexport function setTranslation(a: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || identity();\n if (a !== dst) {\n dst[ 0] = a[ 0];\n dst[ 1] = a[ 1];\n dst[ 2] = a[ 2];\n dst[ 4] = a[ 4];\n dst[ 5] = a[ 5];\n dst[ 6] = a[ 6];\n }\n dst[ 8] = v[0];\n dst[ 9] = v[1];\n dst[10] = 1;\n return dst;\n}\n\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nexport function getTranslation(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nexport function getAxis(m: Mat3, axis: number, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nexport function setAxis(m: Mat3, v: Vec2, axis: number, dst?: Mat3): Mat3 {\n if (dst !== m) {\n dst = copy(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nexport function getScaling(m: Mat3, dst?: Vec2): Vec2 {\n dst = dst || vec2.create();\n\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nexport function translation(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = 1; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = 1; dst[ 6] = 0;\n dst[ 8] = v[0]; dst[ 9] = v[1]; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nexport function translate(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n\n if (m !== dst) {\n dst[ 0] = m00;\n dst[ 1] = m01;\n dst[ 2] = m02;\n dst[ 4] = m10;\n dst[ 5] = m11;\n dst[ 6] = m12;\n }\n\n dst[ 8] = m00 * v0 + m10 * v1 + m20;\n dst[ 9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nexport function rotation(angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c; dst[ 1] = s; dst[ 2] = 0;\n dst[ 4] = -s; dst[ 5] = c; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nexport function rotate(m: Mat3, angleInRadians: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n\n dst[ 0] = c * m00 + s * m10;\n dst[ 1] = c * m01 + s * m11;\n dst[ 2] = c * m02 + s * m12;\n\n dst[ 4] = c * m10 - s * m00;\n dst[ 5] = c * m11 - s * m01;\n dst[ 6] = c * m12 - s * m02;\n\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function scaling(v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = v[0]; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = v[1]; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function scale(m: Mat3, v: Vec2, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n const v0 = v[0];\n const v1 = v[1];\n\n dst[ 0] = v0 * m[0 * 4 + 0];\n dst[ 1] = v0 * m[0 * 4 + 1];\n dst[ 2] = v0 * m[0 * 4 + 2];\n\n dst[ 4] = v1 * m[1 * 4 + 0];\n dst[ 5] = v1 * m[1 * 4 + 1];\n dst[ 6] = v1 * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nexport function uniformScaling(s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s; dst[ 1] = 0; dst[ 2] = 0;\n dst[ 4] = 0; dst[ 5] = s; dst[ 6] = 0;\n dst[ 8] = 0; dst[ 9] = 0; dst[10] = 1;\n\n return dst;\n}\n\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nexport function uniformScale(m: Mat3, s: number, dst?: Mat3): Mat3 {\n dst = dst || newMat3();\n\n dst[ 0] = s * m[0 * 4 + 0];\n dst[ 1] = s * m[0 * 4 + 1];\n dst[ 2] = s * m[0 * 4 + 2];\n\n dst[ 4] = s * m[1 * 4 + 0];\n dst[ 5] = s * m[1 * 4 + 1];\n dst[ 6] = s * m[1 * 4 + 2];\n\n if (m !== dst) {\n dst[ 8] = m[ 8];\n dst[ 9] = m[ 9];\n dst[10] = m[10];\n }\n\n return dst;\n}\n","/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nimport * as utils from './utils.js';\nimport { Vec3, create, setDefaultType, VecType } from './vec3';\nimport { Mat3 } from './mat3';\nimport { Mat4 } from './mat4';\nimport { Quat } from './quat';\n\nexport default Vec3;\nexport { create, setDefaultType };\n\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nexport const fromValues = create;\n\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nexport function set(x: number, y: number, z: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n\n return dst;\n}\n\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nexport function ceil(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nexport function floor(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n\n return dst;\n}\n\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nexport function round(v: Vec3, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n\n return dst;\n}\n\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nexport function clamp(v: Vec3, min = 0, max = 1, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n\n return dst;\n}\n\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nexport function add(a: Vec3, b: Vec3, dst?: Vec3) {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n\n return dst;\n}\n\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nexport function addScaled(a: Vec3, b: Vec3, scale: number, dst?: Vec3): Vec3 {\n dst = dst || new VecType(3);\n\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n\n return dst;\n}\n\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nexport function angle(a: Vec3, b: Vec3): number {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = 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}\n\n/**\n * Rotate a 3D vector around the x-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\nexport function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * \n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\nexport function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) {\n dst = dst || new VecType(3);\n let p = [],\n r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n // translate to correct position\n dst[0] = r[0] + b[0];\n dst[1] = r[1] + b[1];\n dst[2] = r[2] + b[2];\n\n return dst;\n}\n","\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","Vec3Type","length","len","lengthSq","lenSq","distance","dist","distanceSq","distSq","normalize","negate","copy","clone","multiply","mul","divide","div","random","zero","transformMat4","transformMat3","rotate","MatType","fromQuat","identity","transpose","determinant","setTranslation","getTranslation","vec2.create","getAxis","setAxis","getScaling","translation","translate","rotation","scaling","uniformScaling","uniformScale","rotateX","rotateY","rotateZ","vec3.create","vec3.normalize","vec3.subtract","vec3.cross","vec3.dot","vec3.len","mat3.setDefaultType","mat4.setDefaultType","quat.setDefaultType","vec2.setDefaultType","vec3.setDefaultType","vec4.setDefaultType"],"mappings":"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AC,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;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,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9D,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAAE,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,C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AAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC/C,SAAC,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAEn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AAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,IAAA,GAAG,CAAC,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"} \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index abd0485..4c8fa61 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,54 +1,58 @@ "use strict"; -"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 - */ +"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 + *) +*/ diff --git a/docs/assets/search.js b/docs/assets/search.js index 756537b..3d01db1 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -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 +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\":64,\"name\":\"uniformScaling\",\"url\":\"functions/mat3.uniformScaling.html\",\"classes\":\"\",\"parent\":\"mat3\"},{\"kind\":64,\"name\":\"uniformScale\",\"url\":\"functions/mat3.uniformScale.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\":64,\"name\":\"uniformScaling\",\"url\":\"functions/mat4.uniformScaling.html\",\"classes\":\"\",\"parent\":\"mat4\"},{\"kind\":64,\"name\":\"uniformScale\",\"url\":\"functions/mat4.uniformScale.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\":64,\"name\":\"rotate\",\"url\":\"functions/vec2.rotate.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\":64,\"name\":\"rotateX\",\"url\":\"functions/vec3.rotateX.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"rotateY\",\"url\":\"functions/vec3.rotateY.html\",\"classes\":\"\",\"parent\":\"vec3\"},{\"kind\":64,\"name\":\"rotateZ\",\"url\":\"functions/vec3.rotateZ.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.687]],[\"comment/0\",[]],[\"name/1\",[1,47.673]],[\"comment/1\",[]],[\"name/2\",[1,47.673]],[\"comment/2\",[]],[\"name/3\",[0,36.687]],[\"comment/3\",[]],[\"name/4\",[2,38.118]],[\"comment/4\",[]],[\"name/5\",[3,38.118]],[\"comment/5\",[]],[\"name/6\",[4,52.781]],[\"comment/6\",[]],[\"name/7\",[5,47.673]],[\"comment/7\",[]],[\"name/8\",[6,39.788]],[\"comment/8\",[]],[\"name/9\",[7,38.118]],[\"comment/9\",[]],[\"name/10\",[8,38.118]],[\"comment/10\",[]],[\"name/11\",[9,38.118]],[\"comment/11\",[]],[\"name/12\",[10,44.308]],[\"comment/12\",[]],[\"name/13\",[11,47.673]],[\"comment/13\",[]],[\"name/14\",[12,38.118]],[\"comment/14\",[]],[\"name/15\",[13,47.673]],[\"comment/15\",[]],[\"name/16\",[14,38.118]],[\"comment/16\",[]],[\"name/17\",[15,47.673]],[\"comment/17\",[]],[\"name/18\",[16,44.308]],[\"comment/18\",[]],[\"name/19\",[17,44.308]],[\"comment/19\",[]],[\"name/20\",[18,47.673]],[\"comment/20\",[]],[\"name/21\",[19,44.308]],[\"comment/21\",[]],[\"name/22\",[20,47.673]],[\"comment/22\",[]],[\"name/23\",[21,47.673]],[\"comment/23\",[]],[\"name/24\",[22,47.673]],[\"comment/24\",[]],[\"name/25\",[23,44.308]],[\"comment/25\",[]],[\"name/26\",[24,47.673]],[\"comment/26\",[]],[\"name/27\",[25,38.118]],[\"comment/27\",[]],[\"name/28\",[26,47.673]],[\"comment/28\",[]],[\"name/29\",[27,47.673]],[\"comment/29\",[]],[\"name/30\",[28,38.118]],[\"comment/30\",[]],[\"name/31\",[29,52.781]],[\"comment/31\",[]],[\"name/32\",[30,36.687]],[\"comment/32\",[]],[\"name/33\",[31,38.118]],[\"comment/33\",[]],[\"name/34\",[32,39.788]],[\"comment/34\",[]],[\"name/35\",[33,38.118]],[\"comment/35\",[]],[\"name/36\",[34,47.673]],[\"comment/36\",[]],[\"name/37\",[34,47.673]],[\"comment/37\",[]],[\"name/38\",[0,36.687]],[\"comment/38\",[]],[\"name/39\",[2,38.118]],[\"comment/39\",[]],[\"name/40\",[3,38.118]],[\"comment/40\",[]],[\"name/41\",[35,52.781]],[\"comment/41\",[]],[\"name/42\",[5,47.673]],[\"comment/42\",[]],[\"name/43\",[6,39.788]],[\"comment/43\",[]],[\"name/44\",[7,38.118]],[\"comment/44\",[]],[\"name/45\",[8,38.118]],[\"comment/45\",[]],[\"name/46\",[9,38.118]],[\"comment/46\",[]],[\"name/47\",[10,44.308]],[\"comment/47\",[]],[\"name/48\",[11,47.673]],[\"comment/48\",[]],[\"name/49\",[12,38.118]],[\"comment/49\",[]],[\"name/50\",[13,47.673]],[\"comment/50\",[]],[\"name/51\",[14,38.118]],[\"comment/51\",[]],[\"name/52\",[15,47.673]],[\"comment/52\",[]],[\"name/53\",[16,44.308]],[\"comment/53\",[]],[\"name/54\",[17,44.308]],[\"comment/54\",[]],[\"name/55\",[18,47.673]],[\"comment/55\",[]],[\"name/56\",[19,44.308]],[\"comment/56\",[]],[\"name/57\",[36,52.781]],[\"comment/57\",[]],[\"name/58\",[37,52.781]],[\"comment/58\",[]],[\"name/59\",[38,52.781]],[\"comment/59\",[]],[\"name/60\",[39,52.781]],[\"comment/60\",[]],[\"name/61\",[40,52.781]],[\"comment/61\",[]],[\"name/62\",[41,52.781]],[\"comment/62\",[]],[\"name/63\",[20,47.673]],[\"comment/63\",[]],[\"name/64\",[21,47.673]],[\"comment/64\",[]],[\"name/65\",[42,52.781]],[\"comment/65\",[]],[\"name/66\",[43,44.308]],[\"comment/66\",[]],[\"name/67\",[44,52.781]],[\"comment/67\",[]],[\"name/68\",[45,44.308]],[\"comment/68\",[]],[\"name/69\",[46,52.781]],[\"comment/69\",[]],[\"name/70\",[47,44.308]],[\"comment/70\",[]],[\"name/71\",[48,52.781]],[\"comment/71\",[]],[\"name/72\",[49,52.781]],[\"comment/72\",[]],[\"name/73\",[24,47.673]],[\"comment/73\",[]],[\"name/74\",[25,38.118]],[\"comment/74\",[]],[\"name/75\",[26,47.673]],[\"comment/75\",[]],[\"name/76\",[27,47.673]],[\"comment/76\",[]],[\"name/77\",[28,38.118]],[\"comment/77\",[]],[\"name/78\",[50,52.781]],[\"comment/78\",[]],[\"name/79\",[30,36.687]],[\"comment/79\",[]],[\"name/80\",[31,38.118]],[\"comment/80\",[]],[\"name/81\",[32,39.788]],[\"comment/81\",[]],[\"name/82\",[33,38.118]],[\"comment/82\",[]],[\"name/83\",[22,47.673]],[\"comment/83\",[]],[\"name/84\",[23,44.308]],[\"comment/84\",[]],[\"name/85\",[51,47.673]],[\"comment/85\",[]],[\"name/86\",[51,47.673]],[\"comment/86\",[]],[\"name/87\",[3,38.118]],[\"comment/87\",[]],[\"name/88\",[52,52.781]],[\"comment/88\",[]],[\"name/89\",[53,52.781]],[\"comment/89\",[]],[\"name/90\",[30,36.687]],[\"comment/90\",[]],[\"name/91\",[54,41.795]],[\"comment/91\",[]],[\"name/92\",[55,52.781]],[\"comment/92\",[]],[\"name/93\",[54,41.795]],[\"comment/93\",[]],[\"name/94\",[14,38.118]],[\"comment/94\",[]],[\"name/95\",[43,44.308]],[\"comment/95\",[]],[\"name/96\",[45,44.308]],[\"comment/96\",[]],[\"name/97\",[47,44.308]],[\"comment/97\",[]],[\"name/98\",[56,52.781]],[\"comment/98\",[]],[\"name/99\",[12,38.118]],[\"comment/99\",[]],[\"name/100\",[57,52.781]],[\"comment/100\",[]],[\"name/101\",[58,52.781]],[\"comment/101\",[]],[\"name/102\",[59,52.781]],[\"comment/102\",[]],[\"name/103\",[7,38.118]],[\"comment/103\",[]],[\"name/104\",[60,41.795]],[\"comment/104\",[]],[\"name/105\",[61,41.795]],[\"comment/105\",[]],[\"name/106\",[62,41.795]],[\"comment/106\",[]],[\"name/107\",[63,41.795]],[\"comment/107\",[]],[\"name/108\",[64,41.795]],[\"comment/108\",[]],[\"name/109\",[65,39.788]],[\"comment/109\",[]],[\"name/110\",[66,41.795]],[\"comment/110\",[]],[\"name/111\",[67,41.795]],[\"comment/111\",[]],[\"name/112\",[68,41.795]],[\"comment/112\",[]],[\"name/113\",[8,38.118]],[\"comment/113\",[]],[\"name/114\",[9,38.118]],[\"comment/114\",[]],[\"name/115\",[10,44.308]],[\"comment/115\",[]],[\"name/116\",[69,52.781]],[\"comment/116\",[]],[\"name/117\",[70,52.781]],[\"comment/117\",[]],[\"name/118\",[71,52.781]],[\"comment/118\",[]],[\"name/119\",[28,38.118]],[\"comment/119\",[]],[\"name/120\",[2,38.118]],[\"comment/120\",[]],[\"name/121\",[0,36.687]],[\"comment/121\",[]],[\"name/122\",[30,36.687]],[\"comment/122\",[]],[\"name/123\",[72,41.795]],[\"comment/123\",[]],[\"name/124\",[33,38.118]],[\"comment/124\",[]],[\"name/125\",[31,38.118]],[\"comment/125\",[]],[\"name/126\",[73,41.795]],[\"comment/126\",[]],[\"name/127\",[25,38.118]],[\"comment/127\",[]],[\"name/128\",[74,41.795]],[\"comment/128\",[]],[\"name/129\",[75,41.795]],[\"comment/129\",[]],[\"name/130\",[76,52.781]],[\"comment/130\",[]],[\"name/131\",[77,52.781]],[\"comment/131\",[]],[\"name/132\",[78,52.781]],[\"comment/132\",[]],[\"name/133\",[79,52.781]],[\"comment/133\",[]],[\"name/134\",[65,39.788]],[\"comment/134\",[]],[\"name/135\",[80,52.781]],[\"comment/135\",[]],[\"name/136\",[81,52.781]],[\"comment/136\",[]],[\"name/137\",[82,52.781]],[\"comment/137\",[]],[\"name/138\",[83,47.673]],[\"comment/138\",[]],[\"name/139\",[83,47.673]],[\"comment/139\",[]],[\"name/140\",[3,38.118]],[\"comment/140\",[]],[\"name/141\",[84,44.308]],[\"comment/141\",[]],[\"name/142\",[85,44.308]],[\"comment/142\",[]],[\"name/143\",[86,44.308]],[\"comment/143\",[]],[\"name/144\",[87,44.308]],[\"comment/144\",[]],[\"name/145\",[60,41.795]],[\"comment/145\",[]],[\"name/146\",[88,44.308]],[\"comment/146\",[]],[\"name/147\",[54,41.795]],[\"comment/147\",[]],[\"name/148\",[61,41.795]],[\"comment/148\",[]],[\"name/149\",[8,38.118]],[\"comment/149\",[]],[\"name/150\",[9,38.118]],[\"comment/150\",[]],[\"name/151\",[65,39.788]],[\"comment/151\",[]],[\"name/152\",[89,44.308]],[\"comment/152\",[]],[\"name/153\",[90,44.308]],[\"comment/153\",[]],[\"name/154\",[91,44.308]],[\"comment/154\",[]],[\"name/155\",[62,41.795]],[\"comment/155\",[]],[\"name/156\",[63,41.795]],[\"comment/156\",[]],[\"name/157\",[12,38.118]],[\"comment/157\",[]],[\"name/158\",[92,47.673]],[\"comment/158\",[]],[\"name/159\",[64,41.795]],[\"comment/159\",[]],[\"name/160\",[66,41.795]],[\"comment/160\",[]],[\"name/161\",[67,41.795]],[\"comment/161\",[]],[\"name/162\",[93,44.308]],[\"comment/162\",[]],[\"name/163\",[94,44.308]],[\"comment/163\",[]],[\"name/164\",[68,41.795]],[\"comment/164\",[]],[\"name/165\",[6,39.788]],[\"comment/165\",[]],[\"name/166\",[7,38.118]],[\"comment/166\",[]],[\"name/167\",[14,38.118]],[\"comment/167\",[]],[\"name/168\",[95,44.308]],[\"comment/168\",[]],[\"name/169\",[96,47.673]],[\"comment/169\",[]],[\"name/170\",[97,44.308]],[\"comment/170\",[]],[\"name/171\",[98,44.308]],[\"comment/171\",[]],[\"name/172\",[99,47.673]],[\"comment/172\",[]],[\"name/173\",[23,44.308]],[\"comment/173\",[]],[\"name/174\",[28,38.118]],[\"comment/174\",[]],[\"name/175\",[2,38.118]],[\"comment/175\",[]],[\"name/176\",[0,36.687]],[\"comment/176\",[]],[\"name/177\",[30,36.687]],[\"comment/177\",[]],[\"name/178\",[72,41.795]],[\"comment/178\",[]],[\"name/179\",[73,41.795]],[\"comment/179\",[]],[\"name/180\",[25,38.118]],[\"comment/180\",[]],[\"name/181\",[32,39.788]],[\"comment/181\",[]],[\"name/182\",[74,41.795]],[\"comment/182\",[]],[\"name/183\",[75,41.795]],[\"comment/183\",[]],[\"name/184\",[100,44.308]],[\"comment/184\",[]],[\"name/185\",[101,44.308]],[\"comment/185\",[]],[\"name/186\",[31,38.118]],[\"comment/186\",[]],[\"name/187\",[33,38.118]],[\"comment/187\",[]],[\"name/188\",[102,44.308]],[\"comment/188\",[]],[\"name/189\",[103,47.673]],[\"comment/189\",[]],[\"name/190\",[103,47.673]],[\"comment/190\",[]],[\"name/191\",[3,38.118]],[\"comment/191\",[]],[\"name/192\",[84,44.308]],[\"comment/192\",[]],[\"name/193\",[85,44.308]],[\"comment/193\",[]],[\"name/194\",[86,44.308]],[\"comment/194\",[]],[\"name/195\",[87,44.308]],[\"comment/195\",[]],[\"name/196\",[60,41.795]],[\"comment/196\",[]],[\"name/197\",[88,44.308]],[\"comment/197\",[]],[\"name/198\",[54,41.795]],[\"comment/198\",[]],[\"name/199\",[61,41.795]],[\"comment/199\",[]],[\"name/200\",[8,38.118]],[\"comment/200\",[]],[\"name/201\",[9,38.118]],[\"comment/201\",[]],[\"name/202\",[65,39.788]],[\"comment/202\",[]],[\"name/203\",[89,44.308]],[\"comment/203\",[]],[\"name/204\",[90,44.308]],[\"comment/204\",[]],[\"name/205\",[91,44.308]],[\"comment/205\",[]],[\"name/206\",[62,41.795]],[\"comment/206\",[]],[\"name/207\",[63,41.795]],[\"comment/207\",[]],[\"name/208\",[12,38.118]],[\"comment/208\",[]],[\"name/209\",[92,47.673]],[\"comment/209\",[]],[\"name/210\",[64,41.795]],[\"comment/210\",[]],[\"name/211\",[66,41.795]],[\"comment/211\",[]],[\"name/212\",[67,41.795]],[\"comment/212\",[]],[\"name/213\",[93,44.308]],[\"comment/213\",[]],[\"name/214\",[94,44.308]],[\"comment/214\",[]],[\"name/215\",[68,41.795]],[\"comment/215\",[]],[\"name/216\",[6,39.788]],[\"comment/216\",[]],[\"name/217\",[7,38.118]],[\"comment/217\",[]],[\"name/218\",[14,38.118]],[\"comment/218\",[]],[\"name/219\",[95,44.308]],[\"comment/219\",[]],[\"name/220\",[96,47.673]],[\"comment/220\",[]],[\"name/221\",[97,44.308]],[\"comment/221\",[]],[\"name/222\",[98,44.308]],[\"comment/222\",[]],[\"name/223\",[104,52.781]],[\"comment/223\",[]],[\"name/224\",[99,47.673]],[\"comment/224\",[]],[\"name/225\",[105,52.781]],[\"comment/225\",[]],[\"name/226\",[16,44.308]],[\"comment/226\",[]],[\"name/227\",[17,44.308]],[\"comment/227\",[]],[\"name/228\",[19,44.308]],[\"comment/228\",[]],[\"name/229\",[43,44.308]],[\"comment/229\",[]],[\"name/230\",[45,44.308]],[\"comment/230\",[]],[\"name/231\",[47,44.308]],[\"comment/231\",[]],[\"name/232\",[28,38.118]],[\"comment/232\",[]],[\"name/233\",[2,38.118]],[\"comment/233\",[]],[\"name/234\",[0,36.687]],[\"comment/234\",[]],[\"name/235\",[30,36.687]],[\"comment/235\",[]],[\"name/236\",[72,41.795]],[\"comment/236\",[]],[\"name/237\",[73,41.795]],[\"comment/237\",[]],[\"name/238\",[25,38.118]],[\"comment/238\",[]],[\"name/239\",[32,39.788]],[\"comment/239\",[]],[\"name/240\",[74,41.795]],[\"comment/240\",[]],[\"name/241\",[75,41.795]],[\"comment/241\",[]],[\"name/242\",[100,44.308]],[\"comment/242\",[]],[\"name/243\",[101,44.308]],[\"comment/243\",[]],[\"name/244\",[31,38.118]],[\"comment/244\",[]],[\"name/245\",[33,38.118]],[\"comment/245\",[]],[\"name/246\",[102,44.308]],[\"comment/246\",[]],[\"name/247\",[106,47.673]],[\"comment/247\",[]],[\"name/248\",[106,47.673]],[\"comment/248\",[]],[\"name/249\",[3,38.118]],[\"comment/249\",[]],[\"name/250\",[84,44.308]],[\"comment/250\",[]],[\"name/251\",[85,44.308]],[\"comment/251\",[]],[\"name/252\",[86,44.308]],[\"comment/252\",[]],[\"name/253\",[87,44.308]],[\"comment/253\",[]],[\"name/254\",[60,41.795]],[\"comment/254\",[]],[\"name/255\",[88,44.308]],[\"comment/255\",[]],[\"name/256\",[61,41.795]],[\"comment/256\",[]],[\"name/257\",[8,38.118]],[\"comment/257\",[]],[\"name/258\",[9,38.118]],[\"comment/258\",[]],[\"name/259\",[65,39.788]],[\"comment/259\",[]],[\"name/260\",[89,44.308]],[\"comment/260\",[]],[\"name/261\",[90,44.308]],[\"comment/261\",[]],[\"name/262\",[91,44.308]],[\"comment/262\",[]],[\"name/263\",[62,41.795]],[\"comment/263\",[]],[\"name/264\",[63,41.795]],[\"comment/264\",[]],[\"name/265\",[12,38.118]],[\"comment/265\",[]],[\"name/266\",[64,41.795]],[\"comment/266\",[]],[\"name/267\",[66,41.795]],[\"comment/267\",[]],[\"name/268\",[67,41.795]],[\"comment/268\",[]],[\"name/269\",[93,44.308]],[\"comment/269\",[]],[\"name/270\",[94,44.308]],[\"comment/270\",[]],[\"name/271\",[68,41.795]],[\"comment/271\",[]],[\"name/272\",[6,39.788]],[\"comment/272\",[]],[\"name/273\",[7,38.118]],[\"comment/273\",[]],[\"name/274\",[14,38.118]],[\"comment/274\",[]],[\"name/275\",[95,44.308]],[\"comment/275\",[]],[\"name/276\",[97,44.308]],[\"comment/276\",[]],[\"name/277\",[98,44.308]],[\"comment/277\",[]],[\"name/278\",[28,38.118]],[\"comment/278\",[]],[\"name/279\",[2,38.118]],[\"comment/279\",[]],[\"name/280\",[0,36.687]],[\"comment/280\",[]],[\"name/281\",[30,36.687]],[\"comment/281\",[]],[\"name/282\",[72,41.795]],[\"comment/282\",[]],[\"name/283\",[73,41.795]],[\"comment/283\",[]],[\"name/284\",[25,38.118]],[\"comment/284\",[]],[\"name/285\",[32,39.788]],[\"comment/285\",[]],[\"name/286\",[74,41.795]],[\"comment/286\",[]],[\"name/287\",[75,41.795]],[\"comment/287\",[]],[\"name/288\",[100,44.308]],[\"comment/288\",[]],[\"name/289\",[101,44.308]],[\"comment/289\",[]],[\"name/290\",[31,38.118]],[\"comment/290\",[]],[\"name/291\",[33,38.118]],[\"comment/291\",[]],[\"name/292\",[102,44.308]],[\"comment/292\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":30,\"name\":{\"32\":{},\"79\":{},\"90\":{},\"122\":{},\"177\":{},\"235\":{},\"281\":{}},\"comment\":{}}],[\"add\",{\"_index\":60,\"name\":{\"104\":{},\"145\":{},\"196\":{},\"254\":{}},\"comment\":{}}],[\"addscaled\",{\"_index\":88,\"name\":{\"146\":{},\"197\":{},\"255\":{}},\"comment\":{}}],[\"aim\",{\"_index\":39,\"name\":{\"60\":{}},\"comment\":{}}],[\"angle\",{\"_index\":54,\"name\":{\"91\":{},\"93\":{},\"147\":{},\"198\":{}},\"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\":{},\"192\":{},\"250\":{}},\"comment\":{}}],[\"clamp\",{\"_index\":87,\"name\":{\"144\":{},\"195\":{},\"253\":{}},\"comment\":{}}],[\"clone\",{\"_index\":31,\"name\":{\"33\":{},\"80\":{},\"125\":{},\"186\":{},\"244\":{},\"290\":{}},\"comment\":{}}],[\"conjugate\",{\"_index\":57,\"name\":{\"100\":{}},\"comment\":{}}],[\"copy\",{\"_index\":7,\"name\":{\"9\":{},\"44\":{},\"103\":{},\"166\":{},\"217\":{},\"273\":{}},\"comment\":{}}],[\"create\",{\"_index\":2,\"name\":{\"4\":{},\"39\":{},\"120\":{},\"175\":{},\"233\":{},\"279\":{}},\"comment\":{}}],[\"cross\",{\"_index\":92,\"name\":{\"158\":{},\"209\":{}},\"comment\":{}}],[\"default\",{\"_index\":28,\"name\":{\"30\":{},\"77\":{},\"119\":{},\"174\":{},\"232\":{},\"278\":{}},\"comment\":{}}],[\"degtorad\",{\"_index\":78,\"name\":{\"132\":{}},\"comment\":{}}],[\"determinant\",{\"_index\":13,\"name\":{\"15\":{},\"50\":{}},\"comment\":{}}],[\"dist\",{\"_index\":100,\"name\":{\"184\":{},\"242\":{},\"288\":{}},\"comment\":{}}],[\"distance\",{\"_index\":93,\"name\":{\"162\":{},\"213\":{},\"269\":{}},\"comment\":{}}],[\"distancesq\",{\"_index\":94,\"name\":{\"163\":{},\"214\":{},\"270\":{}},\"comment\":{}}],[\"distsq\",{\"_index\":101,\"name\":{\"185\":{},\"243\":{},\"289\":{}},\"comment\":{}}],[\"div\",{\"_index\":102,\"name\":{\"188\":{},\"246\":{},\"292\":{}},\"comment\":{}}],[\"divide\",{\"_index\":95,\"name\":{\"168\":{},\"219\":{},\"275\":{}},\"comment\":{}}],[\"divscalar\",{\"_index\":63,\"name\":{\"107\":{},\"156\":{},\"207\":{},\"264\":{}},\"comment\":{}}],[\"dot\",{\"_index\":64,\"name\":{\"108\":{},\"159\":{},\"210\":{},\"266\":{}},\"comment\":{}}],[\"epsilon\",{\"_index\":82,\"name\":{\"137\":{}},\"comment\":{}}],[\"equals\",{\"_index\":9,\"name\":{\"11\":{},\"46\":{},\"114\":{},\"150\":{},\"201\":{},\"258\":{}},\"comment\":{}}],[\"equalsapproximately\",{\"_index\":8,\"name\":{\"10\":{},\"45\":{},\"113\":{},\"149\":{},\"200\":{},\"257\":{}},\"comment\":{}}],[\"euclideanmodulo\",{\"_index\":81,\"name\":{\"136\":{}},\"comment\":{}}],[\"floor\",{\"_index\":85,\"name\":{\"142\":{},\"193\":{},\"251\":{}},\"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\":{},\"178\":{},\"236\":{},\"282\":{}},\"comment\":{}}],[\"frustum\",{\"_index\":38,\"name\":{\"59\":{}},\"comment\":{}}],[\"getaxis\",{\"_index\":17,\"name\":{\"19\":{},\"54\":{},\"227\":{}},\"comment\":{}}],[\"getscaling\",{\"_index\":19,\"name\":{\"21\":{},\"56\":{},\"228\":{}},\"comment\":{}}],[\"gettranslation\",{\"_index\":16,\"name\":{\"18\":{},\"53\":{},\"226\":{}},\"comment\":{}}],[\"identity\",{\"_index\":10,\"name\":{\"12\":{},\"47\":{},\"115\":{}},\"comment\":{}}],[\"inverse\",{\"_index\":12,\"name\":{\"14\":{},\"49\":{},\"99\":{},\"157\":{},\"208\":{},\"265\":{}},\"comment\":{}}],[\"inverselerp\",{\"_index\":80,\"name\":{\"135\":{}},\"comment\":{}}],[\"invert\",{\"_index\":32,\"name\":{\"34\":{},\"81\":{},\"181\":{},\"239\":{},\"285\":{}},\"comment\":{}}],[\"len\",{\"_index\":74,\"name\":{\"128\":{},\"182\":{},\"240\":{},\"286\":{}},\"comment\":{}}],[\"length\",{\"_index\":66,\"name\":{\"110\":{},\"160\":{},\"211\":{},\"267\":{}},\"comment\":{}}],[\"lengthsq\",{\"_index\":67,\"name\":{\"111\":{},\"161\":{},\"212\":{},\"268\":{}},\"comment\":{}}],[\"lensq\",{\"_index\":75,\"name\":{\"129\":{},\"183\":{},\"241\":{},\"287\":{}},\"comment\":{}}],[\"lerp\",{\"_index\":65,\"name\":{\"109\":{},\"134\":{},\"151\":{},\"202\":{},\"259\":{}},\"comment\":{}}],[\"lerpv\",{\"_index\":89,\"name\":{\"152\":{},\"203\":{},\"260\":{}},\"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\":{},\"204\":{},\"261\":{}},\"comment\":{}}],[\"min\",{\"_index\":91,\"name\":{\"154\":{},\"205\":{},\"262\":{}},\"comment\":{}}],[\"mul\",{\"_index\":33,\"name\":{\"35\":{},\"82\":{},\"124\":{},\"187\":{},\"245\":{},\"291\":{}},\"comment\":{}}],[\"mulscalar\",{\"_index\":62,\"name\":{\"106\":{},\"155\":{},\"206\":{},\"263\":{}},\"comment\":{}}],[\"multiply\",{\"_index\":14,\"name\":{\"16\":{},\"51\":{},\"94\":{},\"167\":{},\"218\":{},\"274\":{}},\"comment\":{}}],[\"negate\",{\"_index\":6,\"name\":{\"8\":{},\"43\":{},\"165\":{},\"216\":{},\"272\":{}},\"comment\":{}}],[\"normalize\",{\"_index\":68,\"name\":{\"112\":{},\"164\":{},\"215\":{},\"271\":{}},\"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\":{},\"220\":{}},\"comment\":{}}],[\"rotate\",{\"_index\":23,\"name\":{\"25\":{},\"84\":{},\"173\":{}},\"comment\":{}}],[\"rotatex\",{\"_index\":43,\"name\":{\"66\":{},\"95\":{},\"229\":{}},\"comment\":{}}],[\"rotatey\",{\"_index\":45,\"name\":{\"68\":{},\"96\":{},\"230\":{}},\"comment\":{}}],[\"rotatez\",{\"_index\":47,\"name\":{\"70\":{},\"97\":{},\"231\":{}},\"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\":{},\"194\":{},\"252\":{}},\"comment\":{}}],[\"scale\",{\"_index\":25,\"name\":{\"27\":{},\"74\":{},\"127\":{},\"180\":{},\"238\":{},\"284\":{}},\"comment\":{}}],[\"scaling\",{\"_index\":24,\"name\":{\"26\":{},\"73\":{}},\"comment\":{}}],[\"set\",{\"_index\":3,\"name\":{\"5\":{},\"40\":{},\"87\":{},\"140\":{},\"191\":{},\"249\":{}},\"comment\":{}}],[\"setaxis\",{\"_index\":18,\"name\":{\"20\":{},\"55\":{}},\"comment\":{}}],[\"setdefaulttype\",{\"_index\":0,\"name\":{\"0\":{},\"3\":{},\"38\":{},\"121\":{},\"176\":{},\"234\":{},\"280\":{}},\"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\":{},\"179\":{},\"237\":{},\"283\":{}},\"comment\":{}}],[\"subtract\",{\"_index\":61,\"name\":{\"105\":{},\"148\":{},\"199\":{},\"256\":{}},\"comment\":{}}],[\"toaxisangle\",{\"_index\":53,\"name\":{\"89\":{}},\"comment\":{}}],[\"transformmat3\",{\"_index\":99,\"name\":{\"172\":{},\"224\":{}},\"comment\":{}}],[\"transformmat4\",{\"_index\":98,\"name\":{\"171\":{},\"222\":{},\"277\":{}},\"comment\":{}}],[\"transformmat4upper3x3\",{\"_index\":104,\"name\":{\"223\":{}},\"comment\":{}}],[\"transformquat\",{\"_index\":105,\"name\":{\"225\":{}},\"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\":{\"189\":{},\"190\":{}},\"comment\":{}}],[\"vec4\",{\"_index\":106,\"name\":{\"247\":{},\"248\":{}},\"comment\":{}}],[\"zero\",{\"_index\":97,\"name\":{\"170\":{},\"221\":{},\"276\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index e509385..18b4f8f 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -2,38 +2,80 @@ /* 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: #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-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-ts-function: #572be7; - --light-color-ts-namespace: #b111c9; - --light-color-ts-private: #707070; - --light-color-ts-variable: #4d68ff; + --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-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: #ff6492; - --dark-color-ts-interface: #6cff87; + + --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-class: #61b0ff; - --dark-color-ts-function: #9772ff; - --dark-color-ts-namespace: #e14dff; - --dark-color-ts-private: #e2e2e2; - --dark-color-ts-variable: #4d68ff; + --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-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-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; } @@ -42,19 +84,38 @@ :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: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --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); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -64,19 +125,38 @@ :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: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --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); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } @@ -93,19 +173,38 @@ 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: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --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); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -113,23 +212,47 @@ 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: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --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); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } +.always-visible, +.always-visible .tsd-signatures { + display: inherit !important; +} + h1, h2, h3, @@ -139,6 +262,16 @@ 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; @@ -173,12 +306,6 @@ h6 { text-transform: uppercase; } -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - dl, menu, ol, @@ -191,26 +318,10 @@ dd { } .container { - max-width: 1600px; + max-width: 1700px; 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); @@ -226,26 +337,9 @@ dd { } .container-main { - display: flex; - justify-content: space-between; - position: relative; margin: 0 auto; -} - -.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; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); } @keyframes fade-in { @@ -288,22 +382,6 @@ 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); @@ -352,13 +430,29 @@ pre { } pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; padding: 10px; - border: 0.1em solid var(--color-accent); + border: 1px 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; @@ -392,92 +486,6 @@ 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; @@ -656,43 +664,6 @@ 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; @@ -707,7 +678,7 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-anchor { - position: absolute; + position: relative; top: -100px; } @@ -721,108 +692,64 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-bottom: 0; border-bottom: none; } -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind="Interface"] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind="Enum"] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind="Class"] { - color: var(--color-ts-class); + +.tsd-navigation.settings { + margin: 1rem 0; } -.tsd-member [data-tsd-kind="Private"] { - color: var(--color-ts-private); +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.5rem); } - -.tsd-navigation a { - display: block; - margin: 0.4rem 0; - border-left: 2px solid transparent; +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: inline-flex; + align-items: center; + padding: 0.25rem; color: var(--color-text); text-decoration: none; - transition: border-left-color 0.1s; + box-sizing: border-box; } -.tsd-navigation a:hover { +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { text-decoration: underline; } -.tsd-navigation ul { - margin: 0; +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; padding: 0; list-style: none; } -.tsd-navigation li { +.tsd-navigation li, +.tsd-page-navigation li { padding: 0; + max-width: 100%; } - -.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 { + margin-left: 3rem; } -.tsd-navigation.primary ul li a { - margin-left: 0.5rem; +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; } -.tsd-navigation.primary ul li li a { +.tsd-small-nested-navigation { margin-left: 1.5rem; } -.tsd-navigation.primary ul li li li a { - margin-left: 2.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-small-nested-navigation > li > details { + margin-left: -1.5rem; } -.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-nested-navigation > li > a, +.tsd-nested-navigation > li > span { + width: calc(100% - 1.75rem - 0.5rem); } -.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-page-navigation ul { + padding-left: 1.75rem; } #tsd-sidebar-links a { @@ -835,41 +762,40 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } a.tsd-index-link { - margin: 0.25rem 0; + padding: 0.25rem 0 !important; font-size: 1rem; line-height: 1.25rem; display: inline-flex; align-items: center; + color: var(--color-text); } -.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; +.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 { user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -} -.tsd-accordion-summary { - display: block; + cursor: pointer; } +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} .tsd-accordion-summary > * { margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; } -.tsd-accordion-summary::-webkit-details-marker { - display: none; -} -.tsd-index-accordion .tsd-accordion-summary svg { - margin-right: 0.25rem; +.tsd-index-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -894,34 +820,6 @@ 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; } @@ -1127,7 +1025,7 @@ ul.tsd-type-parameter-list h5 { } .tsd-page-toolbar { - position: fixed; + position: sticky; z-index: 1; top: 0; left: 0; @@ -1167,10 +1065,6 @@ ul.tsd-type-parameter-list h5 { padding: 12px 0; } -.tsd-page-toolbar--hide { - transform: translateY(-100%); -} - .tsd-widget { display: inline-block; overflow: hidden; @@ -1198,12 +1092,6 @@ 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; } @@ -1237,6 +1125,84 @@ 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); @@ -1255,3 +1221,147 @@ 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 1c5f19b..d51bad8 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

      - -

      Returns

      A copy of m.

      +

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

      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

- +
+
+ - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6b1f976..6d17edb 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

        - -

        Returns

        A copy of m.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 133710b..67c0950 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 da87277..fd35890 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f0719c6..1c20fe3 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5ab47a0..93d9949 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6cfb7ba..a0c0c1e 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
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2bfb918..146a467 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
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 899ef2b..4ecccd9 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

    - +

    Returns Vec2

    The axis component of m.

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 68db125..248ede2 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,18 +26,19 @@

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4da71ea..6f71901 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 53d8198..5a4004a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 38bfe3b..449ad60 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2417fdf..feb0321 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d16060f..49b8a0d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 666f539..f4aae9c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e65fdbe..da2b0d2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 243ee6f..171a1f0 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 683ca37..d9b7e90 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7078d38..c23a493 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 32b251e..96b10bf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 419caa0..1020861 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

        - -

        Returns

        Mat3 set from values.

        +Also see create and copy

        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
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6a968fe..f8ff550 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5bc4f02..a3cc6c7 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: number) => Mat3)
          +
          ctor: (new (n) => Mat3)

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

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

                • -
                  n: number
                -

                Returns Mat3

        -

        Returns Mat3LikeCtor

    - +

    Returns Mat3

    +

    Returns Mat3LikeCtor

    previous constructor for Mat3

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f8ec3d3..25e59ac 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3655f6a..1e9eaae 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 af7137c..76b968e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 31d1514..bfbda1e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 index d554b08..a2dd175 100644 --- a/docs/functions/mat3.uniformScale.html +++ b/docs/functions/mat3.uniformScale.html @@ -1,4 +1,4 @@ -uniformScale | wgpu-matrix
    +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
          +
          m: Mat3

          The matrix to be modified.

        • -
          s: number
          +
          s: number

          Amount to scale.

        • -
          Optional dst: Mat3
          +
          Optional dst: Mat3

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

        -

        Returns Mat3

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

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

    Function uniformScaling

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

        - -

        Returns

        The scaling matrix.

        Parameters

        • -
          s: number
          +
          s: number

          Amount to scale

        • -
          Optional dst: Mat3
          +
          Optional dst: Mat3

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

        -

        Returns Mat3

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/mat4.aim.html b/docs/functions/mat4.aim.html index 7577d4d..98ef489 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 175d87b..6620c94 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 60867e8..68f2797 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f5c2d57..4411a36 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a3d6660..ea0b4fc 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

        - -

        Returns

        A copy of m.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5494f97..c364c91 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

        - -

        Returns

        A copy of m.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 845b8a6..42e8094 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f5978e5..a334c77 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 88afcc6..2eafec3 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 ed8d4ec..be603a9 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 00c1485..c895413 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8f20a54..4a92a9b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 be45811..f547607 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e08e6ab..eda39a2 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

    - +

    Returns Vec3

    The axis component of m.

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 18fe7ad..5eae749 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,18 +26,19 @@

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 842a5cc..8d41207 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 60df92b..3d44bcf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 de65f1c..069a90a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9fc1ce7..f752705 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 52cedce..4c0a172 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 37b4f31..f7f38c2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 bd2892e..dcb40ad 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1db93f8..da96e8e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0973972..92bee6e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 35a9a74..ac3911b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 61a3431..e2e26ec 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 ba03e4a..2289ee4 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 776bada..c7f90c7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 06a2930..40c789b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1cb273e..a5e60e3 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d7f5df4..2520b9d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0341a6d..6693adf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f37b509..b82dccb 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 414dd34..9771c0d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a3520c8..5b4b013 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8b5937c..34dab04 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

        - -

        Returns

        Mat4 created from values.

        +Also see create and copy

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b43a43b..0bcf561 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c4a1492..7d6f1a8 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: number) => Mat4)
          +
          ctor: (new (n) => Mat4)

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

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

                • -
                  n: number
                -

                Returns Mat4

        -

        Returns Mat4LikeCtor

    - +

    Returns Mat4

    +

    Returns Mat4LikeCtor

    previous constructor for Mat4

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f3eac73..c76068a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3b0c196..2c93816 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d1567d5..e47e89f 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 766daa4..d5a64d0 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 index 319186b..1cead10 100644 --- a/docs/functions/mat4.uniformScale.html +++ b/docs/functions/mat4.uniformScale.html @@ -1,4 +1,4 @@ -uniformScale | wgpu-matrix
    +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
          +
          m: Mat4

          The matrix to be modified.

        • -
          s: number
          +
          s: number

          The amount to scale.

        • -
          Optional dst: Mat4
          +
          Optional dst: Mat4

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

        -

        Returns Mat4

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/mat4.uniformScaling.html b/docs/functions/mat4.uniformScaling.html index 576f028..197213d 100644 --- a/docs/functions/mat4.uniformScaling.html +++ b/docs/functions/mat4.uniformScaling.html @@ -1,4 +1,4 @@ -uniformScaling | wgpu-matrix
    +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
          +
          s: number

          the amount to scale

        • -
          Optional dst: Mat4
          +
          Optional dst: Mat4

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

        -

        Returns Mat4

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/quat.add.html b/docs/functions/quat.add.html index cf7c52c..65b7400 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5c27af2..aadca03 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e08ccc1..fe42f28 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

        - -

        Returns

        A copy of q.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b54b73d..8daad4c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2d25e0c..5166d90 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

        - -

        Returns

        A quaternion that is a copy of q

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 fc75230..c9d7ef6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2e4fa67..d667736 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9ff6cf4..e4e7da7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 fa62b35..c99e077 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 02cc2b6..c165bb2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5bedd8d..c28e56a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 caaf22d..6890935 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 78ef7ad..f839ec1 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b3122c9..2a5be89 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

    - +

    Returns Quat

    the created vector

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 96b692c..6c1f1ff 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9dd54a4..3c4eb3b 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

    - +

    Returns Quat

    A quaternion that is the result of a * b

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 714defe..f43f180 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 82e6430..b1deac8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b050fec..ab03e43 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1530d51..516f0db 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b5732e2..da05745 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0f24632..798bec1 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 64f2784..315252e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4c40d3b..e7f777c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2721f20..a55e833 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 56aaf6d..73ef028 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6e15536..cbcd6b5 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1c2217c..f7ccfab 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 58b94f3..afa353e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 56a47c7..fe78011 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e86e07c..2173dbe 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

        - -

        Returns

        A vector with its elements set.

        +Also see create and copy

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 dd69059..e430e31 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: number) => Quat)
          +
          ctor: (new (n) => Quat)

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

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

                • -
                  n: number
                -

                Returns Quat

        -

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

        +
        n: number
    +

    Returns Quat

    +

    Returns (new (n) => Quat)

    previous constructor for Quat4

    +
    • -
        -
      • new (n: number): Quat
      • +
          +
        • new (n): 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

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f4fa377..7f7afb2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 96f4030..4904e6e 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

    - +

    Returns Quat

    result

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c0a8b58..d034927 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 81e7283..37287d4 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2449c74..0976f44 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;
        }

        +

        Returns {
            angle: number;
            axis: Vec3;
        }

        angle and axis

        +
        • -
          angle: number
        • +
          angle: number
        • -
          axis: Vec3
    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8dc7812..84d1da0 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: number) => Float32Array | Float64Array | number[])
          +
          ctor: (new (n) => Float32Array | Float64Array | number[])

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

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

                • -
                  n: number
                -

                Returns Float32Array | Float64Array | number[]

        +
        n: number
    +

    Returns Float32Array | Float64Array | number[]

    Returns void

    - + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 96cc633..3141183 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f7f9d50..36fec91 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9debbdb..f963b6d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 161429b..467b514 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8e7e90b..2034456 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 964e812..eafe801 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c1c15ed..525c56a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 991780f..2083b1d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9bde391..fc6a2c6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 989c13b..19d9900 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 460a4c0..c8b08c6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 295c39a..b0b40a6 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 57b8c00..5199a17 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 18318b7..27bae38 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 23656c7..377b08c 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: Vec3
          +
          Optional dst: Vec3

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

        -

        Returns Vec3

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9f6e72d..e082549 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9a41d04..68b9e84 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 cde32ea..079275a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 82e6bcf..aadadc7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b593f72..bbf7784 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a9e8b32..ca70b55 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 fd5e9d1..b6c4b62 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 608e735..8bbd801 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 445e15d..a99db37 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e927a19..4f54ca4 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8ef5052..3c1c4dc 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0917428..0cad22b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1aa42d8..5b82dcf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 441a1c8..97c55a5 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 dfd7780..6f0234b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2f34ebe..36e2d9f 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 263a342..3ecd4f2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 09f0679..b88993b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8277442..3953e0d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 df27d3a..06c919e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 47f4a56..6de2ede 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f5514c0..a1cb908 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 41e0ef1..72fab6e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 773aed4..0f759f8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1dc4738..4fbdebe 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 768345a..ae17a38 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 166d533..6b557ac 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 762d229..018adc5 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

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

    Function rotate

    +
    +
      + +
    • +

      Rotate a 2D vector

      +
      +
      +

      Parameters

      +
        +
      • +
        a: Vec2
        +

        The vec2 point to rotate

        +
      • +
      • +
        b: Vec2
        +

        The origin of the rotation

        +
      • +
      • +
        rad: number
        +

        The angle of rotation in radians

        +
      • +
      • +
        Optional dst: Vec2
      +

      Returns Vec2

      the rotated vector

      +
    +
    + +
    +
    +

    Generated using TypeDoc

    +
    \ No newline at end of file diff --git a/docs/functions/vec2.round.html b/docs/functions/vec2.round.html index ff980e9..4b34be2 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7c1b1d2..79e9a73 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4c5c786..4560bbc 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

        - -

        Returns

        A vector with its elements set.

        +Also see create and copy

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b6df841..390027a 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: number) => Vec2)
          +
          ctor: (new (n) => Vec2)

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

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

                • -
                  n: number
                -

                Returns Vec2

        -

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

        +
        n: number
    +

    Returns Vec2

    +

    Returns (new (n) => Vec2)

    previous constructor for Vec2

    +
    • -
        -
      • new (n: number): Vec2
      • +
          +
        • new (n): 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

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5f928eb..ffe55a0 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 cea10b3..df5f6c8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e0cf0e4..e2968f6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a36cad1..9660cab 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 99afaef..0e5732d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 228d64c..1fd861c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 44fa577..f10f371 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 fbfffce..5aa2e28 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0906e3a..78a4ba1 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 18c2462..497c42e 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8333c8c..578aab1 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 16f85be..7f8e22c 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5f1eda4..437a7d3 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9c3126b..69bc4e7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4d0bc98..e36a259 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5fce341..99e0267 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 adfb322..dfee9c4 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2ea3be0..68fe917 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0326dbe..462bdd9 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0ba2d4c..7d16037 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5a091cc..082a785 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6010f81..e61b1bf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c22b967..85bcaa7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7fde7b2..bbaf366 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a444433..3e80c67 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 81d5d06..491d4ac 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 09d9779..713e1cc 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

    - +

    Returns Vec3

    The axis component of m.

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d2f8063..3c1c7fb 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,18 +26,19 @@

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b9bb177..d0adfa0 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 920ddad..a37e914 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c1ac437..ac00e48 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1d5fcf3..b1ff2e9 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a31f13a..42270c1 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9a3432b..fdbe469 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6e0a254..e65e698 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 06f42c0..5994046 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b37c083..4d76161 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5f76c63..49a8cc4 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7b0cab9..2173c70 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 df84778..13ab08d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d8cba7c..20fb3bd 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 df81999..b2a1b54 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d2a0aad..47aba6a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a6de142..d3fca06 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f60661d..9c38b26 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    Generated using TypeDoc

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

    Function rotateX

    +
    +
      + +
    • +

      Rotate a 3D vector around the x-axis

      +
      +
      +

      Parameters

      +
        +
      • +
        a: Vec3
        +

        The vec3 point to rotate

        +
      • +
      • +
        b: Vec3
        +

        The origin of the rotation

        +
      • +
      • +
        rad: number
        +

        The angle of rotation in radians

        +
      • +
      • +
        Optional dst: Vec3
        +

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

        +
      +

      Returns Vec3

      the rotated vector

      +
    +
    + +
    +
    +

    Generated using TypeDoc

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

    Function rotateY

    +
    +
      + +
    • +

      Rotate a 3D vector around the y-axis

      +
      +
      +

      Parameters

      +
        +
      • +
        a: Vec3
        +

        The vec3 point to rotate

        +
      • +
      • +
        b: Vec3
        +

        The origin of the rotation

        +
      • +
      • +
        rad: number
        +

        The angle of rotation in radians

        +
      • +
      • +
        Optional dst: Vec3
        +

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

        +
      +

      Returns Vec3

      the rotated vector

      +
    +
    + +
    +
    +

    Generated using TypeDoc

    +
    \ No newline at end of file diff --git a/docs/functions/vec3.rotateZ.html b/docs/functions/vec3.rotateZ.html new file mode 100644 index 0000000..184cc69 --- /dev/null +++ b/docs/functions/vec3.rotateZ.html @@ -0,0 +1,371 @@ +rotateZ | wgpu-matrix
    +
    + +
    +
    +
    +
    + +

    Function rotateZ

    +
    +
      + +
    • +

      Rotate a 3D vector around the z-axis

      +
      +
      +

      Parameters

      +
        +
      • +
        a: Vec3
        +

        The vec3 point to rotate

        +
      • +
      • +
        b: Vec3
        +

        The origin of the rotation

        +
      • +
      • +
        rad: number
        +

        The angle of rotation in radians

        +
      • +
      • +
        Optional dst: Vec3
        +

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

        +
      +

      Returns Vec3

      out

      +
    +
    + +
    +
    +

    Generated using TypeDoc

    +
    \ No newline at end of file diff --git a/docs/functions/vec3.round.html b/docs/functions/vec3.round.html index 52b16f2..710ef13 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1b97336..5973ec6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c8bf9b2..78982a2 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

        - -

        Returns

        A vector with its elements set.

        +Also see create and copy

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b898537..c7ae37c 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: number) => Vec3)
          +
          ctor: (new (n) => Vec3)

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

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

                • -
                  n: number
                -

                Returns Vec3

        -

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

        +
        n: number
    +

    Returns Vec3

    +

    Returns (new (n) => Vec3)

    previous constructor for Vec3

    +
    • -
        -
      • new (n: number): Vec3
      • +
          +
        • new (n): 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

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 efb4fd8..d5ff266 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3693514..7ee801f 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c920cf2..2029725 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4630c5f..eafea00 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7fde240..6b4d7bb 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d55473a..ece8047 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5970a45..903d2a6 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e82be3b..eb8e334 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 bb717cf..24a1e23 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 07590a5..b4943f1 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 44c7e6e..b36e70b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8e0172f..3625320 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d7c9f74..f93fbc8 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

        - -

        Returns

        A copy of v.

        +

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

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 ab6f8c4..3756f18 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 225d54d..5a1dd31 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 d771efc..44b2523 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7150ae8..b201bcb 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 efed7bb..b9d2151 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3444794..3769366 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 30737a5..e09ca6c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 28f2c41..eeecb22 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 a6a7e0e..28a5a28 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 2d0d9d3..01f28a7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6718a12..c067a23 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3db2f4d..42c075b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 9d95c69..d39ab53 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

    - +

    Returns Vec4

    the created vector

    +
    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 13ddb84..a279cf0 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 3422574..37079fe 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 1c802d5..b48c4cf 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0d9f7ed..0dd332c 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 6e16601..797dbb7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 afb6f67..04b4d49 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 f2c0416..ac5561b 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b6ffcdb..1e2f383 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 87b6eb5..a05da4d 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5c65a8f..c91f88a 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 7843b31..2377ba8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5dda10d..cd11bc7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8969b53..77f3ab5 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c826ba2..9d0edd7 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 0eacf66..bb83367 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 76e5935..5c39994 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 095bf9e..b6e4528 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 291d469..81704fc 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

        - -

        Returns

        A vector with its elements set.

        +Also see create and copy

        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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 aac3ef1..5008782 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: number) => Vec4)
          +
          ctor: (new (n) => Vec4)

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

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

                • -
                  n: number
                -

                Returns Vec4

        -

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

        +
        n: number
    +

    Returns Vec4

    +

    Returns (new (n) => Vec4)

    previous constructor for Vec4

    +
    • -
        -
      • new (n: number): Vec4
      • +
          +
        • new (n): 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

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 aea4822..4d50448 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c145bb3..4f65cc8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 083c740..76b2db5 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 c1d6883..24ad1d8 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

    - +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 4227bc7..99f75a6 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.
        • @@ -36,68 +28,52 @@

          Why another 3d math library?

        • 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.

          @@ -105,46 +81,30 @@

          Important!

          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

          -
          -
    - +
    +

    On This Page

    -
    -
    + +

    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 58e6754..7751e2d 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1,4 +1,4 @@ -wgpu-matrix
    +wgpu-matrix
    -
    +

    wgpu-matrix

    @@ -17,31 +17,32 @@

    wgpu-matrix

    Index

    Namespaces

    -

    Type Aliases

    -

    Functions

    -
    -
    + - +
  • +
    mat4 +
  • +
  • +
    quat +
  • +
  • +
    utils +
  • +
  • +
    vec2 +
  • +
  • +
    vec3 +
  • +
  • +
    vec4 +
  • +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 b6c700d..fd5b3bd 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 51859a0..a28f75f 100644 --- a/docs/modules/mat4.html +++ b/docs/modules/mat4.html @@ -1,4 +1,4 @@ -mat4 | wgpu-matrix
    +mat4 | wgpu-matrix
    -
    + - +
    +

    On This Page

    -
    - + +

    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 8a9d48c..bd35895 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 5ccf636..76f2fe8 100644 --- a/docs/modules/utils.html +++ b/docs/modules/utils.html @@ -1,4 +1,4 @@ -utils | wgpu-matrix
    +utils | wgpu-matrix
    -
    +

    Index

    Variables

    -

    Functions

    -
    -
    +
    - +
  • +
    mat4 +
  • +
  • +
    quat +
  • +
  • +
    utils +
  • +
  • +
    vec2 +
  • +
  • +
    vec3 +
  • +
  • +
    vec4 +
  • +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 e5c722f..b7fce3e 100644 --- a/docs/modules/vec2.html +++ b/docs/modules/vec2.html @@ -1,4 +1,4 @@ -vec2 | wgpu-matrix
    +vec2 | wgpu-matrix
    -
    + - +
    +

    On This Page

    -
    - + +

    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 a3f309d..b3cd2b2 100644 --- a/docs/modules/vec3.html +++ b/docs/modules/vec3.html @@ -1,4 +1,4 @@ -vec3 | wgpu-matrix
    +vec3 | wgpu-matrix
    -
    + - +
    +

    On This Page

    -
    - + +

    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 d0d9de6..784ff8c 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 2ceb9f0..6ec1ca8 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.

    -
    + +

    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 35844c6..a331174 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.

    -
    + +

    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 f39a994..5bf0275 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.

    -
    + +

    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 45bf401..d930b4b 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.

    -
    + +

    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 7a10912..f671599 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.

    -
    + +

    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 8652c39..2314c3f 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.

    -
    + +

    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 0131f8c..362ff09 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: number) => Mat3)
    +
    Mat3LikeCtor: (new (n) => Mat3)

    Type declaration

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

          • -
            n: number
          -

          Returns Mat3

    - +

    Returns Mat3

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 13abbc7..1e0539c 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: number) => Mat4)
    +
    Mat4LikeCtor: (new (n) => Mat4)

    Type declaration

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

          • -
            n: number
          -

          Returns Mat4

    - +

    Returns Mat4

    +
    +
    + - +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 8fc6dd2..8f2c980 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"
    - +
    +
    + - +
  • +
    mat4 +
  • +
  • +
    quat +
  • +
  • +
    utils +
  • +
  • +
    vec2 +
  • +
  • +
    vec3 +
  • +
  • +
    vec4 +
  • +
  • Mat3
  • +
  • Mat4
  • +
  • Quat
  • +
  • Vec2
  • +
  • Vec3
  • +
  • Vec4
  • +
  • setDefaultType
  • +

    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 5128524..670206b 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 diff --git a/src/vec2-impl.ts b/src/vec2-impl.ts index 08e4774..630f3a3 100644 --- a/src/vec2-impl.ts +++ b/src/vec2-impl.ts @@ -644,3 +644,26 @@ export function transformMat3(v: Vec2, m: Mat3, dst?: Vec2): Vec2 { return dst; } +/** + * Rotate a 2D vector + * + * @param a The vec2 point to rotate + * @param b The origin of the rotation + * @param rad The angle of rotation in radians + * @returns the rotated vector + */ +export function rotate(a: Vec2, b: Vec2, rad: number, dst?: Vec2) { + dst = dst || new VecType(2); + + // Translate point to the origin + const p0 = a[0] - b[0], + p1 = a[1] - b[1], + sinC = Math.sin(rad), + cosC = Math.cos(rad); + + //perform rotation and translate to correct position + dst[0] = p0 * cosC - p1 * sinC + b[0]; + dst[1] = p0 * sinC + p1 * cosC + b[1]; + + return dst; +} diff --git a/src/vec3-impl.ts b/src/vec3-impl.ts index 04013b7..c415a7b 100644 --- a/src/vec3-impl.ts +++ b/src/vec3-impl.ts @@ -786,4 +786,97 @@ export function getScaling(m: Mat4, dst: Vec3) { dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz); dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz); return dst; -} \ No newline at end of file +} + +/** + * Rotate a 3D vector around the x-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +export function rotateX(a: Vec3, b: Vec3, rad: number, dst?: Vec3) { + dst = dst || new VecType(3); + let p = [], + r = []; + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + //perform rotation + r[0] = p[0]; + r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad); + r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); + + //translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + + return dst; +} + +/** + * Rotate a 3D vector around the y-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +export function rotateY(a: Vec3, b: Vec3, rad: number, dst?: Vec3) { + dst = dst || new VecType(3); + let p = [], + r = []; + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + // perform rotation + r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad); + r[1] = p[1]; + r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); + + // translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + + return dst; +} + +/** + * Rotate a 3D vector around the z-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns {vec3} out + */ +export function rotateZ(a: Vec3, b: Vec3, rad: number, dst?: Vec3) { + dst = dst || new VecType(3); + let p = [], + r = []; + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + // perform rotation + r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad); + r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad); + r[2] = p[2]; + + // translate to correct position + dst[0] = r[0] + b[0]; + dst[1] = r[1] + b[1]; + dst[2] = r[2] + b[2]; + + return dst; +} diff --git a/test/tests/vec2-test.js b/test/tests/vec2-test.js index c121b7a..1ca4775 100644 --- a/test/tests/vec2-test.js +++ b/test/tests/vec2-test.js @@ -471,5 +471,30 @@ describe('vec2', () => { check(Float32Array); check(Float64Array); + describe('rotate', function() { + describe('rotation around world origin [0, 0, 0]', function() { + let vecA, vecB, result; + beforeEach(function () { + vecA = [0, 1]; + vecB = [0, 0]; + result = vec2.rotate(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [0, -1]); + }); + }); + describe('rotation around an arbitrary origin', function () { + let vecA, vecB, result; + beforeEach(function () { + vecA = [6, -5]; + vecB = [0, -5]; + result = vec2.rotate(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [-6, -5]); + }); + }); + }); + }); diff --git a/test/tests/vec3-test.js b/test/tests/vec3-test.js index 698ef8f..eab266c 100644 --- a/test/tests/vec3-test.js +++ b/test/tests/vec3-test.js @@ -480,5 +480,76 @@ describe('vec3', () => { check(Float32Array); check(Float64Array); + let vecA, vecB, result; + + describe('rotateX', function () { + describe('rotation around world origin [0, 0, 0]', function () { + beforeEach(function () { + vecA = [0, 1, 0]; + vecB = [0, 0, 0]; + result = vec3.rotateX(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [0, -1, 0]); + }); + }); + + describe('rotation around an arbitrary origin', function () { + beforeEach(function () { + vecA = [2, 7, 0]; + vecB = [2, 5, 0]; + result = vec3.rotateX(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [2, 3, 0]); + }); + }); + }); + + describe('rotateY', function () { + describe('rotation around world origin [0, 0, 0]', function () { + beforeEach(function() { + vecA = [1, 0, 0]; + vecB = [0, 0, 0]; + result = vec3.rotateY(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [-1, 0, 0]); + }); + }); + describe('rotation around an arbitrary origin', function () { + beforeEach(function () { + vecA = [-2, 3, 10]; + vecB = [-4, 3, 10]; + result = vec3.rotateY(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [-6, 3, 10]); + }); + }); + }); + + describe('rotateZ', function () { + describe('rotation around world origin [0, 0, 0]', function () { + beforeEach(function () { + vecA = [0, 1, 0]; + vecB = [0, 0, 0]; + result = vec3.rotateZ(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [0, -1, 0]); + }); + }); + describe('rotation around an arbitrary origin', function () { + beforeEach(function () { + vecA = [0, 6, -5]; + vecB = [0, 0, -5]; + result = vec3.rotateZ(vecA, vecB, Math.PI); + }); + it("should return the rotated vector", function () { + assertEqualApproximately(result, [0, -6, -5]); + }); + }); + }); });