【问题标题】:ARCore loading model exceptionARCore 加载模型异常
【发布时间】: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 打开模型并从那里导出!我不知道为什么会这样,但这是让它工作的唯一方法!

标签: android arcore


【解决方案1】:

obj 格式模型仍然适用于较新版本的 arcore。如果您“只有 2 个 .gltf 模型”,那么我认为转换数据会容易得多。 obj 格式自 1980 年代就已经存在,而 gltf 格式是如此之新,它似乎正在经历成长的烦恼......

【讨论】:

  • 感谢您的回答。这 2 个模型仅用于概念证明。稍后,将有数百个模型!当 Google 说“支持 gltf”但实际上并没有运行 gltf 模型时,我真的想弄清楚 Google 的意思。
  • “支持gltf”可能是陈旧的信息。看起来它可能已经被 Sceneform 抛弃了,如下所示:stackoverflow.com/questions/62453399/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
相关资源
最近更新 更多