import type { math } from '@galacean/effects';
import { spec } from '@galacean/effects';
import type { ModelCameraComponentData } from '../index';
import { Vector2, Vector3, Matrix4 } from './math';
import { PEntity } from './object';
import type { ModelCameraComponent } from '../plugin/model-item';
type Box3 = math.Box3;
type Quaternion = math.Quaternion;
/**
 * 相机类，支持基础的相机功能
 */
export declare class PCamera extends PEntity {
    /**
     * 所属的相机组件
     */
    owner?: ModelCameraComponent;
    /**
     * 画布宽度
     */
    width: number;
    /**
     * 画布高度
     */
    height: number;
    /**
     * 近裁剪平面
     */
    nearPlane: number;
    /**
     * 远裁剪平面
     */
    farPlane: number;
    /**
     * Y 轴上视角
     */
    fov: number;
    /**
     * 视图矩阵
     */
    viewportMatrix: math.Matrix4;
    /**
     * 纵横比
     */
    aspect: number;
    /**
     * 剪裁模式，默认是剪裁左右
     */
    clipMode: spec.CameraClipMode;
    /**
     * 投影矩阵
     */
    projectionMatrix: Matrix4;
    /**
     * 相机矩阵
     */
    viewMatrix: Matrix4;
    /**
     * 构造函数，创建相机对象
     * @param camera - 相机数据
     * @param width - 画布宽度
     * @param height - 画布高度
     * @param owner - 所属的相机组件
     */
    constructor(name: string, width: number, height: number, data: ModelCameraComponentData, owner?: ModelCameraComponent);
    /**
     * 更新相机矩阵和投影矩阵，从所属的元素中获取变换数据
     */
    update(): void;
    /**
     * 获取新的透视矩阵，视角大小乘 1.25 倍
     * @param fov - 视角大小
     * @returns 投影矩阵
     */
    getNewProjectionMatrix(fov: number): Matrix4;
    /**
     * 计算视角中的包围盒大小
     * @param box - 包围盒
     * @returns 视角中的包围盒
     */
    computeViewAABB(box: Box3): Box3;
    /**
     * 获取画布大小
     * @returns
     */
    getSize(): Vector2;
    /**
     * 是否剪裁上下
     * @returns
     */
    isReversed(): boolean;
    /**
     * 获取眼睛位置
     * @returns
     */
    getEye(): Vector3;
    /**
     * 设置眼睛位置
     * @param val - 眼睛位置
     */
    setEye(val: Vector3): void;
}
/**
 * 相机管理类，负责管理场景中的 3D 相机对象
 */
export declare class PCameraManager {
    private winWidth;
    private winHeight;
    private cameraList;
    private defaultCamera;
    constructor();
    /**
     * 初始化画布大小，更新默认相机
     * @param width - 画布宽度
     * @param height - 画布高度
     */
    initial(width: number, height: number): void;
    /**
     * 插入相机数据，创建新的相机对象
     * @param name - 相机名称
     * @param data - 相机相关数据
     * @param owner - 相机所属组件
     * @returns 新的相机对象
     */
    insert(name: string, data: ModelCameraComponentData, owner?: ModelCameraComponent): PCamera;
    /**
     * 插入相机对象
     * @param camera - 相机对象
     */
    insertCamera(camera: PCamera): void;
    /**
     * 根据对象或者索引，删除相机对象
     * @param camera - 索引或相机对象
     */
    remove(camera: PCamera | number): void;
    /**
     * 销毁相机管理对象
     */
    dispose(): void;
    /**
     * 更新默认相机状态，并计算新的透视和相机矩阵
     * @param fov - 视角
     * @param viewportMatrix - 视图矩阵
     * @param aspect - 纵横比
     * @param nearPlane - 近裁剪平面
     * @param farPlane - 远裁剪平面
     * @param position - 位置
     * @param rotation - 旋转
     * @param clipMode - 剪裁模式
     */
    updateDefaultCamera(fov: number, viewportMatrix: Matrix4, aspect: number, nearPlane: number, farPlane: number, position: Vector3, rotation: Quaternion, clipMode: number): void;
    /**
     * 获取相机对象列表
     * @returns
     */
    getCameraList(): PCamera[];
    /**
     * 获取默认相机对象
     * @returns
     */
    getDefaultCamera(): PCamera;
    /**
     * 获取相机数目
     * @returns
     */
    getCameraCount(): number;
    /**
     * 获取激活的相机对象
     * @returns
     */
    getActiveCamera(): PCamera;
    /**
     * 获取画布纵横比
     * @returns
     */
    getAspect(): number;
}
export {};
