import { Vector3 } from '@galacean/effects-math/es/core/vector3'; import { Quaternion } from '@galacean/effects-math/es/core/quaternion'; import { Matrix4 } from '@galacean/effects-math/es/core/matrix4'; import { Euler } from '@galacean/effects-math/es/core/euler'; import * as spec from '@galacean/effects-specification'; import { Transform } from './transform'; interface CameraOptionsBase { /** * 相机近平面 */ near: number; /** * 相机远平面 */ far: number; /** * 视锥体垂直视野角度 */ fov: number; /** * 视锥体的长宽比 */ aspect: number; /** * 相机的裁剪模式 */ clipMode: spec.CameraClipMode; } /** * */ export interface CameraOptions extends CameraOptionsBase { /** * 相机的位置 */ position: spec.vec3; /** * 相机的旋转,欧拉角 */ rotation: spec.vec3; /** * 相机的旋转,四元数 */ quat?: spec.vec4; /** * 画布的像素宽度 */ pixelWidth: number; /** * 画布的像素高度 */ pixelHeight: number; } export interface CameraOptionsEx extends CameraOptionsBase { /** * 相机的位置 */ position: Vector3; /** * 相机的旋转,欧拉角 */ rotation: Euler; /** * 相机的旋转,四元数 */ quat?: Quaternion; } /** * 合成的相机对象,采用透视投影 */ export declare class Camera { name: string; /** * 画布的像素宽度 */ pixelWidth: number; /** * 画布的像素高度 */ pixelHeight: number; /** * 编辑器用于缩放画布 */ private viewportMatrix; private options; private viewMatrix; private projectionMatrix; private viewProjectionMatrix; private inverseViewMatrix; private inverseProjectionMatrix; private inverseViewProjectionMatrix; private dirty; /** * * @param name - 相机名称 * @param options */ constructor(name: string, options?: Partial); /** * 设置相机近平面 * @param near */ set near(near: number); get near(): number; /** * 设置相机远平面 * @param far */ set far(far: number); get far(): number; /** * 设置相机视锥体垂直视野角度 * @param fov */ set fov(fov: number); get fov(): number; /** * 设置相机视锥体的长宽比 * @param aspect */ set aspect(aspect: number); get aspect(): number; /** * 相机的裁剪模式 * @param clipMode */ set clipMode(clipMode: spec.CameraClipMode | undefined); get clipMode(): spec.CameraClipMode | undefined; /** * 设置相机的本地位置 * @param value */ set position(value: Vector3); /** * 获取相机的本地位置 */ get position(): Vector3; /** * 获取相机的世界位置 * @since 2.3.0 */ get worldPosition(): Vector3; /** * 设置相机的旋转角度 * @param value */ set rotation(value: Euler); get rotation(): Euler; /** * 设置相机变换 * @since 2.3.0 * @param transform */ setTransform(transform: Transform): void; setViewportMatrix(matrix: Matrix4): void; getViewportMatrix(): Matrix4; /** * 获取相机的视图变换矩阵 * @return */ getViewMatrix(): Matrix4; /** * 获取视图变换的逆矩阵 */ getInverseViewMatrix(): Matrix4; /** * 获取相机的投影矩阵 * @return */ getProjectionMatrix(): Matrix4; /** * 获取相机投影矩阵的逆矩阵 * @return */ getInverseProjectionMatrix(): Matrix4; /** * 获取相机的 VP 矩阵 * @return */ getViewProjectionMatrix(): Matrix4; /** * 获取相机 VP 矩阵的逆矩阵 * @return */ getInverseViewProjectionMatrix(): Matrix4; /** * 根据相机的视图投影矩阵对指定模型矩阵做变换 * @param out - 结果矩阵 * @param model - 模型变换矩阵 */ getModelViewProjection(out: Matrix4, model: Matrix4): Matrix4; /** * 获取归一化坐标和 3D 世界坐标的换算比例,使用 ViewProjection 矩阵 * @param z - 当前的位置 z */ getInverseVPRatio(z: number): Vector3; /** * 设置相机的旋转四元数 * @param value - 旋转四元数 */ setQuat(value: Quaternion): void; /** * 获取相机旋转对应的四元数 * @returns */ getQuat(): Quaternion; /** * 获取相机内部的 options * @returns 相机 options */ getOptions(): CameraOptionsEx; /** * 复制指定相机元素的属性到当前相机 * @param camera */ copy(camera: Camera): void; /** * 更新相机相关的矩阵,获取矩阵前会自动调用 */ updateMatrix(): void; /** * 将世界坐标转换为屏幕像素坐标 * @param position - 世界坐标 * @param out - 输出的屏幕坐标,如果不传则创建新的 Vector3 * @returns 屏幕坐标 (x, y 为像素坐标,左下角为(0,0),右上角为(width,height),z 为深度比例 [0,1],0=近平面,1=远平面) */ worldToScreenPoint(position: Vector3, out?: Vector3): Vector3; /** * 将屏幕像素坐标转换为世界坐标 * @param position - 屏幕坐标 (x, y 为像素坐标,左下角为(0,0),z 为深度比例 [0,1],0=近平面,1=远平面) * @param out - 输出的世界坐标,如果不传则创建新的 Vector3 * @returns 世界坐标 */ screenToWorldPoint(position: Vector3, out?: Vector3): Vector3; } export {};