在 Android Studio 中使用 ArCore 加载模型

Loading models with ArCore in Android Studio

我正在努力按照示例使用 ArCore 加载我自己的模型。我找到了以下代码:

ModelRenderable.builder()
    // To load as an asset from the 'assets' folder ('src/main/assets/andy.sfb'):
    .setSource(this, Uri.parse("andy.sfb"))

    // Instead, load as a resource from the 'res/raw' folder ('src/main/res/raw/andy.sfb'):
    //.setSource(this, R.raw.andy)

    .build()
    .thenAccept(renderable -> andyRenderable = renderable)
    .exceptionally(
        throwable -> {
          Log.e(TAG, "Unable to load Renderable.", throwable);
          return null;
    });

但是我无法在任何地方找到 class ModelRenderable 以及如何导入它。另外,我正在构建应用程序的示例应用程序会加载这样的模型:

virtualObject.createOnGlThread(/*context=*/ this, "models/andy.obj", "models/andy.png");
virtualObject.setMaterialProperties(0.0f, 2.0f, 0.5f, 6.0f);

但是我的模型没有png文件,只有obj和mtl。自动 sceneform 还创建了一个 sfa 和 sfb 文件。 哪一个是正确的做法?

参考这里是关于启动模型的官方文档:https://developers.google.com/ar/develop/java/sceneform#renderables

ModelRenderable 是的一部分 com.google.ar.sceneform:core 库,您可以通过将此依赖项添加到您的应用程序级别来添加它 build.gradle

implementation 'com.google.ar.sceneform:core:1.13.0'

确保所有其他 arcore / sceneform 依赖项都在同一版本上,在本例中为 1.13.0。

sfa 的意思是 SceneFormAsset,它以人类可读的形式表示您的模型细节,并且不会成为您的应用程序的一部分(它应该在 samplefolder 中,它与你的 src 文件夹)。然而,sfb 是 SceneFormBinary,每次您在 sfa 中修改某些内容并构建项目时,都会从 sfa 描述符生成此二进制文件。 sfb 文件应该位于项目的资产文件夹中。对于模型加载,您应该使用 sfb 文件:

ModelRenderable.builder()
        .setSource(context, Uri.parse("house.sfb"))

关于您的示例代码:如果您不熟悉 OpenGL,我不建议您遵循该示例,最好寻找 SceneForm,这是一个示例应用程序:https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/solarsystem