使用 BABYLON.SceneLoader.AppendAsync 和 gltf 文件设置回退目录
Set fallback directory with BABYLON.SceneLoader.AppendAsync and gltf file
我正在尝试修改现有项目,我想在加载 GLTF 文件时设置后备纹理
BABYLON.GLTFFileLoader.IncrementalLoading = false;
BABYLON.SceneLoader.AppendAsync(rootPath, 'data:' + gltfContent, scene, undefined, '.gltf').then(function () {
scene.createDefaultCameraOrLight(true);
scene.activeCamera.attachControl(canvas);
scene.activeCamera.wheelDeltaPercentage = 0.005;
我不知道具体怎么做。
更好的方法是什么?我应该阅读 GLTF 并修改 URI 吗?
我认为使用一些回调是更好的解决方案
有人是 babylon.js 的专家吗?
谢谢
Babylon 的 GLTF 2.0 加载器有一个扩展系统,可以将其视为加载过程每个步骤的基于承诺的插件。
您可以在此处查看扩展的一些示例:
https://github.com/BabylonJS/Babylon.js/tree/master/loaders/src/glTF/2.0/Extensions
您的情况可能非常有趣的是:
如您所见,此扩展包含一个名为 loadTextureInfoAsync
的函数,该函数 returns 在收到即将加载的纹理信息后完成时的承诺。
根据您的用例,您可以完全替换加载纹理功能或扩展它(如上例所示)。要覆盖它,您应该自己实现该功能:
public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {
const texture = loadTheTextureYourselfWithFallback();
return Promise.resolve(texture);
}
当然,加载功能需要按照你的逻辑来实现
我正在尝试修改现有项目,我想在加载 GLTF 文件时设置后备纹理
BABYLON.GLTFFileLoader.IncrementalLoading = false;
BABYLON.SceneLoader.AppendAsync(rootPath, 'data:' + gltfContent, scene, undefined, '.gltf').then(function () {
scene.createDefaultCameraOrLight(true);
scene.activeCamera.attachControl(canvas);
scene.activeCamera.wheelDeltaPercentage = 0.005;
我不知道具体怎么做。 更好的方法是什么?我应该阅读 GLTF 并修改 URI 吗? 我认为使用一些回调是更好的解决方案 有人是 babylon.js 的专家吗? 谢谢
Babylon 的 GLTF 2.0 加载器有一个扩展系统,可以将其视为加载过程每个步骤的基于承诺的插件。 您可以在此处查看扩展的一些示例:
https://github.com/BabylonJS/Babylon.js/tree/master/loaders/src/glTF/2.0/Extensions
您的情况可能非常有趣的是:
如您所见,此扩展包含一个名为 loadTextureInfoAsync
的函数,该函数 returns 在收到即将加载的纹理信息后完成时的承诺。
根据您的用例,您可以完全替换加载纹理功能或扩展它(如上例所示)。要覆盖它,您应该自己实现该功能:
public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {
const texture = loadTheTextureYourselfWithFallback();
return Promise.resolve(texture);
}
当然,加载功能需要按照你的逻辑来实现