Я делаю приложение 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')
Это связано с заглавными буквами имени моего 3D-объекта?
Шаг 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"))
он должен работать.
Файл 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-assets
Как вы можете видеть в моей папке sampledata, автоматически не создается файл .sfb. Итак, если я сделаю то, что вы предложили, как это будет работать?