Files
DefinitelyTyped/gl-matrix/gl-matrix.d.ts

2144 lines
61 KiB
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/borisyankov/DefinitelyTyped
declare module GLM {
interface IArray
{
/**
* Must be indexable like an array
*/
[index: number]: number;
}
}
// Common
declare module glMatrix {
/**
* Convert Degree To Radian
*
* @param a Angle in Degrees
*/
export function toRadian(a: number): number;
}
// vec2
declare module 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 module 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 module 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 module 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 module 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 module 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 module 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 frustum(out: GLM.IArray, left: number, right: number,
bottom: number, top: number, near: number, far: number): GLM.IArray;
/**
* Generates a perspective projection matrix with the given bounds
*
* @param out mat4 frustum matrix will be written into
* @param fovy Vertical field of view in radians
* @param aspect Aspect ratio. typically viewport width/height
* @param near Near bound of the frustum
* @param far Far bound of the frustum
* @returns out
*/
export function perspective(out: GLM.IArray, fovy: number, aspect: number,
near: number, far: number): GLM.IArray;
/**
* Generates a orthogonal projection 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 ortho(out: GLM.IArray, left: number, right: number,
bottom: number, top: number, near: number, far: number): GLM.IArray;
/**
* Generates a look-at matrix with the given eye position, focal point, and up axis
*
* @param out mat4 frustum matrix will be written into
* @param eye Position of the viewer
* @param center Point the viewer is looking at
* @param up vec3 pointing up
* @returns out
*/
export function lookAt(out: GLM.IArray, eye: GLM.IArray,
center: GLM.IArray, up: GLM.IArray): GLM.IArray;
/**
* Returns a string representation of a mat4
*
* @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 mat4
*
* @param a the matrix to calculate Frobenius norm of
* @returns Frobenius norm
*/
export function frob(a: GLM.IArray): number;
/**
* Creates a matrix from a quaternion rotation and vector translation
* This is equivalent to (but much faster than):
*
* mat4.identity(dest);
* mat4.translate(dest, vec);
* var quatMat = mat4.create();
* quat4.toMat4(quat, quatMat);
* mat4.multiply(dest, quatMat);
*
* @param out mat4 receiving operation result
* @param q Rotation quaternion
* @param v Translation vector
* @returns out
*/
export function fromRotationTranslation(out: GLM.IArray, q: GLM.IArray,
v: GLM.IArray): GLM.IArray;
/**
* Creates a matrix from a quaternion
*
* @param out mat4 receiving operation result
* @param q Rotation quaternion
* @returns out
*/
export function fromQuat(out: GLM.IArray, q: GLM.IArray): GLM.IArray;
}
// quat
declare module quat {
/**
* Creates a new identity quat
*
* @returns a new quaternion
*/
export function create(): GLM.IArray;
/**
* Creates a new quat initialized with values from an existing quaternion
*
* @param a quaternion to clone
* @returns a new quaternion
* @function
*/
export function clone(a: GLM.IArray): GLM.IArray;
/**
* Creates a new quat initialized with the given values
*
* @param x X component
* @param y Y component
* @param z Z component
* @param w W component
* @returns a new quaternion
* @function
*/
export function fromValues(x: number, y: number, z: number, w: number): GLM.IArray;
/**
* Copy the values from one quat to another
*
* @param out the receiving quaternion
* @param a the source quaternion
* @returns out
* @function
*/
export function copy(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Set the components of a quat to the given values
*
* @param out the receiving quaternion
* @param x X component
* @param y Y component
* @param z Z component
* @param w W component
* @returns out
* @function
*/
export function set(out: GLM.IArray, x: number, y: number, z: number, w: number): GLM.IArray;
/**
* Set a quat to the identity quaternion
*
* @param out the receiving quaternion
* @returns out
*/
export function identity(out: GLM.IArray): GLM.IArray;
/**
* Sets a quat from the given angle and rotation axis,
* then returns it.
*
* @param out the receiving quaternion
* @param axis the axis around which to rotate
* @param rad the angle in radians
* @returns out
**/
export function setAxisAngle(out: GLM.IArray, axis: GLM.IArray, rad: number): GLM.IArray;
/**
* Adds two quat's
*
* @param out the receiving quaternion
* @param a the first operand
* @param b the second operand
* @returns out
* @function
*/
export function add(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Multiplies two quat's
*
* @param out the receiving quaternion
* @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 quat's
*
* @param out the receiving quaternion
* @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;
/**
* Scales a quat 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
* @function
*/
export function scale(out: GLM.IArray, a: GLM.IArray, b: number): GLM.IArray;
/**
* Calculates the length of a quat
*
* @param a vector to calculate length of
* @returns length of a
* @function
*/
export function length(a: GLM.IArray): number;
/**
* Calculates the length of a quat
*
* @param a vector to calculate length of
* @returns length of a
* @function
*/
export function len(a: GLM.IArray): number;
/**
* Calculates the squared length of a quat
*
* @param a vector to calculate squared length of
* @returns squared length of a
* @function
*/
export function squaredLength(a: GLM.IArray): number;
/**
* Calculates the squared length of a quat
*
* @param a vector to calculate squared length of
* @returns squared length of a
* @function
*/
export function sqrLen(a: GLM.IArray): number;
/**
* Normalize a quat
*
* @param out the receiving quaternion
* @param a quaternion to normalize
* @returns out
* @function
*/
export function normalize(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the dot product of two quat's
*
* @param a the first operand
* @param b the second operand
* @returns dot product of a and b
* @function
*/
export function dot(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): number;
/**
* Performs a linear interpolation between two quat's
*
* @param out the receiving quaternion
* @param a the first operand
* @param b the second operand
* @param t interpolation amount between the two inputs
* @returns out
* @function
*/
export function lerp(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, t: number): GLM.IArray;
/**
* Performs a spherical linear interpolation between two quat
*
* @param out the receiving quaternion
* @param a the first operand
* @param b the second operand
* @param t interpolation amount between the two inputs
* @returns out
*/
export function slerp(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray, t: number): GLM.IArray;
/**
* Calculates the inverse of a quat
*
* @param out the receiving quaternion
* @param a quat to calculate inverse of
* @returns out
*/
export function invert(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Calculates the conjugate of a quat
* If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.
*
* @param out the receiving quaternion
* @param a quat to calculate conjugate of
* @returns out
*/
export function conjugate(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
/**
* Returns a string representation of a quatenion
*
* @param vec vector to represent as a string
* @returns string representation of the vector
*/
export function str(a: GLM.IArray): string;
/**
* Rotates a quaternion by the given angle about the X axis
*
* @param out quat receiving operation result
* @param a quat to rotate
* @param rad angle (in radians) to rotate
* @returns out
*/
export function rotateX(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Rotates a quaternion by the given angle about the Y axis
*
* @param out quat receiving operation result
* @param a quat to rotate
* @param rad angle (in radians) to rotate
* @returns out
*/
export function rotateY(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Rotates a quaternion by the given angle about the Z axis
*
* @param out quat receiving operation result
* @param a quat to rotate
* @param rad angle (in radians) to rotate
* @returns out
*/
export function rotateZ(out: GLM.IArray, a: GLM.IArray, rad: number): GLM.IArray;
/**
* Creates a quaternion from the given 3x3 rotation matrix.
*
* NOTE: The resultant quaternion is not normalized, so you should be sure
* to renormalize the quaternion yourself where necessary.
*
* @param out the receiving quaternion
* @param m rotation matrix
* @returns out
* @function
*/
export function fromMat3(out: GLM.IArray, m: GLM.IArray): GLM.IArray;
/**
* Sets the specified quaternion with values corresponding to the given
* axes. Each axis is a vec3 and is expected to be unit length and
* perpendicular to all other specified axes.
*
* @param view the vector representing the viewing direction
* @param right the vector representing the local "right" direction
* @param up the vector representing the local "up" direction
* @returns out
*/
export function setAxes(out: GLM.IArray, view: GLM.IArray, right: GLM.IArray,
up: GLM.IArray): GLM.IArray;
/**
* Sets a quaternion to represent the shortest rotation from one
* vector to another.
*
* Both vectors are assumed to be unit length.
*
* @param out the receiving quaternion.
* @param a the initial vector
* @param b the destination vector
* @returns out
*/
export function rotationTo(out: GLM.IArray, a: GLM.IArray, b: GLM.IArray): GLM.IArray;
/**
* Calculates the W component of a quat from the X, Y, and Z components.
* Assumes that quaternion is 1 unit in length.
* Any existing W component will be ignored.
*
* @param out the receiving quaternion
* @param a quat to calculate W component of
* @returns out
*/
export function calculateW(out: GLM.IArray, a: GLM.IArray): GLM.IArray;
}