import { ColorRepresentation, PerspectiveCamera, RectAreaLight, SpotLight } from 'three';
export interface PerspectiveCameraOptions {
    fov: number;
    aspect: number;
    near: number;
    far: number;
}
type PerspectiveCameraConstructor = (options: PerspectiveCameraOptions) => PerspectiveCamera;
export interface PerspectiveCameraUpdateOptions<C extends PerspectiveCamera> {
    camera: C;
    params: {
        apertureBlades: number;
        fStop: number;
        focusDistance: number;
        apertureRotation: number;
        anamorphicRatio: number;
    };
}
export type PerspectiveCameraUpdate<C extends PerspectiveCamera> = (options: PerspectiveCameraUpdateOptions<C>) => void;
export interface AreaLightOptions {
    color: ColorRepresentation;
    intensity: number;
    width: number;
    height: number;
}
type AreaLightConstructor = (options: AreaLightOptions) => RectAreaLight;
type SpotLightConstructor = () => SpotLight;
export interface SpotLightUpdateOptions<L extends SpotLight> {
    spotLight: L;
    textureName: string;
}
export type SpotLightUpdate<L extends SpotLight> = (options: SpotLightUpdateOptions<L>) => void;
export declare enum GeneratorName {
    PERSPECTIVE_CAMERA = "perspectiveCamera",
    PERSPECTIVE_CAMERA_UPDATE = "perspectiveCameraUpdate",
    AREA_LIGHT = "areaLight",
    SPOT_LIGHT = "spotLight",
    SPOT_LIGHT_UPDATE = "spotLightUpdate"
}
type GeneratorMap = {
    [GeneratorName.PERSPECTIVE_CAMERA]: PerspectiveCameraConstructor;
    [GeneratorName.PERSPECTIVE_CAMERA_UPDATE]: PerspectiveCameraUpdate<PerspectiveCamera>;
    [GeneratorName.AREA_LIGHT]: AreaLightConstructor;
    [GeneratorName.SPOT_LIGHT]: SpotLightConstructor;
    [GeneratorName.SPOT_LIGHT_UPDATE]: SpotLightUpdate<SpotLight>;
};
declare class CoreSceneObjectsFactoryClass {
    private constructor();
    private static _instance;
    static instance(): CoreSceneObjectsFactoryClass;
    private _generators;
    generator<G extends GeneratorName>(generatorName: G): GeneratorMap[G];
    registerGenerator<G extends GeneratorName>(generatorName: G, generator: GeneratorMap[G]): void;
}
export declare const CoreSceneObjectsFactory: CoreSceneObjectsFactoryClass;
export {};
