import { CustomShader } from '@realsee/five'; import * as THREE from 'three'; export interface PolygonClipper { polygon: number[][]; polygonTransform: THREE.Matrix4; polygonHeight: number; cutOutSide: boolean; floorIndex?: number; } export interface AlignmentResult { /** 变换矩阵,使得法线与Y轴重合,底面与XZ平面重合 */ transformMatrix: THREE.Matrix4; /** 变换后的二维坐标数组 [x, z] */ points2D: number[][]; } /** * 计算将共面点集对齐到XZ平面的变换矩阵,并返回变换后的二维坐标 * @returns 包含变换矩阵和二维坐标的结果对象 */ export declare function computeAlignmentMatrix(points: THREE.Vector3[]): AlignmentResult; /** * @class PolygonCuterShader * @description 用于多边形切割的shader,请注意,在定义的polygon的底面时,一定是定义在xz平面上,如果在y方向时有位移,请体现在polygonCuterTransform上 */ export declare class PolygonGenerater { canvas: HTMLCanvasElement; polygonTexture: THREE.CanvasTexture; polygonCount: number; canvasCache: Map; constructor(); setSize(size: number): void; generatePolygonCanvas(polygon: number[][]): HTMLCanvasElement; static generatePolygonGeometry(polygon: number[][], height: number): THREE.BufferGeometry; generatePolygonTexture(canvases: HTMLCanvasElement[]): THREE.CanvasTexture; } export declare class PolygonCuterShader extends CustomShader { private _polygonClippers; private polygonGenerater; private _radio; private workerPool; constructor(radio?: 256 | 512 | 1024 | 2048); /** * 异步设置 polygonClippers,使用 web worker 处理纹理生成 */ setPolygonClippersAsync(value: PolygonClipper[]): Promise; get polygonClippers(): PolygonClipper[]; set polygonClippers(value: PolygonClipper[]); get radio(): 256 | 512 | 1024 | 2048; set radio(value: 256 | 512 | 1024 | 2048); dispose(): void; onBeforeCompile(shader: THREE.Shader, renderer: THREE.WebGLRenderer): void; }