Files
zhengte.babylonjs-sdk/src/main.ts
2026-04-30 14:46:01 +08:00

84 lines
2.3 KiB
TypeScript

import { MainApp } from './babylonjs/MainApp';
import { AppConfig } from './babylonjs/AppConfig';
import configurator, { ConfiguratorParams } from './components/conf';
import auth from './components/auth';
import { on, off, once, emit } from './event/bus';
import { EventBridge } from './event/bridge';
import { KernelAdapter } from './kernel/Adapter';
declare global {
interface Window {
faceSDK?: Record<string, unknown>;
yiyu?: Record<string, unknown>;
}
}
type InitParams = {
container?: string | HTMLCanvasElement;
modelUrlList?: string[];
apiConfig?: ConfiguratorParams;
env?: {
hdrPath?: string;
intensity?: number;
rotationY?: number;
background?: boolean;
};
gizmo?: {
position?: boolean;
rotation?: boolean;
scale?: boolean;
};
outline?: {
enable?: boolean;
color?: string;
thickness?: number;
occlusionStrength?: number;
occlusionThreshold?: number;
};
};
let mainApp: MainApp | null = null;
let kernelAdapter: KernelAdapter | null = null;
const kernel = {
// 事件工具,提供给外部订阅/退订
on,
off,
once,
emit,
/** 初始化应用 */
init: async function (params: InitParams): Promise<void> {
if (!params) { console.error('params is required'); return; }
mainApp = new MainApp();
kernelAdapter = new KernelAdapter(mainApp);
// 展开转接器的属性和方法到kernel对象
Object.assign(kernel, kernelAdapter);
const container = (typeof params.container === 'string'
? (document.querySelector(params.container) || document.getElementById(params.container))
: params.container || document.querySelector('#renderDom')) as HTMLCanvasElement | null;
if (!container) { throw new Error('Render canvas not found'); }
mainApp.loadAConfig({
container,
modelUrlList: params.modelUrlList || [],
env: params.env,
gizmo: params.gizmo,
outline: params.outline,
});
await mainApp.Awake();
await mainApp.loadModel();
}
};
if (!window.faceSDK) {
window.faceSDK = {};
}
window.faceSDK.kernel = kernel;
export { kernel };