Установите резервную папку с помощью файла BABYLON.SceneLoader.AppendAsync и файла gltf. - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь изменить существующий проект, я хотел бы установить запасную текстуру при загрузке файла 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?Спасибо

1 Ответ

0 голосов
/ 26 сентября 2019

Загрузчик Babylon GLTF 2.0 имеет систему расширений, которую можно рассматривать как плагин на основе обещаний для каждого шага процесса загрузки.Вы можете увидеть несколько примеров расширений здесь:

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, которая возвращает обещание, когда будет выполнено, после получения информации о текстуре, которая должна быть загружена.

В зависимости от варианта использования вы можете полностью заменитьзагрузить функциональность текстуры или расширить ее (как в примере выше).Чтобы переопределить его, вам нужно просто реализовать функцию самостоятельно:

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

Конечно, функцию загрузки необходимо реализовать в соответствии с вашей логикой.

...