我在使用以下代码从URL生成3D对象时遇到问题,这给了我一个不确定的错误。如果有人可以指出代码出了什么问题,那将非常棒
我遵循了Google的教程:https://developers.google.com/ar/develop/java/sceneform/create-renderables。但由于语法错误,必须进行一些修改。
(1)以下代码应该从URL-ASSET_URL生成3D对象(我已经测试了此URL起作用)。
private AugmentedImage image;
private CompletableFuture<ModelRenderable> modelRenderable;
modelRenderable =
ModelRenderable.builder()
.setSource(context, RenderableSource.builder().setSource(
context,
Uri.parse(ASSET_URL),
RenderableSource.SourceType.GLTF2)
.setScale(0.5f) // Scale the original model to 50%.
.setRecenterMode(RenderableSource.RecenterMode.ROOT)
.build())
.setRegistryId(ASSET_URL)
.build();
(2)以下代码用于将3D对象放置在图像上:
if(!modelRenderable.isDone()){
CompletableFuture.allOf(modelRenderable)
.thenAccept((Void aVoid) -> setImage(image))
.exceptionally(
throwable -> {
Log.e(TAG, "Exception loading", throwable);
return null;
}
);
return;
}
(3)以下代码(我是从场景形式样本增强图像修改而来的)从静态本地资产生成3D对象,该对象可与代码(2)一起使用
// modelRenderable = ModelRenderable.builder()
// .setSource(context,Uri.parse("SubstanceMiku.sfb"))
// .build();
我得到的错误
E/Filament: Panic
in filament::Material *filament::Material::Builder::build(filament::Engine &):85
reason: Material version mismatch. Expected 2 but received 1.
A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 16333 (tapp.cloudimage), pid 16333 (tapp.cloudimage)
I/native: tracking.cc:3027 no history. confidence : 1.0
I/native: tracking.cc:3027 no history. confidence : 1.0
I/native: motion_analysis_calculator.cc:611 Analyzed frame 101
Application terminated.
答案 0 :(得分:0)
我有一个类似的问题,经过调试和搜索后,它似乎与插件类路径中的场景有关。
如果转到项目级别的等级构建文件,并将场景表单插件类路径更新为最新版本,请同步并重试,这将为我消除错误。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.ar.sceneform:plugin:1.15.0' // <-- *THIS LINE*
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
顺便说一句,调试是棘手的,可能是因为诸如ModelRenderable.builder之类的某些功能利用了较低的层,这些层不会像其他一些Android层一样干净地抛出异常。即使崩溃是由生成器中的.build生成的(通过逐步注释掉代码来确认),也没有调用“ exceptionalally”子句。