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 {};