import { Degree, Pixel, Scene3DParams, Vector2D, Vector3D } from '../../utils/3d/types';
/**
 * Класс описывающий 3D сцену - канву на которой будет рисоваться проекция
 */
export declare class Scene3D {
    private container;
    private sourceVideoElement;
    private canvas;
    private gl;
    private params;
    private frameWidth;
    private frameHeight;
    private viewportWidth;
    private viewportHeight;
    private videoInitialized;
    private program;
    private videoTexture;
    private vertexBuffer;
    private textureMappingBuffer;
    private camera;
    private cameraRotationManager;
    private videoElementDataLoadedFn;
    private renderFn;
    private active;
    constructor(container: HTMLElement, sourceVideoElement: HTMLVideoElement, params: Scene3DParams);
    /**
     * Запускает отрисовку сцены
     */
    play(): void;
    /**
     * Останавливает отрисовку сцены
     */
    stop(): void;
    /**
     * Запускает режим постоянного вращение камеры согласно переданным коэффициентам угловых скоростей
     * Базовая величина скорости задается в конфиге
     * Итоговая скорость будет равна произведению базовой скорости и переданного коэффициента
     * Принимает как положительные так и отрицательные значения (для противоположного вращения)
     */
    startCameraManualRotation(mx: number, my: number): void;
    /**
     * Останавливает режим постоянного вращение камеры
     */
    stopCameraManualRotation(immediate?: boolean): void;
    /**
     * Перемещает точку фокуса камеры на заданный угол
     */
    turnCamera(dx: Degree, dy: Degree): void;
    /**
     * Перемещает точку фокуса камеры на заданный угол
     */
    pointCameraTo(dx: Degree, dy: Degree): void;
    /**
     * Преобразовывает экранные координаты в градусы в соответствии с текущим полем обзора
     */
    pixelToDegree(vector: Vector2D<Pixel>): Vector2D<Degree>;
    /**
     * Возвращает текущую ориентацию камеры
     */
    getCameraRotation(): Vector3D;
    /**
     * Захват камеры - переход в ручное управление
     */
    holdCamera(): void;
    /**
     * Возвращает управление внутренним алгоритмам
     */
    releaseCamera(): void;
    /**
     * Уничтожает сцену
     */
    destroy(): void;
    /**
     * Устанавливает размер "экрана"
     */
    setViewportSize(vpx: number, vpy: number): void;
    /**
     * Обработчик события загрузки данных на видеоэлементе
     */
    private onDataLoadedHandler;
    /**
     * Запускает режим отрисовки
     */
    private doPlay;
    /**
     * Основная функция отрисовки
     *
     * @param ts - ms from page load
     */
    private render;
    /**
     * Создает шейдер
     */
    private createShader;
    /**
     * Создает webGL програму
     */
    private createProgram;
    /**
     * Создает текстуру
     */
    private createTexture;
    /**
     * Обновляет текстуру
     * Считывает текущий кадр из видео
     */
    private updateTexture;
    /**
     * Создает буфер вершин плоскости с учетом поправки на отношение сторон
     */
    private createVertexBuffer;
    /**
     * Создает буффер маппинга текстуры
     */
    private createTextureMappingBuffer;
    /**
     * Рассчитывает положение текстуры на плоскости
     */
    private calculateTexturePosition;
    /**
     * Обновляет значения в буффере маппинга текстуры
     */
    private updateTextureMappingBuffer;
    /**
     * Обновляет кэш различных размеров
     */
    private updateFrameSize;
    /**
     * Создает канву для сцены
     */
    createCanvas(): HTMLCanvasElement;
}
