跳至主要內容

资源

yisky大约 3 分钟基础知识文档资源

Fantasy 3D 提供了 ResourceManager 作为资源管理类,用于管理资源(纹理、glTF、音频、材质等)的加载和卸载。

注意

引擎(Engine)创建时会自动创建一个ResourceManager 对象,并通过引擎的 resourceManager 属性对外提供。

const { resourceManager } = engine;

// 加载音频资源
resourceManager.loadAudio( './assets/audios/alarm.mp3' ).then( ( buffer ) => {

  // TODO:处理音频 

} );

资源管理器属性

  • fileLoader - 文件加载器,只读属性。

  • textureLoader - 通用格式纹理(pngjpgjpeg)加载器,只读属性。

  • rgbeLoader - hdr 格式纹理加载器,只读属性。

  • exrLoader - exr 格式纹理加载器,只读属性。

  • tgaLoader - tag 格式纹理加载器,只读属性。

  • tiffLoader - tif 格式纹理加载器,只读属性。

  • cubeTextureLoader - 通用格式立方体纹理(pngjpgjpeg)加载器,只读属性。

  • hdrCubeTextureLoader - hdr 格式立方体纹理加载器,只读属性。

  • glTFLoader - glTF 资源加载器,只读属性。

资源管理器方法

const { resourceManager } = engine;

resourceManager.loadFile( './assets/jsons/a.json' ).then( ( data ) => {

  // 解析JSON数据
  const json = JSON.Parse( data );

  // TODO:

} );
import { GLTFParser } from '@fantasy3d/core';

const { resourceManager } = engine;
const { rootEntity } = scene;

// 加载glTF资源
resourceManager.loadGLTF( './assets/models/diamond.glb' ).then( ( resource ) => {

  // 解析glb
  const entity = GLTFParser.parse( resource );

  // 添加到场景根实体
  rootEntity.addChild( entity );

} );

提示

  1. loadGLTF 会返回 GLTFResource,详见“glTF资源”
  2. 加载过的“glTF资源”会缓存在 ResourceManager 中,再次加载时会直接从缓存获取。
const { resourceManager } = engine;

// 加载纹理
resourceManager.loadTexture( './assets/textures/diffuse.png' ).then( ( resource ) => {

  // 通过引用方式获取 three.js 纹理对象
  const { texture } = resource.reference();

  // TODO:使用纹理

} );

注意

当前支持的纹理类型包括 PNGJPGJPEGTIFTGAHDREXR

const { resourceManager } = engine;

// 加载立方纹理
engine.loadCubeTexture( [

  'px.png', 'nx.png',
  'py.png', 'ny.png',
  'pz.png', 'nz.png'  

] ).then( ( resource ) => {

  // 通过引用方式获取 three.js 纹理对象
  const { texture } = resource.reference();

  // TODO:使用纹理

} );

注意

  1. 立方纹理是一个由6张图片所组成的纹理对象;
  2. 当前支持立体纹理类型包括 PNGJPGJPEGHDR

重要

立方纹理加载的6张纹理的格式必须相同,下面是错误的加载示例:

const { resourceManager } = engine;

// 由于待加载的6张纹理格式不同,调用时会抛出异常
engine.loadCubeTexture( [

  'px.png', 'nx.jpg',
  'py.png', 'ny.png',
  'pz.hdr', 'nz.png'  

] );

提示

  1. loadTexture 和 loadCubeTexture 会返回 TextureResource,详见“纹理资源”
  2. 加载过的“纹理资源”会缓存在 ResourceManager 中,再次加载时会直接从缓存获取。
const { resourceManager } = engine;

// 设置Draco加载器
resourceManager.setDRACOLoader( 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/' );

提示

KTX 2.0 是各种 GPU 纹理格式的容器格式。该加载器支持 Basis Universal GPU 纹理,可以快速转码为多种 GPU 纹理压缩格式。

const { resourceManager } = engine;

// 设置KTX2加载器
resourceManager.setKTX2Loader( 'examples/jsm/libs/basis/' );

注意

调用该方法时,如果纹理(Texture)存在对应的纹理资源TextureResource),则调用纹理资源的释放(dispose)接口,否则调用纹理的释放(dispose)接口。

上次编辑于: