【问题标题】:Set fallback directory with BABYLON.SceneLoader.AppendAsync and gltf file使用 BABYLON.SceneLoader.AppendAsync 和 gltf 文件设置后备目录
【发布时间】:2020-01-22 16:56:42
【问题描述】:

我正在尝试修改现有项目,我想在加载 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 的专家吗? 谢谢

【问题讨论】:

    标签: babylonjs gltf


    【解决方案1】:

    Babylon 的 GLTF 2.0 加载器有一个扩展系统,可以看作是加载过程中每个步骤的基于 Promise 的插件。 您可以在此处查看一些扩展示例:

    https://github.com/BabylonJS/Babylon.js/tree/master/loaders/src/glTF/2.0/Extensions

    您的情况可能非常有趣:

    https://github.com/BabylonJS/Babylon.js/blob/master/loaders/src/glTF/2.0/Extensions/KHR_texture_transform.ts

    如您所见,此扩展包含一个名为 loadTextureInfoAsync 的函数,该函数在接收到即将加载的纹理信息后,在完成时返回一个 Promise。

    根据您的用例,您可以完全替换加载纹理功能或对其进行扩展(如上例所示)。要覆盖它,您应该自己实现该功能:

    public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {
        const texture = loadTheTextureYourselfWithFallback();
        return Promise.resolve(texture);
    }
    

    当然,加载功能需要根据你的逻辑来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 2010-12-20
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多