{"version":3,"file":"compute2DProjections.mjs","sources":["../../../../src/scene/mesh-perspective/utils/compute2DProjections.ts"],"sourcesContent":["import type { ArrayFixed } from '../../../utils/types';\n\ntype Matrix3x3 = ArrayFixed;\ntype Vector3 = ArrayFixed;\n\nfunction computeAdjugate(out: Matrix3x3, matrix: Matrix3x3): Matrix3x3\n{\n const a00 = matrix[0];\n const a01 = matrix[1];\n const a02 = matrix[2];\n const a10 = matrix[3];\n const a11 = matrix[4];\n const a12 = matrix[5];\n const a20 = matrix[6];\n const a21 = matrix[7];\n const a22 = matrix[8];\n\n out[0] = (a11 * a22) - (a12 * a21);\n out[1] = (a02 * a21) - (a01 * a22);\n out[2] = (a01 * a12) - (a02 * a11);\n out[3] = (a12 * a20) - (a10 * a22);\n out[4] = (a00 * a22) - (a02 * a20);\n out[5] = (a02 * a10) - (a00 * a12);\n out[6] = (a10 * a21) - (a11 * a20);\n out[7] = (a01 * a20) - (a00 * a21);\n out[8] = (a00 * a11) - (a01 * a10);\n\n return out;\n}\n\nfunction multiplyMatrix3x3(out: Matrix3x3, a: Matrix3x3, b: Matrix3x3)\n{\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[3];\n const a11 = a[4];\n const a12 = a[5];\n const a20 = a[6];\n const a21 = a[7];\n const a22 = a[8];\n\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[3];\n const b11 = b[4];\n const b12 = b[5];\n const b20 = b[6];\n const b21 = b[7];\n const b22 = b[8];\n\n out[0] = (b00 * a00) + (b01 * a10) + (b02 * a20);\n out[1] = (b00 * a01) + (b01 * a11) + (b02 * a21);\n out[2] = (b00 * a02) + (b01 * a12) + (b02 * a22);\n\n out[3] = (b10 * a00) + (b11 * a10) + (b12 * a20);\n out[4] = (b10 * a01) + (b11 * a11) + (b12 * a21);\n out[5] = (b10 * a02) + (b11 * a12) + (b12 * a22);\n\n out[6] = (b20 * a00) + (b21 * a10) + (b22 * a20);\n out[7] = (b20 * a01) + (b21 * a11) + (b22 * a21);\n out[8] = (b20 * a02) + (b21 * a12) + (b22 * a22);\n\n return out;\n}\n\nfunction multiplyMatrixAndVector(out: Vector3, m: Matrix3x3, v: Vector3): Vector3\n{\n const x = v[0];\n const y = v[1];\n const z = v[2];\n\n out[0] = (m[0] * x) + (m[1] * y) + (m[2] * z);\n out[1] = (m[3] * x) + (m[4] * y) + (m[5] * z);\n out[2] = (m[6] * x) + (m[7] * y) + (m[8] * z);\n\n return out;\n}\n\n//\nconst tempMatrix: Matrix3x3 = [0, 0, 0, 0, 0, 0, 0, 0, 0];\nconst tempVec: Vector3 = [0, 0, 0];\nconst tempVec2: Vector3 = [0, 0, 0];\n\nfunction generateBasisToPointsMatrix(\n out: Matrix3x3,\n x1: number, y1: number,\n x2: number, y2: number,\n x3: number, y3: number,\n x4: number, y4: number\n): Matrix3x3\n{\n const m: Matrix3x3 = tempMatrix;\n\n m[0] = x1;\n m[1] = x2;\n m[2] = x3;\n m[3] = y1;\n m[4] = y2;\n m[5] = y3;\n m[6] = 1;\n m[7] = 1;\n m[8] = 1;\n\n const adjugateM: Matrix3x3 = computeAdjugate(\n out, // reusing out as adjugateM is only used once\n m\n );\n\n tempVec2[0] = x4;\n tempVec2[1] = y4;\n tempVec2[2] = 1;\n\n const v: Vector3 = multiplyMatrixAndVector(\n tempVec,\n adjugateM,\n tempVec2,\n );\n\n const diagonalMatrix = out; // we can reuse the out matrix as the diagonal matrix is only used once\n\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = v[2];\n\n return multiplyMatrix3x3(out, diagonalMatrix, m);\n}\n\nconst tempSourceMatrix: Matrix3x3 = [0, 0, 0, 0, 0, 0, 0, 0, 0];\nconst tempDestinationMatrix: Matrix3x3 = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n/**\n * Compute a 2D projection matrix\n * @param out - The matrix to store the result in\n * @param x1s - The x coordinate of the first source point\n * @param y1s - The y coordinate of the first source point\n * @param x1d - The x coordinate of the first destination point\n * @param y1d - The y coordinate of the first destination point\n * @param x2s - The x coordinate of the second source point\n * @param y2s - The y coordinate of the second source point\n * @param x2d - The x coordinate of the second destination point\n * @param y2d - The y coordinate of the second destination point\n * @param x3s - The x coordinate of the third source point\n * @param y3s - The y coordinate of the third source point\n * @param x3d - The x coordinate of the third destination point\n * @param y3d - The y coordinate of the third destination point\n * @param x4s - The x coordinate of the fourth source point\n * @param y4s - The y coordinate of the fourth source point\n * @param x4d - The x coordinate of the fourth destination point\n * @param y4d - The y coordinate of the fourth destination point\n * @returns - The computed 2D projection matrix\n * @private\n */\n// eslint-disable-next-line max-params\nexport function compute2DProjection(\n out: Matrix3x3,\n x1s: number, y1s: number, x1d: number, y1d: number,\n x2s: number, y2s: number, x2d: number, y2d: number,\n x3s: number, y3s: number, x3d: number, y3d: number,\n x4s: number, y4s: number, x4d: number, y4d: number\n): Matrix3x3\n{\n const sourceMatrix = generateBasisToPointsMatrix(\n tempSourceMatrix,\n x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s\n );\n\n const destinationMatrix = generateBasisToPointsMatrix(\n tempDestinationMatrix,\n x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d\n );\n\n return multiplyMatrix3x3(\n out,\n computeAdjugate(sourceMatrix, sourceMatrix),\n destinationMatrix\n );\n}\n"],"names":[],"mappings":"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"}