Исключение ArCore .obj FileNotFound

Я делаю приложение ArCore, и когда я создаю свой ModelRenderable, я получаю это исключение:

java.util.concurrent.CompletionException: java.io.FileNotFoundException: Coffee Cup_final.obj (No such file or directory)
        at com.google.ar.sceneform.utilities.SceneformBufferUtils.inputStreamToByteBuffer(SourceFile:49)
        at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask.lambda$downloadAndProcessRenderable$0$LoadRenderableFromSfbTask(LoadRenderableFromSfbTask.java:119)
        at com.google.ar.sceneform.rendering.-$$Lambda$LoadRenderableFromSfbTask$0DkaOpfpmr8DYlbaxWogZtUpKTw.get(Unknown Source:4)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1625)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.io.FileNotFoundException: Coffee Cup_final.obj (No such file or directory)
        at java.io.FileInputStream.open0(Native Method) 

Но я вижу, что этот файл существует. Вот рендеринг, за которым следует сборка gradle.

ModelRenderable.builder()
                .setSource(this, Uri.parse("Coffee Cup_final.obj.obj"))
                .build()
                .thenAccept(this::onRenderableLoaded)
                .exceptionally(throwable -> {
                    Log.i("Sceneform", "failed to load model");
                    return null;
                });

sceneform.asset('sampledata/Coffee Cup_final.obj.obj',
            'default',
            'sampledata/Coffee Cup_final.obj.sfa',
            'src/main/assets/Coffee Cup_final.obj')

Исключение ArCore .obj FileNotFound

Это связано с заглавными буквами имени моего 3D-объекта?

0
0
329
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Шаг sceneform.asset() в build.gradle преобразует файл OBJ во внутренний формат файла Sceneform SFB. Таким образом, файл, созданный и скопированный в вашу папку с ресурсами, называется src/main/assets/Coffee Cup_final.obj.sfb. Итак, если вы измените

ModelRenderable.builder().setSource(this, Uri.parse("Coffee Cup_final.obj.obj"))

к

ModelRenderable.builder().setSource(this, Uri.parse("Coffee Cup_final.obj.sfb"))

он должен работать.

Как вы можете видеть в моей папке sampledata, автоматически не создается файл .sfb. Итак, если я сделаю то, что вы предложили, как это будет работать?

The_Martian 05.06.2019 08:38

Файл SFB создается и помещается в папку ресурсов вашего приложения. Это последний параметр этапа сборки sceneform.assets(): 'src/main/assets/Coffee Cup_final.obj'. Это определяет имя файла SFB (без его расширения). Таким образом, он сгенерирует файл с именем src/main/assets/Coffee Cup_final.obj.sfb. Подробно описано здесь: Developers.google.com/ar/develop/java/sceneform/import-asset‌​s

Steven Mohr 05.06.2019 08:52

Другие вопросы по теме