import { Box3, Clock, ColorRepresentation, OrthographicCamera, PerspectiveCamera, Scene, ShaderMaterial, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from 'three'; import { ComposeShader } from '../assets/shaders/render/ComposeShader'; import { SceneManager } from '../scene/SceneManager'; import { ExtensionsManager } from '../extensions/ExtensionsManager'; import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'; import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass'; import { GTAOPass } from '../tools/threejs-sandbox/gtaoPass/src/GTAOPass.js'; import { RenderEvents } from './RenderEvents'; import { MetaManager } from '../meta/MetaManager'; import { Picker } from './Picker'; import { CubeControl, ViewpointState, ViewpointTools } from '../index'; import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass'; import { BloomMaskShader } from '../assets/shaders/bloom/BloomMaskShader'; import { GlMonitor } from './monitor'; import { LabelTools } from './labels/LabelTools'; import { KeymapTools } from './KeymapTools'; import { ComponentUI } from '../extensions/extensionMixin'; export declare const maxCameraFar = 100000; export declare const minCameraNear = 0.01; /** * Base class for RenderManagerBase settings state. */ export declare class RenderManagerBaseState { /** Generate colored caps on clipped faces. */ caps: boolean; /** Caps color. */ capsColor: string; /** Generate colored cap outline edges on clipped faces. */ capOutlines: boolean; /** Cap outlines color. */ capOutlinesColor: string; /** Generate colored caps on clipped faces intersecting with another faces. */ intersectionCaps: boolean; /** Cap intersections color. */ intersectionCapsColor: string; /** Camera mode (perspective or orthogonal). */ perspective: boolean; /** Camera field of view. */ fov: number; /** Dynamic LODS for instanced meshes. */ lods: boolean; /** Maximum number of models that will be saved to the browser cache for faster later opening. */ maxModelsCache: number; } /** * Base class for all rendering managers. */ export declare abstract class RenderManagerBase extends EventTarget implements ViewpointState { tag: string; /** State with settings for RenderManagerBase. */ abstract state: RenderManagerBaseState; /** Unique name of the manager. */ readonly name: any; /**Scene for additional 3D graphic. Always draw above main scene without Z sorting. Can be used by extensions. */ helpersScene: Scene; /**Scene for additional 3D graphic. Can be used by extensions. */ subScene: Scene; /** SceneManager instance for renderer. */ sceneManager: SceneManager; /** MetaManager instance. */ metaManager: MetaManager | undefined; protected needUpdate: boolean; protected needContinuesUpdate: boolean; protected needRender: boolean; protected mousePointer2: Vector2; protected selectionHoverIdx: number; /** Abort controller. Use to control external event listeners by render manager. */ ac: AbortController; protected isManualNavigation: boolean; /** ExtensionsManager instance for renderer. */ readonly extMan: ExtensionsManager; glMonitor: GlMonitor; /**Main renderer camera*/ camera: PerspectiveCamera | OrthographicCamera; /** Target point for viewer camera. Need for various transformation actions like orbit. */ cameraTarget: Vector3; /**DOM Element with attached viewer. */ viewerElement: HTMLElement; /** Is navigation in progress. */ isNavigation: boolean; /** Is interactive mode (with simple graphic) in progress. */ isInteractive: boolean; /**Mouse coordinates with center origin and boundary range from -1 to 1. */ mouse: Vector2; /**Mouse coordinates with screen origin and screen boundary. */ mousePointer: Vector2; /**WebGLRenderer instance. */ renderer: WebGLRenderer; /**Default device pixel ratio. */ defaultPixelRatio: number; /**Pixel ratio for interactive render mode (with navigation). */ interactivePixelRatio: number; /**Pixel ratio for static render mode (without navigation). */ staticPixelRatio: number; /**Points on faces and vertices visual picker. */ picker: Picker; /**Tools for generate and restore viewpoint state. */ viewpointTools: ViewpointTools; /**Tools for generate and restore viewpoint state. */ keymapTools: KeymapTools; /** Tools for creating and displaying labels in 3d space. */ labelTools: LabelTools; toolbarUi: ComponentUI; /** * Set the continuous update mode. Used for any animation that requires continuous frame refresh, such as flying. * @param continuesUpdate - continues update mode flag. */ setContinuesUpdate(continuesUpdate: boolean): void; /** * Get the continuous update mode. */ getContinuesUpdate(): boolean; /** * Set background color on renderer area. */ setBackgroundColor(color: ColorRepresentation): void; /** * Get background color on renderer area. */ getBackgroundColor(): ColorRepresentation; protected backgroundColor: ColorRepresentation; /** * Color for inactive elements. */ inactiveColor: ColorRepresentation; /** * Color for selection layer. */ selectionColor: ColorRepresentation; /** * Inactive layer darkness coefficient (more is high darkness). */ inactiveDarkness: number; /** * Inactive layer contrast coefficient (more is high contrast). Must be greater than zero. */ inactiveContrast: number; /** * Inactive layer front opacity coefficient (more is high opacity`). */ inactiveFrontOpacity: number; /** * Opacity for selection layer. */ selectionOpacity: number; /** * If enabled then each touch action on the element adds it to selection set. */ isMultiselectTouch: boolean; /** * If enabled then each click action on the element adds it to selection set. */ isMultiselectClick: boolean; /** Is view devise is touch device. */ isTouchDevice: boolean; /** {@link CubeControl} instance. */ cubeControl: CubeControl; isDisposed: boolean; protected clock: Clock; /** Hovered element number. */ hoveredElNum: number; storeViewpointState(): any; restoreViewpointState(state: any): void; protected stateRenderTarget: WebGLRenderTarget; private stateUniforms; /**Shader for highlighting hovered and selected elements. */ protected stateMat: ShaderMaterial; private pickingRenderTarget; private pickingMaterial; protected skyRenderTarget: WebGLRenderTarget; protected mainRenderTarget1: WebGLRenderTarget; protected mainRenderTarget2: WebGLRenderTarget; protected mainRenderTargetAA1: WebGLRenderTarget; protected mainRenderTargetAA2: WebGLRenderTarget; protected bloomMaskRenderTarget: WebGLRenderTarget; protected mixShader: ComposeShader; protected bloomMaskShader: BloomMaskShader; protected mixComposer: EffectComposer; protected gtaoPass: GTAOPass; protected bloomPass: UnrealBloomPass; protected bloomMaskPass: ShaderPass; protected isSelectionLocked: boolean; protected animBlock: number; protected animNumber: number; private progressBar; private caption; protected smaaPass: ShaderPass; private currentDomElementId; /** * @param name - Name of the renderer. Must be unique. * @param sceneManager - SceneManager for renderer. * @param metaManager - Optional MetaManager. Used for possible additional operations with metadata. */ protected constructor(name: string, sceneManager: SceneManager, metaManager?: MetaManager | undefined); /** * Set selection and hover lock mode. * @param selectionLocked - selection lock flag. */ setSelectionLock(selectionLocked: boolean): void; /** * Init renderer for chosen DOM element id. * @param domElementId - DOM element id for attaching renderer. * @param createToolbar - create toolbar UI or not. */ protected init(domElementId?: string, createToolbar?: boolean): void; private onModelsProgress; private onElementsSelected; private createToolbar; private removeToolbar; private createCanvas; private initMainComposer; private initStateComposer; private initBloomComposer; private initMixComposer; private initPickingTarget; protected onResize(): void; /** * Sets camera field of view. * @param fov - field of view. */ setCameraFov(fov: number): void; /** * Sets camera mode (perspective or orthogonal). * @param perspective - perspective mode enabled or not. * @return Actual camera mode after applying. */ setCameraMode(perspective: boolean): boolean; /** * Hook for changing controller navigation. * Called by current controller extensions "updated" hook. * Also dispatch "navchange" viewer event * @group Hooks */ navigationChanged(): void; /** Set navigation hooks state (if manual navigation is on then call of "updated" navigation hook will be ignored). */ setManualNavigation(manualNavigation: boolean): void; /** * Hook for ending controller navigation. * Called by current controller extension. * Also dispatch "navstart" viewer event * @group Hooks */ navigationEnded(): void; /** * Hook for starting controller navigation. * Called by current controller extension. * Also dispatch "navstart" viewer event. * @group Hooks */ navigationStarted(): void; private initCamera; /** *Zoom camera to scene boundaries if no elements selected or zoom to selected elements boundaries. * @param fitRatio - scale coefficient for zoom. */ zoomCameraToSelection(fitRatio?: number): void; /** *Zoom camera to boundaries by given element numbers. * @param elNums - element numbers. * @param fitRatio - scale coefficient for zoom. */ zoomCameraToElements(elNums: number[], fitRatio?: number): void; /** *Zoom camera to given boundary box. * @param box - boundary box. * @param fitRatio - scale coefficient for zoom. */ zoomCameraToBox(box: Box3, fitRatio?: number): void; /** *Get zoom value for scene bounds with given bounds Coefficient. * @param boundsCoef - scale coefficient for scene bounds. */ getCameraZoomBySceneBounds(boundsCoef?: number): number; /** * Make request for new animation iteration or/and render new frame. * @param forceUpdateRender - is we need to render new frame. */ abstract requestUpdate(forceUpdateRender: boolean): void; /** * Add event listener with automatic dispose. * @param eventType - event type. * @param eventListener - event listener. */ addAutoEventListener(eventType: RenderEvents, eventListener: EventListenerOrEventListenerObject): void; protected destroy(): void; protected processHover(force?: boolean): void; private unpackRGBAToVector3; /** * Updates hover state visual on render canvas. * @param elNum - Element number for setting hover state. */ updateHover(elNum?: number): void; }