@pnext/three-loader
Version:
Potree loader for ThreeJS, converted and adapted to Typescript.
210 lines (209 loc) • 7.5 kB
TypeScript
import { BufferGeometry, Camera, Color, Material, RawShaderMaterial, Scene, Texture, Vector3, Vector4, WebGLRenderer } from 'three';
import { PointCloudOctree } from '../point-cloud-octree';
import { PointCloudOctreeNode } from '../point-cloud-octree-node';
import { ClipMode, IClipBox } from './clipping';
import { PointCloudMixingMode, PointColorType, PointOpacityType, PointShape, PointSizeType, TreeType } from './enums';
import { IClassification, IGradient, IUniform } from './types';
export interface IPointCloudMaterialParameters {
size: number;
minSize: number;
maxSize: number;
treeType: TreeType;
colorRgba: boolean;
}
export interface IPointCloudMaterialUniforms {
bbSize: IUniform<[number, number, number]>;
blendDepthSupplement: IUniform<number>;
blendHardness: IUniform<number>;
classificationLUT: IUniform<Texture>;
clipBoxCount: IUniform<number>;
clipBoxes: IUniform<Float32Array>;
clipExtent: IUniform<[number, number, number, number]>;
depthMap: IUniform<Texture | null>;
diffuse: IUniform<[number, number, number]>;
fov: IUniform<number>;
gradient: IUniform<Texture>;
heightMax: IUniform<number>;
heightMin: IUniform<number>;
intensityBrightness: IUniform<number>;
intensityContrast: IUniform<number>;
intensityGamma: IUniform<number>;
intensityRange: IUniform<[number, number]>;
level: IUniform<number>;
maxSize: IUniform<number>;
minSize: IUniform<number>;
octreeSize: IUniform<number>;
opacity: IUniform<number>;
pcIndex: IUniform<number>;
rgbBrightness: IUniform<number>;
rgbContrast: IUniform<number>;
rgbGamma: IUniform<number>;
screenHeight: IUniform<number>;
screenWidth: IUniform<number>;
size: IUniform<number>;
spacing: IUniform<number>;
toModel: IUniform<number[]>;
transition: IUniform<number>;
uColor: IUniform<Color>;
visibleNodes: IUniform<Texture>;
vnStart: IUniform<number>;
wClassification: IUniform<number>;
wElevation: IUniform<number>;
wIntensity: IUniform<number>;
wReturnNumber: IUniform<number>;
wRGB: IUniform<number>;
wSourceID: IUniform<number>;
opacityAttenuation: IUniform<number>;
filterByNormalThreshold: IUniform<number>;
highlightedPointCoordinate: IUniform<Vector3>;
highlightedPointColor: IUniform<Vector4>;
enablePointHighlighting: IUniform<boolean>;
highlightedPointScale: IUniform<number>;
normalFilteringMode: IUniform<number>;
backgroundMap: IUniform<Texture | null>;
pointCloudID: IUniform<number>;
pointCloudMixAngle: IUniform<number>;
stripeDistanceX: IUniform<number>;
stripeDistanceY: IUniform<number>;
stripeDivisorX: IUniform<number>;
stripeDivisorY: IUniform<number>;
pointCloudMixingMode: IUniform<number>;
renderDepth: IUniform<boolean>;
}
export declare class PointCloudMaterial extends RawShaderMaterial {
private static helperVec3;
private static helperVec2;
/**
* Use the drawing buffer size instead of the dom client width and height when passing the screen height and screen width uniforms to the
* shader. This is useful if you have offscreen canvases (which in some browsers return 0 as client width and client height).
*/
useDrawingBufferSize: boolean;
lights: boolean;
fog: boolean;
colorRgba: boolean;
numClipBoxes: number;
clipBoxes: IClipBox[];
visibleNodesTexture: Texture | undefined;
visibleNodeTextureOffsets: Map<string, number>;
private _gradient;
private gradientTexture;
private _classification;
private classificationTexture;
uniforms: IPointCloudMaterialUniforms & Record<string, IUniform<any>>;
bbSize: [number, number, number];
clipExtent: [number, number, number, number];
depthMap: Texture | undefined;
fov: number;
heightMax: number;
heightMin: number;
intensityBrightness: number;
intensityContrast: number;
intensityGamma: number;
intensityRange: [number, number];
maxSize: number;
minSize: number;
octreeSize: number;
opacity: number;
rgbBrightness: number;
rgbContrast: number;
rgbGamma: number;
screenHeight: number;
screenWidth: number;
size: number;
spacing: number;
transition: number;
color: Color;
weightClassification: number;
weightElevation: number;
weightIntensity: number;
weightReturnNumber: number;
weightRGB: number;
weightSourceID: number;
opacityAttenuation: number;
filterByNormalThreshold: number;
highlightedPointCoordinate: Vector3;
highlightedPointColor: Vector4;
enablePointHighlighting: boolean;
highlightedPointScale: number;
normalFilteringMode: number;
backgroundMap: Texture | undefined;
pointCloudID: number;
pointCloudMixingMode: number;
stripeDistanceX: number;
stripeDistanceY: number;
stripeDivisorX: number;
stripeDivisorY: number;
pointCloudMixAngle: number;
renderDepth: boolean;
useClipBox: boolean;
weighted: boolean;
pointColorType: PointColorType;
pointSizeType: PointSizeType;
clipMode: ClipMode;
useEDL: boolean;
shape: PointShape;
treeType: TreeType;
pointOpacityType: PointOpacityType;
useFilterByNormal: boolean;
useTextureBlending: boolean;
usePointCloudMixing: boolean;
highlightPoint: boolean;
attributes: {
position: {
type: string;
value: never[];
};
color: {
type: string;
value: never[];
};
normal: {
type: string;
value: never[];
};
intensity: {
type: string;
value: never[];
};
classification: {
type: string;
value: never[];
};
returnNumber: {
type: string;
value: never[];
};
numberOfReturns: {
type: string;
value: never[];
};
pointSourceID: {
type: string;
value: never[];
};
indices: {
type: string;
value: never[];
};
};
constructor(parameters?: Partial<IPointCloudMaterialParameters>);
dispose(): void;
clearVisibleNodeTextureOffsets(): void;
updateShaderSource(): void;
applyDefines(shaderSrc: string): string;
setPointCloudMixingMode(mode: PointCloudMixingMode): void;
getPointCloudMixingMode(): PointCloudMixingMode;
setClipBoxes(clipBoxes: IClipBox[]): void;
get gradient(): IGradient;
set gradient(value: IGradient);
get classification(): IClassification;
set classification(value: IClassification);
private recomputeClassification;
get elevationRange(): [number, number];
set elevationRange(value: [number, number]);
getUniform<K extends keyof IPointCloudMaterialUniforms>(name: K): IPointCloudMaterialUniforms[K]['value'];
setUniform<K extends keyof IPointCloudMaterialUniforms>(name: K, value: IPointCloudMaterialUniforms[K]['value']): void;
updateMaterial(octree: PointCloudOctree, visibleNodes: PointCloudOctreeNode[], camera: Camera, renderer: WebGLRenderer): void;
private updateVisibilityTextureData;
static makeOnBeforeRender(octree: PointCloudOctree, node: PointCloudOctreeNode, pcIndex?: number): (_renderer: WebGLRenderer, _scene: Scene, _camera: Camera, _geometry: BufferGeometry, material: Material) => void;
}