import * as THREE from 'three';
import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';
import Emittery from 'emittery';
import type { ModelDescription, Light, TCamera, XYZ, LoaderResponse, PlayActionOptions, ModelInfo, Object3DBase } from '@/types/index';
import type { ThreeJSON } from '@/types/model';
import Human from '../human';
declare class ThreeJSApp extends Emittery {
    private animationFrameId;
    private container;
    private scene;
    private camera;
    private renderer;
    private controls;
    private width;
    private height;
    private readonly depth;
    private config;
    private isNotRender;
    private clock;
    private body;
    private characterGroup;
    private lightGroup;
    private state;
    private onWindowResizeBound;
    private rotationCenter;
    private _container;
    private gui;
    private humanObj;
    private sceneManager;
    private interactionManager;
    private backgroundManager;
    private animationManager;
    private blendShapeManager;
    private modelRuntime;
    private resourceCleaner;
    constructor(container: (string | HTMLElement) | undefined, config: ModelDescription, humanObj: Human);
    private syncSceneRuntime;
    init(): void;
    private createDefaultCamera;
    private createRenderer;
    setContainer(): void;
    updateLight(): void;
    initLights(lights?: Light[] | ThreeJSON<Light>[]): void;
    loadCamera(json?: any): THREE.PerspectiveCamera | undefined;
    loadScene(json: Object3DBase | THREE.Object3D | undefined): {
        scene?: THREE.Scene;
        camera?: THREE.PerspectiveCamera;
    };
    degree2Euler(xyz: XYZ): XYZ;
    private dataToMatrix4;
    setLight(light: Light): void;
    setAngleView({ camera }: {
        camera: TCamera & {
            duration?: number;
        };
    }): void;
    gsapContainer(opts: {
        attr?: {
            [key: string]: any;
        };
    }): Promise<unknown>;
    initOrbitControls(): void;
    setBackground(bg?: string): void;
    loadGLBModel(glbURL: string): void;
    loadLowResTexture(url: string): Promise<unknown>;
    changeBundle(record: LoaderResponse): void;
    loadBundles(list: LoaderResponse[], onProgress: (progress: number) => void): Promise<boolean>;
    onWindowResize: import("lodash").DebouncedFuncLeading<() => void>;
    setCamera(camera: THREE.PerspectiveCamera, options: TCamera): void;
    animate(): void;
    startRender(): void;
    stopRender(): void;
    gsapMorph(target: number[], source: number[], t2: any): void;
    playAction: (code: string | string[], opts?: PlayActionOptions) => void;
    stopAllActionExcludeIdle(): void;
    stopAllAction(): void;
    cleanMaterial(material: THREE.Material | THREE.Material[]): void;
    destroy(): void;
    private clearReferences;
    playByShapes(shapes?: number[], idx?: number): Promise<void>;
    stopServerShapes(): void;
    addModel(code: string, modelUrl: string): void;
    destoryModel(code: string): void;
    muteAction(isMute?: boolean): void;
    getModelInfo(): ModelInfo;
    loadGlb(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GLTF>;
    addGlb(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GLTF>;
    setCharacterCenter(): void;
    setVideoBackground(videoURL: string): void;
    loadCubeBackground(imageURLs: string[]): void;
    updateBackgroundSize(bgTexture: THREE.Texture, bgMesh: THREE.Mesh): void;
    setBackgroundColorOrGradient(colorOrGradient: string): void;
}
export default ThreeJSApp;
//# sourceMappingURL=render.d.ts.map