import type { ReadonlyVec, Vec } from "@thi.ng/vectors";
import type { ReadonlyMat } from "./api.js";
/**
 * Transforms given point `p` (4D, homogeneous coordinates) with 4x4
 * matrix `mvp`, applies perspective divide and then transforms XY
 * components with 2x3 matrix `view` matrix. Returns 3D vector. The
 * result Z component can be used for depth sorting.
 *
 * @param out -
 * @param mvp - 4x4 matrix
 * @param view - 2x3 matrix
 * @param p -
 */
export declare const project: (out: Vec | null, mvp: ReadonlyMat, view: ReadonlyMat, p: ReadonlyVec) => Vec;
/**
 * Same as {@link project}, but slightly faster and more convenient for
 * the most common use case of projecting a 3D input point (assumes
 * `w=1` for its homogeneous coordinate, i.e. `[x,y,z,1]`). Returns
 * `undefined` if the computed perspective divisor is zero (and would
 * cause in `NaN` results).
 *
 * @param out -
 * @param mvp - 4x4 matrix
 * @param view - 2x3 matrix
 * @param p -
 */
export declare const project3: (out: Vec | null, mvp: ReadonlyMat, view: ReadonlyMat, p: ReadonlyVec) => Vec | undefined;
/**
 * Reverse operation of {@link project3}. If `invert` is true (default:
 * false), both `mvp` and `view` matrices will be inverted first
 * (non-destructively), else they're both assumed to be inverted
 * already.
 *
 * @param out -
 * @param mvp - 4x4 matrix
 * @param view - 2x3 matrix
 * @param p -
 * @param invert -
 */
export declare const unproject: (out: Vec, mvp: ReadonlyMat, view: ReadonlyMat, p: ReadonlyVec, doInvert?: boolean) => Vec | undefined;
//# sourceMappingURL=project.d.ts.map