资源
Fantasy 3D 提供了 ResourceManager 作为资源管理类,用于管理资源(纹理、glTF、音频、材质等)的加载和卸载。
注意
引擎(Engine)创建时会自动创建一个ResourceManager 对象,并通过引擎的 resourceManager 属性对外提供。
const { resourceManager } = engine;
// 加载音频资源
resourceManager.loadAudio( './assets/audios/alarm.mp3' ).then( ( buffer ) => {
// TODO:处理音频
} );
资源管理器属性
fileLoader - 文件加载器,只读属性。
textureLoader - 通用格式纹理(png、jpg、jpeg)加载器,只读属性。
rgbeLoader - hdr 格式纹理加载器,只读属性。
exrLoader - exr 格式纹理加载器,只读属性。
tgaLoader - tag 格式纹理加载器,只读属性。
tiffLoader - tif 格式纹理加载器,只读属性。
cubeTextureLoader - 通用格式立方体纹理(png、jpg、jpeg)加载器,只读属性。
hdrCubeTextureLoader - hdr 格式立方体纹理加载器,只读属性。
glTFLoader - glTF 资源加载器,只读属性。
资源管理器方法
- loadFile - 加载文件资源。
const { resourceManager } = engine;
resourceManager.loadFile( './assets/jsons/a.json' ).then( ( data ) => {
// 解析JSON数据
const json = JSON.Parse( data );
// TODO:
} );
- loadGLTF - 加载glTF资源。
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 );
} );
提示
- loadGLTF 会返回 GLTFResource,详见“glTF资源”;
- 加载过的“glTF资源”会缓存在 ResourceManager 中,再次加载时会直接从缓存获取。
- loadTexture - 加载纹理资源。
const { resourceManager } = engine;
// 加载纹理
resourceManager.loadTexture( './assets/textures/diffuse.png' ).then( ( resource ) => {
// 通过引用方式获取 three.js 纹理对象
const { texture } = resource.reference();
// TODO:使用纹理
} );
注意
当前支持的纹理类型包括 PNG、JPG、JPEG、TIF、TGA、HDR、EXR。
- loadCubeTexture - 加载立方纹理。
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:使用纹理
} );
注意
- 立方纹理是一个由6张图片所组成的纹理对象;
- 当前支持立体纹理类型包括 PNG、JPG、JPEG、HDR。
重要
立方纹理加载的6张纹理的格式必须相同,下面是错误的加载示例:
const { resourceManager } = engine;
// 由于待加载的6张纹理格式不同,调用时会抛出异常
engine.loadCubeTexture( [
'px.png', 'nx.jpg',
'py.png', 'ny.png',
'pz.hdr', 'nz.png'
] );
提示
- loadTexture 和 loadCubeTexture 会返回 TextureResource,详见“纹理资源”;
- 加载过的“纹理资源”会缓存在 ResourceManager 中,再次加载时会直接从缓存获取。
- setDRACOLoader - 设置 draco 加载器,用于解析使用 KHR_draco_mesh_compression 扩展压缩过的glTF文件。
const { resourceManager } = engine;
// 设置Draco加载器
resourceManager.setDRACOLoader( 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/' );
- setKTX2Loader - 设置 KTX 2.0 GPU 纹理容器加载器,用于解析使用 KHR_texture_basisu 扩展的glTF文件。
提示
KTX 2.0 是各种 GPU 纹理格式的容器格式。该加载器支持 Basis Universal GPU 纹理,可以快速转码为多种 GPU 纹理压缩格式。
const { resourceManager } = engine;
// 设置KTX2加载器
resourceManager.setKTX2Loader( 'examples/jsm/libs/basis/' );
getGLTFUrl - 获取glTF资源url地址。
getTextureUrl- 获取纹理资源url地址。
disposeTexture - 释放 three.js 纹理(Texture)。
注意
调用该方法时,如果纹理(Texture)存在对应的纹理资源(TextureResource),则调用纹理资源的释放(dispose)接口,否则调用纹理的释放(dispose)接口。
disposeMaterial - 释放 three.js 材质(Material)。
dispose - 释放所有资源。