引擎
大约 2 分钟基础知识文档引擎
Engine 作为 Fantasy 3D 的大脑,主要负责管理场景渲染。
初始化引擎
import { Engine } from '@fantasy3d/core';
// 创建引擎
const engine = new Engine( {
// WebGL Options
gl: {
// 渲染视口
viewport: document.getElementById( 'viewport' ),
clearColor: 'rgb( 36, 44, 49 )'
}
} );
提示
Engine 初始化参数详见 EngineOptions,WebGLOptions 继承自 three.js 的 WebGLRendererParameters。
引擎属性
- resourceManager - 资源管理器,用于加载文件、纹理、gltf、glb加载,详细说明请参考“资源”,只读属性。
const { resourceManager } = engine;
// 加载文件资源
resourceManager.loadFile( './assets/files/a.josn' ).then( ( data ) => {
// TODO:加载完成回调
} );
// 加载纹理资源
resourceManager.loadTexture( './assets/textures/diffuse.png' ).then( ( resource ) => {
// TODO:加载完成回调
} );
// 加载glb资源
resourceManager.loadGLTF( './assets/models/car.glb' ).then( ( resource ) => {
// TODO:加载完成回调
} );
// 加载音频资源
resourceManager.loadAudio( './assets/audios/alarm.wav' ).then( ( resource ) => {
// TODO:加载完成回调
} );
uniformsLib - 提供Shader通用Uniform,详见 UniformsLib,只读属性。
gl - WebGL渲染器,详见 WebGLRenderer,只读属性。
引擎方法
- dispose - 释放引擎,释放所有渲染对象以及渲染资源。
引擎事件
- on - 订阅事件。
import { EventType } from '@fantasy3d/core';
// 订阅“帧循环开始”事件
engine.on( EventType.Before_Frame_Loop, () => {
// TODO:事件响应
} );
- once - 订阅事件且仅响应一次。
import { EventType } from '@fantasy3d/core';
// 订阅一次“帧循环开始”事件
engine.once( EventType.Before_Frame_Loop, () => {
// TODO:事件响应
} );
- off - 取消事件订阅。
import { EventType } from '@fantasy3d/core';
// “帧循环开始”事件订阅回调
const callback = () => {};
// 订阅“帧循环开始”事件
engine.on( EventType.Before_Frame_Loop, callback, { target: this } );
// 取消订阅“帧循环开始”事件
engine.off( EventType.Before_Frame_Loop, callback );
重要
“取消订阅”时如果不指定第二个参数,会取消该类型事件的所有订阅!
// 取消“帧循环开始”事件的所有订阅
engine.off( EventType.Before_Frame_Loop );
- emit - 分发事件。
import { EventType } from '@fantasy3d/core';
// 分发“帧循环开始”事件
engine.emit( {
type: EventType.Before_Frame_Loop,
timeSinceLastFrame,
totalTime
} );
提示
通过Engine可订阅的内置事件类型及分发时机:
事件类型 | 分发时机 |
---|---|
Before_Frame_Loop | 每帧渲染循环开始时分发 |
Before_Uniforms_Update | 通用Uniforms参数更新之前分发 |
After_Uniforms_Update | 通用Uniforms参数更新之后分发 |
Before_Scene_Render | 场景渲染之前分发,逐场景分发 |
After_Scene_Render | 场景渲染之后分发,逐场景分发 |
After_Frame_Loop | 每帧渲染循环结束时分发 |