import { Mesh, Timer, Scene, PerspectiveCamera, WebGLRenderer, PMREMGenerator, Vector3, AnimationMixer, Raycaster, Intersection, AnimationAction, AnimationClip, Texture, Material, OrthographicCamera, Object3D } from 'three'; import { EffectComposer } from 'postprocessing'; import { default as Stats } from 'three/examples/jsm/libs/stats.module.js'; import { Sky } from 'three/examples/jsm/objects/Sky.js'; import { AnimationOperate } from '@three3d/animation'; import { default as Scener } from './Scener'; import { CSS2DRenderer, CSS3DRenderer } from '../Renderer'; import { default as RendererManager } from './RendererManager'; import { default as CameraManager } from './CameraManager'; import { default as EffectManager } from './EffectManager'; import { default as Bvh } from './Bvh'; import { default as Controls } from '../Controls'; import { Model } from '../Library'; import { IColorSpace, SkyOptions, IColor, OffsetPoint, Position, ViewportOptions, ViewportState, ModelAnimationFindFunc, SignalsState, ToneMappingOptions, SSAOOptions, BloomOptions, IntersectsOptions, EnvironmentOptions } from '../Interface'; import { default as EventHandler } from './EventHandler'; import { default as Info } from './Info'; import { ViewHelper } from './ViewHelper'; import { ObjectsCache } from '../Cache'; import { default as AutoInstancingManager, AutoInstancingOptions, AutoInstancingStats } from './AutoInstancingManager'; export declare const innerRenderState: { needsUpdate: boolean; }; declare class Viewport { readonly options: ViewportOptions; readonly signals: SignalsState; readonly cache: ObjectsCache; clock: Timer; raycaster: Raycaster; scene: Scene; sky: Sky | null; state: ViewportState; scener: Scener; rendererManager: RendererManager; container: HTMLElement; interactiveContainer: HTMLElement; renderer: WebGLRenderer; rendererCSS2D: CSS2DRenderer; rendererCSS3D: CSS3DRenderer; autoInstancingManager: AutoInstancingManager; pmremGenerator: PMREMGenerator; info: Info; stats: Stats; cameraManager: CameraManager; camera: PerspectiveCamera | OrthographicCamera; controls: Controls; effectManager: EffectManager; effectComposer: EffectComposer; bvh: Bvh; mixer: AnimationMixer; clipsSet: Set; viewHelper: ViewHelper; eventHandler: EventHandler; /** * render 前回调(每帧执行) */ postUpdate: Map void>; /** * render 后回调 */ postRender: Map void>; private _loop; private outlineSelection; private pendingRenderResolvers; resizeObserver: ResizeObserver; constructor(options: ViewportOptions, signals: SignalsState, cache: ObjectsCache); _initInfo(): void; _initStats(): void; setAutoInstancing(enabled: boolean, root?: Object3D, options?: AutoInstancingOptions): void; getAutoInstancingStats(root?: Object3D): AutoInstancingStats | AutoInstancingStats[] | null; /** ***************************** post-processing *************************** */ setBloom(options?: BloomOptions): void; setSSAO(options?: SSAOOptions): void; /** ***************************** renderer *************************** */ setColorSpace(colorSpace: IColorSpace): void; setToneMapping(options?: ToneMappingOptions): void; /** ***************************** background *************************** */ setSphereSkyBackground(imgUrl: string): Promise; setSkyBackground(dirPath: string, fileNames?: string[]): Promise; setBackgroundColor(color: IColor): void; setBackgroundColorAlpha(color: IColor, alpha?: number): void; setBackgroundImage(imgUrl: string): Promise; setSky(options?: SkyOptions): Sky | undefined; closeSky(): boolean; screenshot(): Promise; /** ***************************** environment *************************** */ setEnvironment(options?: EnvironmentOptions): Promise>; /** ***************************** modelAnimation *************************** */ playModelAnimation(model: Model, animation: number | AnimationClip | ModelAnimationFindFunc): AnimationOperate | undefined; stopModelAnimation(model: Model, animation: number | AnimationClip | ModelAnimationFindFunc): void; /** ***************************** render *************************** */ render(fn?: () => unknown): Promise; /** * 触发渲染(兼容 soongis) * @param count */ triggerRender(count?: number): void; private _triggerRender; /** * 暂停渲染 * @param pause */ setPauseRender(pause?: boolean): Promise; /** * effect passes */ _passesObserver(): void; private _syncAutoInstancingOutlineSelection; /** * 每帧都会被执行 * @param time * @returns */ autoRender(): void; animate(time: number): void; getOffsetByPosition(position: Position): { left: number; top: number; }; getPositionByOffset(offset: OffsetPoint, z?: number, scalar?: number): Vector3; getIntersects(event: MouseEvent | TouchEvent | OffsetPoint, objects?: Object3D[], options?: IntersectsOptions): Intersection>[]; rayClash(startPoint?: Vector3, dir?: Vector3, objects?: Mesh, Material | Material[], import('three').Object3DEventMap>[]): Intersection>[]; clearSignals(): void; /** * 隔离显示对象 - 使用 Layers API 仅显示指定对象,隐藏场景中其他对象 * @param objects 需要隔离显示的对象 * @param layerChannel 使用的 layer 通道,默认 1(0 为默认通道) */ isolate(objects: Object3D | Object3D[], layerChannel?: number): void; /** * 取消隔离 - 恢复场景中所有对象的可见性 * @param layerChannel 之前隔离使用的 layer 通道,默认 1 */ unisolate(layerChannel?: number): void; dispose(): void; _signalsEventListenr(): void; } export default Viewport;