{"version":3,"file":"applyProjectiveTransformationToPlane.mjs","sources":["../../../../src/scene/mesh-perspective/utils/applyProjectiveTransformationToPlane.ts"],"sourcesContent":["import type { ArrayFixed } from '../../../utils/types';\nimport type { PlaneGeometry } from '../../mesh-plane/PlaneGeometry';\n\n/**\n * Apply a projective transformation to a plane geometry\n * @param width - The width of the plane\n * @param height - The height of the plane\n * @param geometry - The plane geometry to apply the transformation to\n * @param transformationMatrix - The transformation matrix to apply\n */\nexport function applyProjectiveTransformationToPlane(\n width: number,\n height: number,\n geometry: PlaneGeometry,\n transformationMatrix: ArrayFixed\n)\n{\n const buffer = geometry.buffers[0];\n\n // Access the vertices of the mesh\n const vertices = buffer.data;\n\n const { verticesX, verticesY } = geometry;\n\n const sizeX = (width) / (verticesX - 1);\n const sizeY = (height) / (verticesY - 1);\n\n let index = 0;\n\n const a00 = transformationMatrix[0];\n const a01 = transformationMatrix[1];\n const a02 = transformationMatrix[2];\n const a10 = transformationMatrix[3];\n const a11 = transformationMatrix[4];\n const a12 = transformationMatrix[5];\n const a20 = transformationMatrix[6];\n const a21 = transformationMatrix[7];\n const a22 = transformationMatrix[8];\n\n // Apply the transformation to each vertex\n for (let i = 0; i < vertices.length; i += 2)\n {\n const x = (index % verticesX) * sizeX;\n const y = ((index / verticesX) | 0) * sizeY;\n\n const newX = (a00 * x) + (a01 * y) + a02;\n const newY = (a10 * x) + (a11 * y) + a12;\n const w = (a20 * x) + (a21 * y) + a22;\n\n vertices[i] = newX / w;\n vertices[i + 1] = newY / w;\n\n index++;\n }\n\n // Update the mesh geometry to reflect the changes\n buffer.update();\n}\n"],"names":[],"mappings":";AAUO,SAAS,oCACZ,CAAA,KAAA,EACA,MACA,EAAA,QAAA,EACA,oBAEJ,EAAA;AACI,EAAM,MAAA,MAAA,GAAS,QAAS,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAGjC,EAAA,MAAM,WAAW,MAAO,CAAA,IAAA,CAAA;AAExB,EAAM,MAAA,EAAE,SAAW,EAAA,SAAA,EAAc,GAAA,QAAA,CAAA;AAEjC,EAAM,MAAA,KAAA,GAAS,SAAU,SAAY,GAAA,CAAA,CAAA,CAAA;AACrC,EAAM,MAAA,KAAA,GAAS,UAAW,SAAY,GAAA,CAAA,CAAA,CAAA;AAEtC,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEZ,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAClC,EAAM,MAAA,GAAA,GAAM,qBAAqB,CAAC,CAAA,CAAA;AAGlC,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,QAAS,CAAA,MAAA,EAAQ,KAAK,CAC1C,EAAA;AACI,IAAM,MAAA,CAAA,GAAK,QAAQ,SAAa,GAAA,KAAA,CAAA;AAChC,IAAM,MAAA,CAAA,GAAA,CAAM,KAAQ,GAAA,SAAA,GAAa,CAAK,IAAA,KAAA,CAAA;AAEtC,IAAA,MAAM,IAAQ,GAAA,GAAA,GAAM,CAAM,GAAA,GAAA,GAAM,CAAK,GAAA,GAAA,CAAA;AACrC,IAAA,MAAM,IAAQ,GAAA,GAAA,GAAM,CAAM,GAAA,GAAA,GAAM,CAAK,GAAA,GAAA,CAAA;AACrC,IAAA,MAAM,CAAK,GAAA,GAAA,GAAM,CAAM,GAAA,GAAA,GAAM,CAAK,GAAA,GAAA,CAAA;AAElC,IAAS,QAAA,CAAA,CAAC,IAAI,IAAO,GAAA,CAAA,CAAA;AACrB,IAAS,QAAA,CAAA,CAAA,GAAI,CAAC,CAAA,GAAI,IAAO,GAAA,CAAA,CAAA;AAEzB,IAAA,KAAA,EAAA,CAAA;AAAA,GACJ;AAGA,EAAA,MAAA,CAAO,MAAO,EAAA,CAAA;AAClB;;;;"}