0

我的应用程序无法从本地读取/加载文件。我正在使用 Android Studio 4.0 和 Sceneform 1.16。如果我使用 https 路径,代码可以正常工作(例如https://storage.googleapis.com/ar-answers-in-search-models/static/Tiger/model.glb

问题是“找不到文件”错误。在下面的代码中,我还使用了 getApplicationContext() 而不是“this”。有问题的部分

ModelRenderable.builder()
                    .setSource(this,Uri.parse("/sampledata/models/abc.glb")  )    <--- Problem
                    .setIsFilamentGltf(true)
                    .build()
                    .thenAccept(......

已添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>

谢谢你的帮助。

4

3 回答 3

0

你可以把你的glb放在asset目录中。

并像下面一样加载它

ModelRenderable.builder().setSource(this, Uri.parse("model.glb"))

或者,如果您的 glb 保存在设备存储中,

ModelRenderable.builder().setSource(this, Uri.fromFile(File(YOUR_GLB_PATH)))

于 2020-07-09T01:38:33.173 回答
0

我能够通过图像

ModelRenderable.builder()
                    .setSource(this,R.raw.abc) 

但我没有得到纹理或材料。我正在从搅拌机中导出图像/对象。另外,想知道 uri.parse("") 是否可以使用本地保存的对象。上述方式有其自身的局限性。

暂时不将此标记为已解决。

于 2020-07-04T08:40:33.360 回答
0

您可以按如下方式从资产中访问 GLB 模型 - 下面的示例是 Kotlin,并针对与 Sceneform 1.16 相同的 mSceneform 1.18 进行了测试。

        //Build the renderable - this uses the new to Sceneform 1.16 glb model format
        val modelFilePath =  getFileFromAssets(this, "yourModel.glb").absolutePath
        ModelRenderable.builder()
                .setSource(
                        this,
                        Uri.parse(
                                modelFilePath))
                .setIsFilamentGltf(true)
                .build()
                .thenAccept(
                        Consumer { modelRenderable: ModelRenderable ->
                            //Add anything you want to do here....
                            Log.d(TAG,"Model loaded")
                        })
                .exceptionally( Function<Throwable, Void?> { throwable: Throwable? ->
                            //Add anything you want to do here e.g.:
                            Log.d(TAG, "ModelRenderable.builder exception: " + throwable)
                            null
                        })
于 2020-12-31T15:12:47.020 回答