跳至主要內容

引擎

yisky大约 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 初始化参数详见 EngineOptionsWebGLOptions 继承自 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:加载完成回调

} );

引擎方法

  • 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每帧渲染循环结束时分发
上次编辑于: