import type { Point3D, VectorPoint } from 'gis-tools/index.js';
/** @returns a 4x4 identity matrix */
export declare function create(): Float32Array;
/**
 * Clone a matrix
 * @param m - input matrix to clone
 * @returns cloned matrix
 */
export declare function clone(m: Float32Array): Float32Array;
/**
 * Prepare an Blend matrix
 * @param m - input matrix
 * @param width - viewport width
 * @param height - viewport height
 * @param near - near plane
 * @param far - far plane
 * @returns the blended matrix
 */
export declare function blend(m: Float32Array, width: number, height: number, near: number, far: number): Float32Array;
/**
 * Prepare an Orthographic projection matrix
 * @param m - input matrix
 * @param width - viewport width
 * @param height - viewport height
 * @param far - far plane
 * @returns the orthographic matrix
 */
export declare function ortho(m: Float32Array, width: number, height: number, far: number): Float32Array;
/**
 * Prepare a perspective projection matrix
 * @param m - input matrix
 * @param fovy - field of view
 * @param aspect - viewport aspect
 * @param near - near plane
 * @param far - far plane
 * @returns the perspective matrix
 */
export declare function perspective(m: Float32Array, fovy: number, aspect: number, near: number, far: number): Float32Array;
/**
 * Prepare a lookAt matrix
 * @param eye - camera position
 * @param up - camera up vector
 * @returns the lookAt matrix
 */
export declare function lookAt(eye: VectorPoint, up: VectorPoint): Float32Array;
/**
 * Add a center to the matrix
 * @param m - input matrix
 * @param v - center vector
 * @returns the matrix
 */
export declare function addCenter(m: Float32Array, v: Float32Array): Float32Array;
/**
 * Translate the matrix given a vector
 * @param m - input matrix
 * @param v - vector
 * @returns the matrix
 */
export declare function translate(m: Float32Array, v: Float32Array | Point3D): Float32Array;
/**
 * Scale the matrix via a vector
 * @param m - input matrix
 * @param v - vector
 * @returns the matrix
 */
export declare function scale(m: Float32Array, v: Float32Array | Point3D): Float32Array;
/**
 * Rotate the matrix
 * @param m - input matrix
 * @param rad - rotation in radians
 * @returns the matrix
 */
export declare function rotate(m: Float32Array, rad: Point3D): Float32Array;
/**
 * Rotate the matrix around the X axis
 * @param m - input matrix
 * @param rad - rotation in radians
 * @returns the matrix
 */
export declare function rotateX(m: Float32Array, rad: number): Float32Array;
/**
 * Rotate the matrix around the Y axis
 * @param m - input matrix
 * @param rad - rotation in radians
 * @returns the matrix
 */
export declare function rotateY(m: Float32Array, rad: number): Float32Array;
/**
 * Rotate the matrix around the Z axis
 * @param m - input matrix
 * @param rad - rotation in radians
 * @returns the matrix
 */
export declare function rotateZ(m: Float32Array, rad: number): Float32Array;
/**
 * Multiply a matrix by a vector
 * @param m - input matrix
 * @param v - vector
 * @returns the vector
 */
export declare function multiplyVector(m: Float32Array, v: VectorPoint): [x: number, y: number, z: number, t: number];
/**
 * Multiply two matrices
 * @param a - input matrix
 * @param b - input matrix
 * @returns the matrix
 */
export declare function multiply(a: Float32Array, b: Float32Array | number[]): Float32Array;
/**
 * Invert a matrix
 * @param matrix - input matrix
 * @returns the inverted matrix
 */
export declare function invert(matrix: Float32Array): null | Float32Array;
/**
 * Project a 3D vector given an input matrix
 * @param matrix - input matrix
 * @param vector - vector to project
 * @returns the projected vector
 */
export declare function project(matrix: Float32Array, vector: VectorPoint): VectorPoint;
