【发布时间】:2021-03-13 13:20:40
【问题描述】:
众所周知,AR 库目前的版本为 1.17.1。由于 Android Studio 导入插件已被弃用,我很难在我的 AR 场景中导入和使用模型。
目前我的原始文件夹中有 2 个 .gltf 模型,并且我有以下代码试图在屏幕上显示模型:
ModelRenderable.builder()
.setSource(context.applicationContext, context.resources.getIdentifier(name, "raw", context.packageName))
.build()
.thenAccept {
renderable = it
}
.exceptionally {
print("Error : $it")
null
}
当我尝试添加模型时,出现以下异常:
2020-12-01 17:34:27.012 24894-26864/com.inform.ar E/ModelRenderable: Unable to load Renderable registryId='android.resource://com.inform.ar/raw/armchair'
java.util.concurrent.CompletionException: java.lang.AssertionError: No RCB file at uri: android.resource://com.inform.ar/raw/armchair
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:278)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:284)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1629)
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:919)
Caused by: java.lang.AssertionError: No RCB file at uri: android.resource://com.inform.ar/raw/armchair
at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask.byteBufferToSfb(LoadRenderableFromSfbTask.java:191)
at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask.lambda$downloadAndProcessRenderable$0$LoadRenderableFromSfbTask(LoadRenderableFromSfbTask.java:121)
at com.google.ar.sceneform.rendering.-$$Lambda$LoadRenderableFromSfbTask$A8YYsoT3V_A--F80fBJ_ZLNSnhc.get(Unknown Source:4)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1627)
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:919)
这段代码有什么问题?没有更新的官方教程。所有演示都无法正常工作,并且大多数教程都使用插件导入模型。你们有任何想法如何完成这项工作吗?
【问题讨论】:
-
首先,您需要将您的库版本从 1.17.0 更改为 1.15.0 implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0' implementation 'com.google .ar.sceneform:assets:1.15.0' 为什么使用 .gltf 模型? .gltf 在需要在运行时加载模型时使用。尝试不同的模型,如 .obj、fbx 或 sfb
-
感谢您的回复。为什么要回退到 1.15?我的意思是,我必须吗?这只是一个测试。如果我完成这项工作,我将从服务器加载模型。所以我需要使用 gltf 模型。
-
因为 ARCore 现在是开源的,谷歌不再维护新版本的 ARCore:1.17。而且这个版本不稳定。知道了? 1.15是稳定版的小伙伴。你的代码现在可以用了吗?
-
好吧,我确实尝试降级,但我仍然收到相同的错误“Uri 没有 RCB 文件”。我认为场景形式需要特定类型的模型,而不仅仅是模型。有任何想法吗?您是否必须为 Sceneform 场景提出替代 sdk 是否已存档?
-
好吧,其实我是经过长时间的尝试才成功的!!必须用 Blender 打开模型并从那里导出!我不知道为什么会这样,但这是让它工作的唯一方法!