import { Material, Scene, Camera, Object3D, BufferGeometry, WebGLRenderer, Mesh, WebGLRenderTarget, RenderTargetOptions, Vector3, Matrix4 } from 'three';
import { CoreRenderBlur } from '../../../core/render/Blur';
import { AbstractRenderer } from '../../../engine/viewers/Common';
export interface BaseReflectorOptions {
    renderer?: AbstractRenderer;
    pixelRatio: number;
    multisamples: number;
    clipBias: number;
    active: boolean;
    tblur: boolean;
    blur: number;
    verticalBlurMult: number;
    tblur2: boolean;
    blur2: number;
    verticalBlur2Mult: number;
    scene: Scene;
}
export declare const renderTargetParams: RenderTargetOptions;
export declare abstract class BaseReflector<TGeometry extends BufferGeometry, TMaterial extends Material> extends Mesh<TGeometry, TMaterial> {
    geometry: TGeometry;
    protected _options: BaseReflectorOptions;
    static REFLECTOR_DEFAULT_UP: Vector3;
    type: string;
    private reflectorPlane;
    private normal;
    private reflectorWorldPosition;
    private cameraWorldPosition;
    private rotationMatrix;
    private lookAtPosition;
    private clipPlane;
    private view;
    private target;
    private q;
    protected textureMatrix: Matrix4;
    private virtualCamera;
    protected renderTarget: WebGLRenderTarget | undefined;
    material: TMaterial;
    protected _coreRenderBlur: CoreRenderBlur | undefined;
    onBeforeRender: (renderer: WebGLRenderer, scene: Scene, anyCamera: Camera) => void;
    protected _mirrorCameraMultipliedByMatrixWorld: boolean;
    constructor(geometry: TGeometry, _options: BaseReflectorOptions);
    private _createRenderTarget;
    protected abstract _createMaterial(): TMaterial;
    protected abstract _assignMaterialRenderTarget(): void;
    dispose(): void;
    private _onWindowResizeBound;
    private _addWindowResizeEvent;
    private _removeWindowResizeEvent;
    private _onWindowResize;
    private _getRendererSize;
    static rotateGeometry(geometry: BufferGeometry, direction: Vector3): void;
    static compensateGeometryRotation(object: Object3D, direction: Vector3): void;
    protected _onBeforeRender(renderer: WebGLRenderer, scene: Scene, anyCamera: Camera): void;
}
