import Vector3D from "openfl/geom/Vector3D"; import Point from "openfl/geom/Point"; import Matrix3D from "openfl/geom/Matrix3D"; import Matrix from "openfl/geom/Matrix"; declare namespace starling.utils { /** * A utility class containing methods related to the Matrix class. */ export class MatrixUtil { /** * Converts a 2D matrix to a 3D matrix. If you pass an out-matrix, * * the result will be stored in this matrix instead of creating a new object. */ static convertTo3D(matrix: Matrix, out?: Matrix3D): Matrix3D; /** * Converts a 3D matrix to a 2D matrix. Beware that this will work only for a 3D matrix * * describing a pure 2D transformation. */ static convertTo2D(matrix3D: Matrix3D, out?: Matrix): Matrix; /** * Determines if the matrix is an identity matrix. */ static isIdentity(matrix: Matrix): boolean; /** * Determines if the 3D matrix is an identity matrix. */ static isIdentity3D(matrix: Matrix3D): boolean; /** * Transform a point with the given matrix. */ static transformPoint(matrix: Matrix, point: Point, out?: Point): Point; /** * Transforms a 3D point with the given matrix. */ static transformPoint3D(matrix: Matrix3D, point: Vector3D, out?: Vector3D): Vector3D; /** * Uses a matrix to transform 2D coordinates into a different space. If you pass an * * out-point, the result will be stored in this point instead of creating a * * new object. */ static transformCoords(matrix: Matrix, x: number, y: number, out?: Point): Point; /** * Uses a matrix to transform 3D coordinates into a different space. If you pass a * * 'resultVector', the result will be stored in this vector3D instead of creating a * * new object. */ static transformCoords3D(matrix: Matrix3D, x: number, y: number, z: number, out?: Vector3D): Vector3D; /** * Appends a skew transformation to a matrix (angles in radians). The skew matrix * * has the following form: * *
		 *      * | cos(skewY)  -sin(skewX)  0 |
		 *      * | sin(skewY)   cos(skewX)  0 |
		 *      * |     0            0       1 |
		 *      * 
* */ static skew(matrix: Matrix, skewX: number, skewY: number): void; /** * Prepends a matrix to 'base' by multiplying it with another matrix. */ static prependMatrix(base: Matrix, prep: Matrix): void; /** * Prepends an incremental translation to a Matrix object. */ static prependTranslation(matrix: Matrix, tx: number, ty: number): void; /** * Prepends an incremental scale change to a Matrix object. */ static prependScale(matrix: Matrix, sx: number, sy: number): void; /** * Prepends an incremental rotation to a Matrix object (angle in radians). */ static prependRotation(matrix: Matrix, angle: number): void; /** * Prepends a skew transformation to a Matrix object (angles in radians). The skew matrix * * has the following form: * *
		 *      * | cos(skewY)  -sin(skewX)  0 |
		 *      * | sin(skewY)   cos(skewX)  0 |
		 *      * |     0            0       1 |
		 *      * 
* */ static prependSkew(matrix: Matrix, skewX: number, skewY: number): void; /** * Converts a Matrix3D instance to a String, which is useful when debugging. Per default, * * the raw data is displayed transposed, so that the columns are displayed vertically. */ static toString3D(matrix: Matrix3D, transpose?: boolean, precision?: number): string; /** * Converts a Matrix instance to a String, which is useful when debugging. */ static toString(matrix: Matrix, precision?: number): string; /** * Updates the given matrix so that it points exactly to pixel boundaries. This works * * only if the object is unscaled and rotated by a multiple of 90 degrees. * * * * @param matrix The matrix to manipulate in place (normally the modelview matrix). * * @param pixelSize The size (in points) that represents one pixel in the back buffer. * */ static snapToPixels(matrix: Matrix, pixelSize: number): void; /** * Creates a perspective projection matrix suitable for 2D and 3D rendering. * * * *

The first 4 parameters define which area of the stage you want to view (the camera * * will 'zoom' to exactly this region). The final 3 parameters determine the perspective * * in which you're looking at the stage.

* * * *

The stage is always on the rectangle that is spawned up between x- and y-axis (with * * the given size). All objects that are exactly on that rectangle (z equals zero) will be * * rendered in their true size, without any distortion.

* * * *

If you pass only the first 4 parameters, the camera will be set up above the center * * of the stage, with a field of view of 1.0 rad.

* */ static createPerspectiveProjectionMatrix(x: number, y: number, width: number, height: number, stageWidth?: number, stageHeight?: number, cameraPos?: Vector3D, out?: Matrix3D): Matrix3D; /** * Creates a orthographic projection matrix suitable for 2D rendering. */ static createOrthographicProjectionMatrix(x: number, y: number, width: number, height: number, out?: Matrix): Matrix; } } export default starling.utils.MatrixUtil;