import { Engine, Matrix, Texture2D, TextureFormat } from "oasis-engine"; import { PaladinAdapter } from "../adapter/PaladinAdapter"; import { ARAndroid } from "./Android/ARAndroid"; import { ARConfig } from "./AREnum"; import { IARCtrl } from "./IARCtrl"; import { ARIos } from "./IOS/ARIos"; export class ARManager { private static _ins: ARManager; private _initialized: boolean = false; private _arCtrl: IARCtrl; public static get ins() { if (!this._ins) { this._ins = new ARManager(); } return this._ins; } /** * 获取相机的世界矩阵 */ get worldMatrix(): Matrix { return this._arCtrl._worldMatrix; } /** * 获取相机的投影矩阵 */ get projectMatrix(): Matrix { return this._arCtrl._projectMatrix; } /** * 获取纹理的校准矩阵 */ get textureProject(): Matrix { return this._arCtrl._textureProject; } /** * 获取相机视频流的 Y 纹理 */ get textureY(): Texture2D { return this._arCtrl._textureY; } /** * 获取相机视频流的 UV 纹理 */ get textureUV(): Texture2D { return this._arCtrl._textureUV; } /** * 创建 * @param config - AR 配置 * @param success - 成功回调 * @param fail - 失败回调 */ public create(engine: Engine, config: ARConfig, success: Function, fail?: Function) { if (this._initialized) { return; } if (PaladinAdapter.isIOS) { this._arCtrl = new ARIos(engine); } else { this._arCtrl = new ARAndroid(engine); } // 添加 onShow 与 onHide 的逻辑 PaladinAdapter.addOnShowListener("AR", this._arCtrl.onShow); PaladinAdapter.addOnHideListener("AR", this._arCtrl.onHide); this._initialized = true; this._arCtrl.create(config, success, fail); } /** * 开始 * @param startCallBack - start 可以是一个异步的过程 */ public start(startCallBack: Function) { if (this._initialized) { this._arCtrl.start(startCallBack); } else { console.log("请先初始化 ARManager ."); } } /** * 帧处理 */ public update() { this._initialized && this._arCtrl.update(); } /** * 销毁 */ public destroy() { if (this._initialized) { this._arCtrl.destroy(); this._arCtrl = null; this._initialized = false; } } }