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<string, HTMLCanvasElement>;
    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<void>;
    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;
}
