Engine
在扮演着总控制器的角色,主要包含了画布、渲染控制和引擎子系统管理等功能:
为了方便用户直接创建 web 端 engine,我们提供了 WebGLEngine,支持 WebGL1.0 和 WebGL2.0。
const engine = await WebGLEngine.create({
canvas: "canvas-id",
colorSpace: {...},
graphicDeviceOptions: {...},
gltf: {...},
ktx2Loader: {...}
});
下方是创建引擎时传入配置的类型说明:
配置 | 解释 |
---|---|
canvas | 可以是画布 ID( string ) 或画布对象(`HTMLCanvasElement |
graphicDeviceOptions | 图形设备相关配置,比如 webGLMode 可以用 控制 WebGL1/2。除 webGLMode 外的属性将透传给上下文,详情可参考 getContext 参数释义。 |
colorSpace | 颜色空间, ColorSpace.Gamma 或 ColorSpace.Linear 。 |
gltf | gltf Loader 配置,workerCount 用来配置 meshOpt 的 worker 数量:{ meshOpt: { workerCount: number } } 。 |
ktx2Loader | KTX2 Loader 配置,workerCount 用来配置 ktx2 解码器的worker 数量:{ priorityFormats: Array<KTX2TargetFormat>; transcoder: KTX2Transcoder; workerCount: number } 。如果 workCount 大于 0,将会创建 worker 线程,等于 0 则只用主线程。 |
属性名称 | 属性释义 |
---|---|
time | 引擎时间相关信息,详情可参考时间 |
vSyncCount | 垂直同步刷新率,引擎默认开启垂直同步且刷新率 vSyncCount 为1 (与屏幕刷新率保持一致)。若 vSyncCount 设置为2 ,则屏幕每刷新 2 帧,引擎更新 1 次。 |
resourceManager | 资源管理器,一般通过它进行资产的加载和释放 |
sceneManager | 场景管理器。Galacean 支持多场景同时渲染,通过场景管理器可以方便地管理当前场景的增删改查,详情可参考场景 |
inputManager | 交互管理器,一般通过它获取键盘,触控与滚轮信息,详情可参考交互 |
默认情况下引擎采用垂直同步模式并使用 vSyncCount 控制渲染刷新率,该模式才渲染帧会等待屏幕的垂直同步信号, vSyncCount 代表了渲染帧之间期望的屏幕同步信号次数,默认值为 1,该属性的值必须为整数,例如我们想在一个屏幕刷新率为 60 帧的设备上期望每秒渲染 30 帧,则可以将该值设置为 2。
另外用户还可以关闭垂直同步,即将 vSyncCount 设置为 0,然后设置 targetFrameRate 为期望的帧数值,该模式下的渲染不考虑垂直同步信号,而是,如 120 表示 120 帧,即每秒期望刷新 120 次。
// 垂直同步
engine.vSyncCount = 1;
engine.vSyncCount = 2;
// 非垂直同步
engine.vSyncCount = 0;
engine.targetFrameRate = 120;
⚠️ 不建议使用非垂直同步