@realsee/five
Version:
Realsee Renderer SDK
53 lines (52 loc) • 2.11 kB
TypeScript
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;
}