Могу ли я загрузить файл .gltf или .glb с внешнего хранилища?

У меня есть устройство Android, я работаю с ARCore и хочу загрузить файл Gltf или Glb с SD-карты. На веб-сайте https://developers.google.com/ar/develop/java/sceneform/create-renderables отображается только загрузка через Интернет.

Я читал, что parse.fromFile может помочь, но у меня это еще не сработало.

private static final String GLTF_ASSET =
   "https://github.com/KhronosGroup/glTF-Sample-Models/raw/master/2.0/Duck/glTF/Duck.gltf";

 /* When you build a Renderable, Sceneform loads model and related resources
 * in the background while returning a CompletableFuture.
 * Call thenAccept(), handle(), or check isDone() before calling get().
 */
 ModelRenderable.builder()
    .setSource(this, RenderableSource.builder().setSource(
            this,
            Uri.parse(GLTF_ASSET),
            RenderableSource.SourceType.GLTF2)
            .setScale(0.5f)  // Scale the original model to 50%.
            .setRecenterMode(RenderableSource.RecenterMode.ROOT)
            .build())
    .setRegistryId(GLTF_ASSET)
    .build()
    .thenAccept(renderable -> duckRenderable = renderable)
    .exceptionally(
        throwable -> {
          Toast toast =
              Toast.makeText(this, "Unable to load renderable " +
              GLTF_ASSET, Toast.LENGTH_LONG);
          toast.setGravity(Gravity.CENTER, 0, 0);
          toast.show();
          return null;
        });

person nerd100    schedule 21.02.2019    source источник


Ответы (2)


Да, ты можешь. Я пробовал с gltf, и он отлично работает. Я загрузил файл в каталог файлов и указал путь к файлу в качестве URL-адреса источника.

val fileName = "myfile.gltf"
val filePath = "${filesDir.path}/${fileName}"

ModelRenderable.builder()
        .setSource(this, RenderableSource.builder().setSource(
                this,
                Uri.parse(filePath),
                RenderableSource.SourceType.GLTF2).build())
        .setRegistryId(filePath)
        .build()
        .thenAccept {
            renderable = it
        }
        .exceptionally {
            // Error happened
            return@exceptionally null
        }

Примечание. Если у вас есть bin файл, скачайте и его.

person Midhun MP    schedule 25.04.2019
comment
Спасибо за ваш ответ. У меня вопрос. Я не хочу загружать файлы gltf и bin по отдельности. Могу ли я скачать один файл и показать свою модель? - person Andev; 15.01.2021
comment
@Andev Если у вас есть один файл для вашей модели, glb или автономный gltf, вы можете использовать один файл для его загрузки. - person Midhun MP; 15.01.2021

Да, вы можете, но вам нужно загрузить и .gltf, и .bin в место во внешнем хранилище, а затем вызвать .gltf оттуда, когда вы установите рендеринг для узла в сцене.

person Iesh Dixit    schedule 07.04.2019