declarations
Version:
[](https://www.npmjs.com/package/declarations)
1,773 lines (1,580 loc) • 91.3 kB
TypeScript
// Type definitions for gl-matrix 2.2.2
// Project: https://github.com/toji/gl-matrix
// Definitions by: Mattijs Kneppers <https://github.com/mattijskneppers>, based on definitions by Tat <https://github.com/tatchx>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// Common
export class glMatrix {
/**
* Convert Degree To Radian
*
* @param a Angle in Degrees
*/
public static toRadian(a: number): number;
}
// vec2
export class vec2 extends Float32Array {
private typeVec2:number;
/**
* Creates a new, empty vec2
*
* @returns a new 2D vector
*/
public static create(): vec2;
/**
* Creates a new vec2 initialized with values from an existing vector
*
* @param a a vector to clone
* @returns a new 2D vector
*/
public static clone(a: vec2): vec2;
/**
* Creates a new vec2 initialized with the given values
*
* @param x X component
* @param y Y component
* @returns a new 2D vector
*/
public static fromValues(x: number, y: number): vec2;
/**
* Copy the values from one vec2 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
public static copy(out: vec2, a: vec2): vec2;
/**
* Set the components of a vec2 to the given values
*
* @param out the receiving vector
* @param x X component
* @param y Y component
* @returns out
*/
public static set(out: vec2, x: number, y: number): vec2;
/**
* Adds two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static add(out: vec2, a: vec2, b: vec2): vec2;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static subtract(out: vec2, a: vec2, b: vec2): vec2;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static sub(out: vec2, a: vec2, b: vec2): vec2;
/**
* Multiplies two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static multiply(out: vec2, a: vec2, b: vec2): vec2;
/**
* Multiplies two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static mul(out: vec2, a: vec2, b: vec2): vec2;
/**
* Divides two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static divide(out: vec2, a: vec2, b: vec2): vec2;
/**
* Divides two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static div(out: vec2, a: vec2, b: vec2): vec2;
/**
* Math.ceil the components of a vec2
*
* @param {vec2} out the receiving vector
* @param {vec2} a vector to ceil
* @returns {vec2} out
*/
public static ceil(out:vec2, a:vec2):vec2;
/**
* Math.floor the components of a vec2
*
* @param {vec2} out the receiving vector
* @param {vec2} a vector to floor
* @returns {vec2} out
*/
public static floor (out:vec2, a:vec2):vec2;
/**
* Returns the minimum of two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static min(out: vec2, a: vec2, b: vec2): vec2;
/**
* Returns the maximum of two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static max(out: vec2, a: vec2, b: vec2): vec2;
/**
* Math.round the components of a vec2
*
* @param {vec2} out the receiving vector
* @param {vec2} a vector to round
* @returns {vec2} out
*/
public static round(out:vec2, a:vec2):vec2;
/**
* Scales a vec2 by a scalar number
*
* @param out the receiving vector
* @param a the vector to scale
* @param b amount to scale the vector by
* @returns out
*/
public static scale(out: vec2, a: vec2, b: number): vec2;
/**
* Adds two vec2's after scaling the second operand by a scalar value
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param scale the amount to scale b by before adding
* @returns out
*/
public static scaleAndAdd(out: vec2, a: vec2, b: vec2, scale: number): vec2;
/**
* Calculates the euclidian distance between two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static distance(a: vec2, b: vec2): number;
/**
* Calculates the euclidian distance between two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static dist(a: vec2, b: vec2): number;
/**
* Calculates the squared euclidian distance between two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static squaredDistance(a: vec2, b: vec2): number;
/**
* Calculates the squared euclidian distance between two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static sqrDist(a: vec2, b: vec2): number;
/**
* Calculates the length of a vec2
*
* @param a vector to calculate length of
* @returns length of a
*/
public static length(a: vec2): number;
/**
* Calculates the length of a vec2
*
* @param a vector to calculate length of
* @returns length of a
*/
public static len(a: vec2): number;
/**
* Calculates the squared length of a vec2
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static squaredLength(a: vec2): number;
/**
* Calculates the squared length of a vec2
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static sqrLen(a: vec2): number;
/**
* Negates the components of a vec2
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
public static negate(out: vec2, a: vec2): vec2;
/**
* Returns the inverse of the components of a vec2
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
public static inverse(out: vec2, a: vec2): vec2;
/**
* Normalize a vec2
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
public static normalize(out: vec2, a: vec2): vec2;
/**
* Calculates the dot product of two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns dot product of a and b
*/
public static dot(a: vec2, b: vec2): number;
/**
* Computes the cross product of two vec2's
* Note that the cross product must by definition produce a 3D vector
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static cross(out: vec2, a: vec2, b: vec2): vec2;
/**
* Performs a linear interpolation between two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param t interpolation amount between the two inputs
* @returns out
*/
public static lerp(out: vec2, a: vec2, b: vec2, t: number): vec2;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
public static random(out: vec2): vec2;
/**
* Generates a random vector with the given scale
*
* @param out the receiving vector
* @param scale Length of the resulting vector. If ommitted, a unit vector will be returned
* @returns out
*/
public static random(out: vec2, scale: number): vec2;
/**
* Transforms the vec2 with a mat2
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat2(out: vec2, a: vec2, m: mat2): vec2;
/**
* Transforms the vec2 with a mat2d
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat2d(out: vec2, a: vec2, m: mat2d): vec2;
/**
* Transforms the vec2 with a mat3
* 3rd vector component is implicitly '1'
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat3(out: vec2, a: vec2, m: mat3): vec2;
/**
* Transforms the vec2 with a mat4
* 3rd vector component is implicitly '0'
* 4th vector component is implicitly '1'
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat4(out: vec2, a: vec2, m: mat4): vec2;
/**
* Perform some operation over an array of vec2s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec2. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec2s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @param arg additional argument to pass to fn
* @returns a
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec2, b: vec2, arg: any) => void, arg: any): Float32Array;
/**
* Perform some operation over an array of vec2s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec2. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec2s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @returns a
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec2, b: vec2) => void): Float32Array;
/**
* Returns a string representation of a vector
*
* @param a vector to represent as a string
* @returns string representation of the vector
*/
public static str(a: vec2): string;
/**
* Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
*
* @param {vec2} a The first vector.
* @param {vec2} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static exactEquals (a:vec2, b:vec2): boolean;
/**
* Returns whether or not the vectors have approximately the same elements in the same position.
*
* @param {vec2} a The first vector.
* @param {vec2} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static equals (a:vec2, b:vec2) : boolean;
}
// vec3
export class vec3 extends Float32Array {
private typeVec3:number;
/**
* Creates a new, empty vec3
*
* @returns a new 3D vector
*/
public static create(): vec3;
/**
* Creates a new vec3 initialized with values from an existing vector
*
* @param a vector to clone
* @returns a new 3D vector
*/
public static clone(a: vec3): vec3;
/**
* Creates a new vec3 initialized with the given values
*
* @param x X component
* @param y Y component
* @param z Z component
* @returns a new 3D vector
*/
public static fromValues(x: number, y: number, z: number): vec3;
/**
* Copy the values from one vec3 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
public static copy(out: vec3, a: vec3): vec3;
/**
* Set the components of a vec3 to the given values
*
* @param out the receiving vector
* @param x X component
* @param y Y component
* @param z Z component
* @returns out
*/
public static set(out: vec3, x: number, y: number, z: number): vec3;
/**
* Adds two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static add(out: vec3, a: vec3, b: vec3): vec3;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static subtract(out: vec3, a: vec3, b: vec3): vec3;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static sub(out: vec3, a: vec3, b: vec3): vec3
/**
* Multiplies two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static multiply(out: vec3, a: vec3, b: vec3): vec3;
/**
* Multiplies two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static mul(out: vec3, a: vec3, b: vec3): vec3;
/**
* Divides two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static divide(out: vec3, a: vec3, b: vec3): vec3;
/**
* Divides two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static div(out: vec3, a: vec3, b: vec3): vec3;
/**
* Math.ceil the components of a vec3
*
* @param {vec3} out the receiving vector
* @param {vec3} a vector to ceil
* @returns {vec3} out
*/
public static ceil (out:vec3, a:vec3) : vec3;
/**
* Math.floor the components of a vec3
*
* @param {vec3} out the receiving vector
* @param {vec3} a vector to floor
* @returns {vec3} out
*/
public static floor (out:vec3, a:vec3) :vec3;
/**
* Returns the minimum of two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static min(out: vec3, a: vec3, b: vec3): vec3;
/**
* Returns the maximum of two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static max(out: vec3, a: vec3, b: vec3): vec3;
/**
* Math.round the components of a vec3
*
* @param {vec3} out the receiving vector
* @param {vec3} a vector to round
* @returns {vec3} out
*/
public static round (out:vec3, a:vec3) : vec3
/**
* Scales a vec3 by a scalar number
*
* @param out the receiving vector
* @param a the vector to scale
* @param b amount to scale the vector by
* @returns out
*/
public static scale(out: vec3, a: vec3, b: number): vec3;
/**
* Adds two vec3's after scaling the second operand by a scalar value
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param scale the amount to scale b by before adding
* @returns out
*/
public static scaleAndAdd(out: vec3, a: vec3, b: vec3, scale: number): vec3;
/**
* Calculates the euclidian distance between two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static distance(a: vec3, b: vec3): number;
/**
* Calculates the euclidian distance between two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static dist(a: vec3, b: vec3): number;
/**
* Calculates the squared euclidian distance between two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static squaredDistance(a: vec3, b: vec3): number;
/**
* Calculates the squared euclidian distance between two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static sqrDist(a: vec3, b: vec3): number;
/**
* Calculates the length of a vec3
*
* @param a vector to calculate length of
* @returns length of a
*/
public static length(a: vec3): number;
/**
* Calculates the length of a vec3
*
* @param a vector to calculate length of
* @returns length of a
*/
public static len(a: vec3): number;
/**
* Calculates the squared length of a vec3
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static squaredLength(a: vec3): number;
/**
* Calculates the squared length of a vec3
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static sqrLen(a: vec3): number;
/**
* Negates the components of a vec3
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
public static negate(out: vec3, a: vec3): vec3;
/**
* Returns the inverse of the components of a vec3
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
public static inverse(out: vec3, a: vec3): vec3;
/**
* Normalize a vec3
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
public static normalize(out: vec3, a: vec3): vec3;
/**
* Calculates the dot product of two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns dot product of a and b
*/
public static dot(a: vec3, b: vec3): number;
/**
* Computes the cross product of two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static cross(out: vec3, a: vec3, b: vec3): vec3;
/**
* Performs a linear interpolation between two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param t interpolation amount between the two inputs
* @returns out
*/
public static lerp(out: vec3, a: vec3, b: vec3, t: number): vec3;
/**
* Performs a hermite interpolation with two control points
*
* @param {vec3} out the receiving vector
* @param {vec3} a the first operand
* @param {vec3} b the second operand
* @param {vec3} c the third operand
* @param {vec3} d the fourth operand
* @param {number} t interpolation amount between the two inputs
* @returns {vec3} out
*/
public static hermite (out:vec3, a:vec3, b:vec3, c:vec3, d:vec3, t:number) : vec3;
/**
* Performs a bezier interpolation with two control points
*
* @param {vec3} out the receiving vector
* @param {vec3} a the first operand
* @param {vec3} b the second operand
* @param {vec3} c the third operand
* @param {vec3} d the fourth operand
* @param {number} t interpolation amount between the two inputs
* @returns {vec3} out
*/
public static bezier (out:vec3, a:vec3, b:vec3, c:vec3, d:vec3, t:number) :vec3;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
public static random(out: vec3): vec3;
/**
* Generates a random vector with the given scale
*
* @param out the receiving vector
* @param [scale] Length of the resulting vector. If omitted, a unit vector will be returned
* @returns out
*/
public static random(out: vec3, scale: number): vec3;
/**
* Transforms the vec3 with a mat3.
*
* @param out the receiving vector
* @param a the vector to transform
* @param m the 3x3 matrix to transform with
* @returns out
*/
public static transformMat3(out: vec3, a: vec3, m: mat3): vec3;
/**
* Transforms the vec3 with a mat4.
* 4th vector component is implicitly '1'
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat4(out: vec3, a: vec3, m: mat4): vec3;
/**
* Transforms the vec3 with a quat
*
* @param out the receiving vector
* @param a the vector to transform
* @param q quaternion to transform with
* @returns out
*/
public static transformQuat(out: vec3, a: vec3, q: quat): vec3;
/**
* Rotate a 3D vector around the x-axis
* @param out The receiving vec3
* @param a The vec3 point to rotate
* @param b The origin of the rotation
* @param c The angle of rotation
* @returns out
*/
public static rotateX(out: vec3, a: vec3, b: vec3, c: number): vec3;
/**
* Rotate a 3D vector around the y-axis
* @param out The receiving vec3
* @param a The vec3 point to rotate
* @param b The origin of the rotation
* @param c The angle of rotation
* @returns out
*/
public static rotateY(out: vec3, a: vec3, b: vec3, c: number): vec3;
/**
* Rotate a 3D vector around the z-axis
* @param out The receiving vec3
* @param a The vec3 point to rotate
* @param b The origin of the rotation
* @param c The angle of rotation
* @returns out
*/
public static rotateZ(out: vec3, a: vec3, b: vec3, c: number): vec3;
/**
* Perform some operation over an array of vec3s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec3. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec3s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @param arg additional argument to pass to fn
* @returns a
* @function
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec3, b: vec3, arg: any) => void, arg: any): Float32Array;
/**
* Perform some operation over an array of vec3s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec3. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec3s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @returns a
* @function
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec3, b: vec3) => void): Float32Array;
/**
* Get the angle between two 3D vectors
* @param a The first operand
* @param b The second operand
* @returns The angle in radians
*/
public static angle(a: vec3, b: vec3): number;
/**
* Returns a string representation of a vector
*
* @param a vector to represent as a string
* @returns string representation of the vector
*/
public static str(a: vec3): string;
/**
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
*
* @param {vec3} a The first vector.
* @param {vec3} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static exactEquals (a:vec3, b:vec3): boolean
/**
* Returns whether or not the vectors have approximately the same elements in the same position.
*
* @param {vec3} a The first vector.
* @param {vec3} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static equals (a:vec3, b:vec3) : boolean
}
// vec4
export class vec4 extends Float32Array {
private typeVec3:number;
/**
* Creates a new, empty vec4
*
* @returns a new 4D vector
*/
public static create(): vec4;
/**
* Creates a new vec4 initialized with values from an existing vector
*
* @param a vector to clone
* @returns a new 4D vector
*/
public static clone(a: vec4): vec4;
/**
* Creates a new vec4 initialized with the given values
*
* @param x X component
* @param y Y component
* @param z Z component
* @param w W component
* @returns a new 4D vector
*/
public static fromValues(x: number, y: number, z: number, w: number): vec4;
/**
* Copy the values from one vec4 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
public static copy(out: vec4, a: vec4): vec4;
/**
* Set the components of a vec4 to the given values
*
* @param out the receiving vector
* @param x X component
* @param y Y component
* @param z Z component
* @param w W component
* @returns out
*/
public static set(out: vec4, x: number, y: number, z: number, w: number): vec4;
/**
* Adds two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static add(out: vec4, a: vec4, b: vec4): vec4;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static subtract(out: vec4, a: vec4, b: vec4): vec4;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static sub(out: vec4, a: vec4, b: vec4): vec4;
/**
* Multiplies two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static multiply(out: vec4, a: vec4, b: vec4): vec4;
/**
* Multiplies two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static mul(out: vec4, a: vec4, b: vec4): vec4;
/**
* Divides two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static divide(out: vec4, a: vec4, b: vec4): vec4;
/**
* Divides two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static div(out: vec4, a: vec4, b: vec4): vec4;
/**
* Math.ceil the components of a vec4
*
* @param {vec4} out the receiving vector
* @param {vec4} a vector to ceil
* @returns {vec4} out
*/
public static ceil (out:vec4, a:vec4) : vec4;
/**
* Math.floor the components of a vec4
*
* @param {vec4} out the receiving vector
* @param {vec4} a vector to floor
* @returns {vec4} out
*/
public static floor (out:vec4, a:vec4) : vec4;
/**
* Returns the minimum of two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static min(out: vec4, a: vec4, b: vec4): vec4;
/**
* Returns the maximum of two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static max(out: vec4, a: vec4, b: vec4): vec4;
/**
* Math.round the components of a vec4
*
* @param {vec4} out the receiving vector
* @param {vec4} a vector to round
* @returns {vec4} out
*/
public static round (out:vec4, a:vec4): vec4;
/**
* Scales a vec4 by a scalar number
*
* @param out the receiving vector
* @param a the vector to scale
* @param b amount to scale the vector by
* @returns out
*/
public static scale(out: vec4, a: vec4, b: number): vec4;
/**
* Adds two vec4's after scaling the second operand by a scalar value
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param scale the amount to scale b by before adding
* @returns out
*/
public static scaleAndAdd(out: vec4, a: vec4, b: vec4, scale: number): vec4;
/**
* Calculates the euclidian distance between two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static distance(a: vec4, b: vec4): number;
/**
* Calculates the euclidian distance between two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
public static dist(a: vec4, b: vec4): number;
/**
* Calculates the squared euclidian distance between two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static squaredDistance(a: vec4, b: vec4): number;
/**
* Calculates the squared euclidian distance between two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns squared distance between a and b
*/
public static sqrDist(a: vec4, b: vec4): number;
/**
* Calculates the length of a vec4
*
* @param a vector to calculate length of
* @returns length of a
*/
public static length(a: vec4): number;
/**
* Calculates the length of a vec4
*
* @param a vector to calculate length of
* @returns length of a
*/
public static len(a: vec4): number;
/**
* Calculates the squared length of a vec4
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static squaredLength(a: vec4): number;
/**
* Calculates the squared length of a vec4
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
public static sqrLen(a: vec4): number;
/**
* Negates the components of a vec4
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
public static negate(out: vec4, a: vec4): vec4;
/**
* Returns the inverse of the components of a vec4
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
public static inverse(out: vec4, a: vec4): vec4;
/**
* Normalize a vec4
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
public static normalize(out: vec4, a: vec4): vec4;
/**
* Calculates the dot product of two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns dot product of a and b
*/
public static dot(a: vec4, b: vec4): number;
/**
* Performs a linear interpolation between two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @param t interpolation amount between the two inputs
* @returns out
*/
public static lerp(out: vec4, a: vec4, b: vec4, t: number): vec4;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
public static random(out: vec4): vec4;
/**
* Generates a random vector with the given scale
*
* @param out the receiving vector
* @param scale length of the resulting vector. If ommitted, a unit vector will be returned
* @returns out
*/
public static random(out: vec4, scale: number): vec4;
/**
* Transforms the vec4 with a mat4.
*
* @param out the receiving vector
* @param a the vector to transform
* @param m matrix to transform with
* @returns out
*/
public static transformMat4(out: vec4, a: vec4, m: mat4): vec4;
/**
* Transforms the vec4 with a quat
*
* @param out the receiving vector
* @param a the vector to transform
* @param q quaternion to transform with
* @returns out
*/
public static transformQuat(out: vec4, a: vec4, q: quat): vec4;
/**
* Perform some operation over an array of vec4s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec4. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec4s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @param arg additional argument to pass to fn
* @returns a
* @function
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec4, b: vec4, arg: any) => void, arg: any): Float32Array;
/**
* Perform some operation over an array of vec4s.
*
* @param a the array of vectors to iterate over
* @param stride Number of elements between the start of each vec4. If 0 assumes tightly packed
* @param offset Number of elements to skip at the beginning of the array
* @param count Number of vec4s to iterate over. If 0 iterates over entire array
* @param fn Function to call for each vector in the array
* @returns a
* @function
*/
public static forEach(a: Float32Array, stride: number, offset: number, count: number,
fn: (a: vec4, b: vec4) => void): Float32Array;
/**
* Returns a string representation of a vector
*
* @param a vector to represent as a string
* @returns string representation of the vector
*/
public static str(a: vec4): string;
/**
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
*
* @param {vec4} a The first vector.
* @param {vec4} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static exactEquals (a:vec4, b:vec4) : boolean;
/**
* Returns whether or not the vectors have approximately the same elements in the same position.
*
* @param {vec4} a The first vector.
* @param {vec4} b The second vector.
* @returns {boolean} True if the vectors are equal, false otherwise.
*/
public static equals (a:vec4, b:vec4) : boolean;
}
// mat2
export class mat2 extends Float32Array {
private typeMat2:number;
/**
* Creates a new identity mat2
*
* @returns a new 2x2 matrix
*/
public static create():mat2;
/**
* Creates a new mat2 initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 2x2 matrix
*/
public static clone(a:mat2):mat2;
/**
* Copy the values from one mat2 to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static copy(out:mat2, a:mat2):mat2;
/**
* Set a mat2 to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
public static identity(out:mat2):mat2;
/**
* Create a new mat2 with the given values
*
* @param {number} m00 Component in column 0, row 0 position (index 0)
* @param {number} m01 Component in column 0, row 1 position (index 1)
* @param {number} m10 Component in column 1, row 0 position (index 2)
* @param {number} m11 Component in column 1, row 1 position (index 3)
* @returns {mat2} out A new 2x2 matrix
*/
public static fromValues(m00:number, m01:number, m10:number, m11:number):mat2;
/**
* Set the components of a mat2 to the given values
*
* @param {mat2} out the receiving matrix
* @param {number} m00 Component in column 0, row 0 position (index 0)
* @param {number} m01 Component in column 0, row 1 position (index 1)
* @param {number} m10 Component in column 1, row 0 position (index 2)
* @param {number} m11 Component in column 1, row 1 position (index 3)
* @returns {mat2} out
*/
public static set(out:mat2, m00:number, m01:number, m10:number, m11:number):mat2;
/**
* Transpose the values of a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static transpose(out:mat2, a:mat2):mat2;
/**
* Inverts a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static invert(out:mat2, a:mat2):mat2;
/**
* Calculates the adjugate of a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static adjoint(out:mat2, a:mat2):mat2;
/**
* Calculates the determinant of a mat2
*
* @param a the source matrix
* @returns determinant of a
*/
public static determinant(a:mat2):number;
/**
* Multiplies two mat2's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static multiply(out:mat2, a:mat2, b:mat2):mat2;
/**
* Multiplies two mat2's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static mul(out:mat2, a:mat2, b:mat2):mat2;
/**
* Rotates a mat2 by the given angle
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @returns out
*/
public static rotate(out:mat2, a:mat2, rad:number):mat2;
/**
* Scales the mat2 by the dimensions in the given vec2
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param v the vec2 to scale the matrix by
* @returns out
**/
public static scale(out:mat2, a:mat2, v:vec2):mat2;
/**
* Creates a matrix from a given angle
* This is equivalent to (but much faster than):
*
* mat2.identity(dest);
* mat2.rotate(dest, dest, rad);
*
* @param {mat2} out mat2 receiving operation result
* @param {number} rad the angle to rotate the matrix by
* @returns {mat2} out
*/
public static fromRotation(out:mat2, rad:number):mat2;
/**
* Creates a matrix from a vector scaling
* This is equivalent to (but much faster than):
*
* mat2.identity(dest);
* mat2.scale(dest, dest, vec);
*
* @param {mat2} out mat2 receiving operation result
* @param {vec2} v Scaling vector
* @returns {mat2} out
*/
public static fromScaling(out:mat2, v:vec2):mat2;
/**
* Returns a string representation of a mat2
*
* @param a matrix to represent as a string
* @returns string representation of the matrix
*/
public static str(a:mat2):string;
/**
* Returns Frobenius norm of a mat2
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
public static frob(a:mat2):number;
/**
* Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix
* @param L the lower triangular matrix
* @param D the diagonal matrix
* @param U the upper triangular matrix
* @param a the input matrix to factorize
*/
public static LDU(L:mat2, D:mat2, U:mat2, a:mat2):mat2;
/**
* Adds two mat2's
*
* @param {mat2} out the receiving matrix
* @param {mat2} a the first operand
* @param {mat2} b the second operand
* @returns {mat2} out
*/
public static add(out:mat2, a:mat2, b:mat2):mat2;
/**
* Subtracts matrix b from matrix a
*
* @param {mat2} out the receiving matrix
* @param {mat2} a the first operand
* @param {mat2} b the second operand
* @returns {mat2} out
*/
public static subtract (out:mat2, a:mat2, b:mat2):mat2;
/**
* Subtracts matrix b from matrix a
*
* @param {mat2} out the receiving matrix
* @param {mat2} a the first operand
* @param {mat2} b the second operand
* @returns {mat2} out
*/
public static sub (out:mat2, a:mat2, b:mat2):mat2;
/**
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
*
* @param {mat2} a The first matrix.
* @param {mat2} b The second matrix.
* @returns {boolean} True if the matrices are equal, false otherwise.
*/
public static exactEquals (a:mat2, b:mat2):boolean;
/**
* Returns whether or not the matrices have approximately the same elements in the same position.
*
* @param {mat2} a The first matrix.
* @param {mat2} b The second matrix.
* @returns {boolean} True if the matrices are equal, false otherwise.
*/
public static equals (a:mat2, b:mat2) :boolean;
/**
* Multiply each element of the matrix by a scalar.
*
* @param {mat2} out the receiving matrix
* @param {mat2} a the matrix to scale
* @param {number} b amount to scale the matrix's elements by
* @returns {mat2} out
*/
public static multiplyScalar (out:mat2, a:mat2, b:number) :mat2
/**
* Adds two mat2's after multiplying each element of the second operand by a scalar value.
*
* @param {mat2} out the receiving vector
* @param {mat2} a the first operand
* @param {mat2} b the second operand
* @param {number} scale the amount to scale b's elements by before adding
* @returns {mat2} out
*/
public static multiplyScalarAndAdd (out:mat2, a:mat2, b:mat2, scale:number): mat2
}
// mat2d
export class mat2d extends Float32Array {
private typeMat2d:number;
/**
* Creates a new identity mat2d
*
* @returns a new 2x3 matrix
*/
public static create(): mat2d;
/**
* Creates a new mat2d initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 2x3 matrix
*/
public static clone(a: mat2d): mat2d;
/**
* Copy the values from one mat2d to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static copy(out: mat2d, a: mat2d): mat2d;
/**
* Set a mat2d to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
public static identity(out: mat2d): mat2d;
/**
* Create a new mat2d with the given values
*
* @param {number} a Component A (index 0)
* @param {number} b Component B (index 1)
* @param {number} c Component C (index 2)
* @param {number} d Component D (index 3)
* @param {number} tx Component TX (index 4)
* @param {number} ty Component TY (index 5)
* @returns {mat2d} A new mat2d
*/
public static fromValues (a:number, b:number, c:number, d:number, tx:number, ty:number) : mat2d
/**
* Set the components of a mat2d to the given values
*
* @param {mat2d} out the receiving matrix
* @param {number} a Component A (index 0)
* @param {number} b Component B (index 1)
* @param {number} c Component C (index 2)
* @param {number} d Component D (index 3)
* @param {number} tx Component TX (index 4)
* @param {number} ty Component TY (index 5)
* @returns {mat2d} out
*/
public static set (out:mat2d, a:number, b:number, c:number, d:number, tx:number, ty:number) :mat2d
/**
* Inverts a mat2d
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
public static invert(out: mat2d, a: mat2d): mat2d;
/**
* Calculates the determinant of a mat2d
*
* @param a the source matrix
* @returns determinant of a
*/
public static determinant(a: mat2d): number;
/**
* Multiplies two mat2d's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static multiply(out: mat2d, a: mat2d, b: mat2d): mat2d;
/**
* Multiplies two mat2d's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
public static mul(out: mat2d, a: mat2d, b: mat2d): mat2d;
/**
* Rotates a mat2d by the given angle
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @returns out
*/
public static rotate(out: mat2d, a: mat2d, rad: number): mat2d;
/**
* Scales the mat2d by the dimensions in the given vec2
*
* @param out the receiving matrix
* @param a the matrix to translate
* @param v the vec2 to scale the matrix by
* @returns out
**/
public static scale(out: mat2d, a: mat2d, v: vec2): mat2d;
/**
* Translates the mat2d by the dimensions in the given vec2
*
* @param out the receiving matrix
* @param a the matrix to translate
* @param v the vec2 to translate the matrix by
* @returns out
**/
public static translate(out: mat2d, a: mat2d, v: vec2): mat2d;
/**
* Creates a matrix from a given angle
* This is equivalent to (but much faster than):
*
* mat2d.identity(dest);
* mat2d.rotate(dest, dest, rad);
*
* @param {mat2d} out mat2d receiving operation result
* @param {number} rad the angle to rotate the matrix by
* @returns {mat2d} out
*/
public static fromRotation (out:mat2d, rad:number): mat2d;
/**
* Creates a matrix from a vector scaling
* This is equivalent to (but much faster than):
*
* mat2d.identity(dest);
* mat2d.scale(dest, dest, vec);
*
* @param {mat2d} out mat2d receiving operation result
* @param {vec2} v Scaling vector
* @returns {mat2d} out
*/
public static fromScaling (out:mat2d, v:vec2):mat2d;
/**
* Creates a matrix from a vector translation
* This is equivalent to (but much faster than):
*
* mat2d.identity(dest);
* mat2d.translate(dest, dest, vec);
*
* @param {mat2d} out mat2d receiving operation result
* @param {vec2} v Translation vector
* @returns {mat2d} out
*/
public static fromTranslation (out:mat2d, v:vec2):mat2d
/**
* Returns a string representation of a mat2d
*
* @param a matrix to represent as a string
* @returns string representation of the matrix
*/
public static str(a: mat2d): string;
/**
* Returns Frobenius norm of a mat2d
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
public static frob(a: mat2d): number;
/**
* Adds two mat2d's
*
* @param {mat2d} out the receiving matrix
* @param {mat2d} a the first operand
* @param {mat2d} b the second operand
* @returns {mat2d} out
*/