declarations
Version:
[](https://www.npmjs.com/package/declarations)
1,757 lines (1,567 loc) • 62.4 kB
TypeScript
// Type definitions for gl-matrix 2.2.2
// Project: https://github.com/toji/gl-matrix
// Definitions by: Tat <https://github.com/tatchx>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare namespace GLM {
interface IArray
{
/**
* Must be indexable like an array
*/
[index: number]: number;
}
}
// Common
declare namespace glMatrix {
/**
* Convert Degree To Radian
*
* @param a Angle in Degrees
*/
export function toRadian(a: number): number;
}
// vec2
declare namespace vec2 {
/**
* Creates a new, empty vec2
*
* @returns a new 2D vector
*/
export function create(): GLM.IArray;
/**
* Creates a new vec2 initialized with values from an existing vector
*
* @param a a vector to clone
* @returns a new 2D vector
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Creates a new vec2 initialized with the given values
*
* @param x X component
* @param y Y component
* @returns a new 2D vector
*/
export function fromValues(x: number, y: number): GLM.IArray;
/**
* Copy the values from one vec2 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function set(out: GLM.IArray, x: number, y: number): GLM.IArray;
/**
* Adds two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function add(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function subtract(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function sub(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function divide(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function div(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the minimum of two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function min(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the maximum of two vec2's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function max(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function scale(out: GLM.IArray, a: GLM.IArray, b: number): GLM.IArray;
/**
* 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
*/
export function scaleAndAdd(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, scale: number): GLM.IArray;
/**
* Calculates the euclidian distance between two vec2's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
export function distance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function dist(a: GLM.IArray, b: GLM.IArray): 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
*/
export function squaredDistance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function sqrDist(a: GLM.IArray, b: GLM.IArray): number;
/**
* Calculates the length of a vec2
*
* @param a vector to calculate length of
* @returns length of a
*/
export function length(a: GLM.IArray): number;
/**
* Calculates the length of a vec2
*
* @param a vector to calculate length of
* @returns length of a
*/
export function len(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec2
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function squaredLength(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec2
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function sqrLen(a: GLM.IArray): number;
/**
* Negates the components of a vec2
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
export function negate(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Returns the inverse of the components of a vec2
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
export function inverse(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Normalize a vec2
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
export function normalize(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function dot(a: GLM.IArray, b: GLM.IArray): 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
*/
export function cross(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function lerp(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, t: number): GLM.IArray;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
export function random(out: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function random(out: GLM.IArray, scale: number): GLM.IArray;
/**
* 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
*/
export function transformMat2(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformMat2d(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformMat3(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformMat4(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function forEach(a: GLM.IArray, stride: number, offset: number, count: number,
fn: (a: GLM.IArray, b: GLM.IArray, arg: any) => void, arg: any): GLM.IArray;
/**
* 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
*/
export function forEach(a: GLM.IArray, stride: number, offset: number, count: number,
fn: (a: GLM.IArray, b: GLM.IArray) => void): GLM.IArray;
/**
* Returns a string representation of a vector
*
* @param vec vector to represent as a string
* @returns string representation of the vector
*/
export function str(a: GLM.IArray): string;
}
// vec3
declare namespace vec3 {
/**
* Creates a new, empty vec3
*
* @returns a new 3D vector
*/
export function create(): GLM.IArray;
/**
* Creates a new vec3 initialized with values from an existing vector
*
* @param a vector to clone
* @returns a new 3D vector
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function fromValues(x: number, y: number, z: number): GLM.IArray;
/**
* Copy the values from one vec3 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function set(out: GLM.IArray, x: number, y: number, z: number): GLM.IArray;
/**
* Adds two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function add(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function subtract(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function sub(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray
/**
* Multiplies two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function divide(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function div(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the minimum of two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function min(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the maximum of two vec3's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function max(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function scale(out: GLM.IArray, a: GLM.IArray, b: number): GLM.IArray;
/**
* 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
*/
export function scaleAndAdd(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, scale: number): GLM.IArray;
/**
* Calculates the euclidian distance between two vec3's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
export function distance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function dist(a: GLM.IArray, b: GLM.IArray): 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
*/
export function squaredDistance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function sqrDist(a: GLM.IArray, b: GLM.IArray): number;
/**
* Calculates the length of a vec3
*
* @param a vector to calculate length of
* @returns length of a
*/
export function length(a: GLM.IArray): number;
/**
* Calculates the length of a vec3
*
* @param a vector to calculate length of
* @returns length of a
*/
export function len(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec3
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function squaredLength(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec3
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function sqrLen(a: GLM.IArray): number;
/**
* Negates the components of a vec3
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
export function negate(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Returns the inverse of the components of a vec3
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
export function inverse(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Normalize a vec3
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
export function normalize(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function dot(a: GLM.IArray, b: GLM.IArray): 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
*/
export function cross(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function lerp(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, t: number): GLM.IArray;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
export function random(out: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function random(out: GLM.IArray, scale: number): GLM.IArray;
/**
* 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
*/
export function rotateX(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, c: number): GLM.IArray;
/**
* 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
*/
export function rotateY(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, c: number): GLM.IArray;
/**
* 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
*/
export function rotateZ(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, c: number): GLM.IArray;
/**
* 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
*/
export function transformMat3(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformMat4(out: GLM.IArray, a: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformQuat(out: GLM.IArray, a: GLM.IArray, q: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function forEach(out: GLM.IArray, string: number, offset: number, count: number,
fn: (a: GLM.IArray, b: GLM.IArray, arg: any) => void, arg: any): GLM.IArray;
/**
* 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
*/
export function forEach(out: GLM.IArray, string: number, offset: number, count: number,
fn: (a: GLM.IArray, b: GLM.IArray) => void): GLM.IArray;
/**
* Get the angle between two 3D vectors
* @param a The first operand
* @param b The second operand
* @returns The angle in radians
*/
export function angle(a: GLM.IArray, b: GLM.IArray): number;
/**
* Returns a string representation of a vector
*
* @param vec vector to represent as a string
* @returns string representation of the vector
*/
export function str(a: GLM.IArray): string;
}
// vec4
declare namespace vec4 {
/**
* Creates a new, empty vec4
*
* @returns a new 4D vector
*/
export function create(): GLM.IArray;
/**
* Creates a new vec4 initialized with values from an existing vector
*
* @param a vector to clone
* @returns a new 4D vector
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function fromValues(x: number, y: number, z: number, w: number): GLM.IArray;
/**
* Copy the values from one vec4 to another
*
* @param out the receiving vector
* @param a the source vector
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function set(out: GLM.IArray, x: number, y: number, z: number, w: number): GLM.IArray;
/**
* Adds two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function add(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function subtract(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Subtracts vector b from vector a
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function sub(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function divide(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Divides two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function div(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the minimum of two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function min(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns the maximum of two vec4's
*
* @param out the receiving vector
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function max(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function scale(out: GLM.IArray, a: GLM.IArray, b: number): GLM.IArray;
/**
* 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
*/
export function scaleAndAdd(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, scale: number): GLM.IArray;
/**
* Calculates the euclidian distance between two vec4's
*
* @param a the first operand
* @param b the second operand
* @returns distance between a and b
*/
export function distance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function dist(a: GLM.IArray, b: GLM.IArray): 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
*/
export function squaredDistance(a: GLM.IArray, b: GLM.IArray): 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
*/
export function sqrDist(a: GLM.IArray, b: GLM.IArray): number;
/**
* Calculates the length of a vec4
*
* @param a vector to calculate length of
* @returns length of a
*/
export function length(a: GLM.IArray): number;
/**
* Calculates the length of a vec4
*
* @param a vector to calculate length of
* @returns length of a
*/
export function len(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec4
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function squaredLength(a: GLM.IArray): number;
/**
* Calculates the squared length of a vec4
*
* @param a vector to calculate squared length of
* @returns squared length of a
*/
export function sqrLen(a: GLM.IArray): number;
/**
* Negates the components of a vec4
*
* @param out the receiving vector
* @param a vector to negate
* @returns out
*/
export function negate(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Returns the inverse of the components of a vec4
*
* @param out the receiving vector
* @param a vector to invert
* @returns out
*/
export function inverse(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Normalize a vec4
*
* @param out the receiving vector
* @param a vector to normalize
* @returns out
*/
export function normalize(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function dot(a: GLM.IArray, b: GLM.IArray): 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
*/
export function lerp(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, t: number): GLM.IArray;
/**
* Generates a random unit vector
*
* @param out the receiving vector
* @returns out
*/
export function random(out: GLM.IArray): GLM.IArray;
/**
* Generates a random vector with the given scale
*
* @param out the receiving vector
* @param Length of the resulting vector. If ommitted, a unit vector will be returned
* @returns out
*/
export function random(out: GLM.IArray, scale: number): GLM.IArray;
/**
* 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
*/
export function transformMat4(out: GLM.IArray, a: GLM.IArray, mat: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function transformQuat(out: GLM.IArray, a: GLM.IArray, quat: GLM.IArray): GLM.IArray;
/**
* 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 additional argument to pass to fn
* @returns a
* @function
*/
export function forEach(out: GLM.IArray, string: number, offset: number, count: number,
callback: (a: GLM.IArray, b: GLM.IArray, arg: any) => void, arg: any): GLM.IArray;
/**
* 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
*/
export function forEach(out: GLM.IArray, string: number, offset: number, count: number,
callback: (a: GLM.IArray, b: GLM.IArray) => void): GLM.IArray;
/**
* Returns a string representation of a vector
*
* @param vec vector to represent as a string
* @returns string representation of the vector
*/
export function str(a: GLM.IArray): string;
}
// mat2
declare namespace mat2 {
/**
* Creates a new identity mat2
*
* @returns a new 2x2 matrix
*/
export function create(): GLM.IArray;
/**
* Creates a new mat2 initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 2x2 matrix
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Copy the values from one mat2 to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Set a mat2 to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
export function identity(out: GLM.IArray): GLM.IArray;
/**
* Transpose the values of a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function transpose(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Inverts a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function invert(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the adjugate of a mat2
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function adjoint(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the determinant of a mat2
*
* @param a the source matrix
* @returns determinant of a
*/
export function determinant(a: GLM.IArray): number;
/**
* Multiplies two mat2's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two mat2's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function rotate(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* 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
**/
export function scale(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Returns a string representation of a mat2
*
* @param a matrix to represent as a string
* @returns string representation of the matrix
*/
export function str(a: GLM.IArray): string;
/**
* Returns Frobenius norm of a mat2
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
export function frob(a: GLM.IArray): 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
*/
export function LDU(L: GLM.IArray, D: GLM.IArray, U: GLM.IArray, a: GLM.IArray): GLM.IArray;
}
// mat2d
declare namespace mat2d {
/**
* Creates a new identity mat2d
*
* @returns a new 2x3 matrix
*/
export function create(): GLM.IArray;
/**
* Creates a new mat2d initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 2x3 matrix
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Copy the values from one mat2d to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Set a mat2d to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
export function identity(out: GLM.IArray): GLM.IArray;
/**
* Inverts a mat2d
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function invert(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the determinant of a mat2d
*
* @param a the source matrix
* @returns determinant of a
*/
export function determinant(a: GLM.IArray): number;
/**
* Multiplies two mat2d's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two mat2d's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* 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
*/
export function rotate(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* 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
**/
export function scale(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* 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
**/
export function translate(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Returns a string representation of a mat2d
*
* @param a matrix to represent as a string
* @returns string representation of the matrix
*/
export function str(a: GLM.IArray): string;
/**
* Returns Frobenius norm of a mat2d
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
export function frob(a: GLM.IArray): number;
}
// mat3
declare namespace mat3 {
/**
* Creates a new identity mat3
*
* @returns a new 3x3 matrix
*/
export function create(): GLM.IArray;
/**
* Creates a new mat3 initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 3x3 matrix
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Copy the values from one mat3 to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Set a mat3 to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
export function identity(out: GLM.IArray): GLM.IArray;
/**
* Transpose the values of a mat3
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function transpose(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Inverts a mat3
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function invert(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the adjugate of a mat3
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function adjoint(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the determinant of a mat3
*
* @param a the source matrix
* @returns determinant of a
*/
export function determinant(a: GLM.IArray): number;
/**
* Multiplies two mat3's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two mat3's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Returns a string representation of a mat3
*
* @param mat matrix to represent as a string
* @returns string representation of the matrix
*/
export function str(mat: GLM.IArray): string;
/**
* Returns Frobenius norm of a mat3
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
export function frob(a: GLM.IArray): number;
/**
* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix
*
* @param out mat3 receiving operation result
* @param a Mat4 to derive the normal matrix from
*
* @returns out
*/
export function normalFromMat4(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates a 3x3 matrix from the given quaternion
*
* @param out mat3 receiving operation result
* @param q Quaternion to create matrix from
*
* @returns out
*/
export function fromQuat(out: GLM.IArray, q: GLM.IArray): GLM.IArray;
/**
* Copies the upper-left 3x3 values into the given mat3.
*
* @param out the receiving 3x3 matrix
* @param a the source 4x4 matrix
* @returns out
*/
export function fromMat4(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Scales the mat3 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
**/
export function scale(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Copies the values from a mat2d into a mat3
*
* @param out the receiving matrix
* @param {mat2d} a the matrix to copy
* @returns out
**/
export function fromMat2d(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Translate a mat3 by the given vector
*
* @param out the receiving matrix
* @param a the matrix to translate
* @param v vector to translate by
* @returns out
*/
export function translate(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Rotates a mat3 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
*/
export function rotate(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
}
// mat4
declare namespace mat4 {
/**
* Creates a new identity mat4
*
* @returns a new 4x4 matrix
*/
export function create(): GLM.IArray;
/**
* Creates a new mat4 initialized with values from an existing matrix
*
* @param a matrix to clone
* @returns a new 4x4 matrix
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Copy the values from one mat4 to another
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Set a mat4 to the identity matrix
*
* @param out the receiving matrix
* @returns out
*/
export function identity(a: GLM.IArray): GLM.IArray;
/**
* Transpose the values of a mat4
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function transpose(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Inverts a mat4
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function invert(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the adjugate of a mat4
*
* @param out the receiving matrix
* @param a the source matrix
* @returns out
*/
export function adjoint(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the determinant of a mat4
*
* @param a the source matrix
* @returns determinant of a
*/
export function determinant(a: GLM.IArray): number;
/**
* Multiplies two mat4's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function multiply(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two mat4's
*
* @param out the receiving matrix
* @param a the first operand
* @param b the second operand
* @returns out
*/
export function mul(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Translate a mat4 by the given vector
*
* @param out the receiving matrix
* @param a the matrix to translate
* @param v vector to translate by
* @returns out
*/
export function translate(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Scales the mat4 by the dimensions in the given vec3
*
* @param out the receiving matrix
* @param a the matrix to scale
* @param v the vec3 to scale the matrix by
* @returns out
**/
export function scale(out: GLM.IArray, a: GLM.IArray, v: GLM.IArray): GLM.IArray;
/**
* Rotates a mat4 by the given angle
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @param axis the axis to rotate around
* @returns out
*/
export function rotate(out: GLM.IArray, a: GLM.IArray, rad: number, axis: GLM.IArray): GLM.IArray;
/**
* Rotates a matrix by the given angle around the X axis
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @returns out
*/
export function rotateX(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Rotates a matrix by the given angle around the Y axis
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @returns out
*/
export function rotateY(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Rotates a matrix by the given angle around the Z axis
*
* @param out the receiving matrix
* @param a the matrix to rotate
* @param rad the angle to rotate the matrix by
* @returns out
*/
export function rotateZ(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Generates a frustum matrix with the given bounds
*
* @param out mat4 frustum matrix will be written into
* @param left Left bound of the frustum
* @param right Right bound of the frustum
* @param bottom Bottom bound of the frustum
* @param top Top bound of the frustum
* @param near Near bound of the frustum
* @param far Far bound of the frustum
* @returns out
*/
export function frust