ARCore从URL生成3D对象并增强图像

时间:2019-06-23 08:18:48

标签: android arcore

我在使用以下代码从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.

1 个答案:

答案 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”子句。