import { Euler, Matrix4, Quaternion, Vector2, Vector3 } from '@galacean/effects-math/es/core/index'; import type * as spec from '@galacean/effects-specification'; import type { Disposable } from './utils'; import type { Engine } from './engine'; export interface TransformProps { position?: spec.vec3 | Vector3; rotation?: spec.vec3 | Euler; quat?: spec.vec4 | Quaternion; scale?: spec.vec3 | Vector3; size?: Vector2; name?: string; anchor?: spec.vec2 | Vector2; valid?: boolean; } /** * 变换组件,用于描述元素的位置、旋转、缩放等信息 */ export declare class Transform implements Disposable { /** * 转换右手坐标系左手螺旋对应的四元数到对应的旋转角 * @param quat - 四元数 * @param out - 欧拉角 * @returns */ static getRotation(quat: Quaternion, out: Euler): Euler; engine: Engine; name: string; taggedProperties: spec.TransformData; /** * 自身位移 */ readonly position: Vector3; /** * 自身旋转对应的四元数,右手坐标系,旋转正方向左手螺旋(轴向的顺时针),旋转欧拉角的顺序为 ZYX */ readonly quat: Quaternion; /** * 自身旋转角度 */ readonly rotation: Euler; /** * 自身缩放 */ readonly scale: Vector3; /** * 自身锚点 */ readonly anchor: Vector3; /** * 元素矩形宽高 */ readonly size: Vector2; /** * 子变换,可以有多个 */ private children; /** * 父变换,只能有一个 */ private parent; /** * 所有父变换对应的联合矩阵 */ private parentMatrix; /** * 包含父变换的最终模型矩阵 */ private worldMatrix; /** * 仅包含自身变换的模型矩阵 */ private localMatrix; /** * 变换是否需要生效,不生效返回的模型矩阵为单位矩阵,需要随元素生命周期改变 */ private valid; /** * 数据变化标志位 */ private dirtyFlags; /** * 最终模型矩阵对应变换的缓存,当自身矩阵或父矩阵有修改时需要更新 */ private readonly worldTRSCache; /** * * @param props * @param parent */ constructor(props?: TransformProps, parent?: Transform); set parentTransform(transform: Transform | null); get parentTransform(): Transform | null; set parentMatrixDirty(val: boolean); get parentMatrixDirty(): boolean; /** * 设置位置 * @param x * @param y * @param z */ setPosition(x: number, y: number, z: number): void; /** * 在当前位置的基础上添加位置偏移 * @param x * @param y * @param z */ translate(x: number, y: number, z: number): void; /** * 设置旋转 * @param x * @param y * @param z */ setRotation(x: number, y: number, z: number): void; /** * 设置四元数 * @param x * @param y * @param z * @param w * @private */ setQuaternion(x: number, y: number, z: number, w: number): void; /** * 设置缩放 * @param x * @param y * @param z */ setScale(x: number, y: number, z: number): void; setSize(x: number, y: number): void; /** * 在当前旋转的基础上使用四元素添加旋转 * @param quat */ rotateByQuat(quat: Quaternion): void; /** * 在当前缩放基础上设置缩放系数 * @param x * @param y * @param z */ scaleBy(x: number, y: number, z: number): void; /** * 设置锚点 * @param x * @param y */ setAnchor(x: number, y: number): void; /** * 批量设置 transform 属性 * @param props - 要设置的属性 * @param reverseEuler - 设置 rotation时,欧拉角是否需要取负值 */ setTransform(props: TransformProps, reverseEuler?: boolean): void; /** * 添加子变换 * @param child - 要添加的子变换 */ addChild(child: Transform): void; /** * 移除子变换 */ removeChild(child: Transform): void; /** * 获取当前的旋转量 * @returns */ getRotation(): Euler; /** * 获取当前的四元数 * @returns */ getQuaternion(): Quaternion; /** * 更新元素自身变换矩阵 */ updateLocalMatrix(): void; /** * 获取自身变换对应的模型矩阵 * 数据修改且需要生效时更新自身矩阵 * 当变换不需要生效时返回单位矩阵 * @returns */ getMatrix(): Matrix4; /** * 获取父矩阵,如果有多级父节点,返回整体变换 * @returns */ getParentMatrix(): Matrix4 | undefined; /** * 获取包含自身变换和父变换的模型变换矩阵 * @returns */ getWorldMatrix(): Matrix4; /** * 获取联合变换后的最终缩放因子 * @returns */ getWorldScale(): Vector3; /** * 获取联合变换后的最终位置 * @returns */ getWorldPosition(): Vector3; /** * 设置世界坐标位置 * @param x - 世界坐标 x * @param y - 世界坐标 y * @param z - 世界坐标 z */ setWorldPosition(x: number, y: number, z: number): void; /** * 获取联合变换后的最终旋转量 * @returns */ getWorldRotation(): Euler; /** * 根据世界变换矩阵计算位移、旋转、缩放向量 * @param position * @param quat * @param scale */ assignWorldTRS(position?: Vector3, quat?: Quaternion, scale?: Vector3): void; /** * 拆解并复制指定矩阵到自身变换 * @param m4 * @param scale * @returns */ cloneFromMatrix(m4: Matrix4, scale?: Vector3): void; /** * 设置 Transform 生效 / 失效, 默认元素生命周期开始后生效,结束后失效 */ setValid(val: boolean): void; /** * 获取 Transform 是否生效 */ getValid(): boolean; toData(): spec.TransformData; fromData(data: spec.TransformData): void; dispose(): void; private updateTRSCache; private dispatchValueChange; }