Estoy tratando de cargar un activo remoto (.glb o .gltf) en ModelViewer en filamento. Google Filament sample-gltf-viewer muestra un objeto RemoteServer , pero no veo cómo puedo cargar un activo remoto desde una URL (por ejemplo, https://github.com/kelvinwatson/glb-files/raw/main/DamagedHelmet. glb )
Intenté lo siguiente, pero aparece "No se puede analizar el archivo glb".
El código para RemoteServer no indica dónde podemos pasar una URL.
val glbUrl = "<URL TO YOUR GLB ASSET>" private fun loadGlbRemote() { lifecycleScope.launch { withContext(Dispatchers.IO) { val url = URL(glbUrl) val connection = url.openConnection() connection.connect() val inputStream: InputStream = BufferedInputStream(url.openStream()) val len = connection.contentLength val byteArray = ByteArray(len) inputStream.read(byteArray, 0, byteArray.size) val byteBuffer = ByteBuffer.wrap(byteArray) modelViewer.loadModelGlb(byteBuffer) inputStream.close() } implementation 'com.google.android.filament:filament-android:1.7.0' implementation 'com.google.android.filament:filament-utils-android:1.7.0' implementation 'com.google.android.filament:gltfio-android:1.7.0'`Cualquier ayuda sería apreciada.
Cuestión ha sido resuelta. El problema era que no estaba descargando completamente el archivo y que era necesario llamar a modelViewer.loadModelGlb en el hilo principal.
Aquí está el código de trabajo:
val glbUrl = "<URL TO YOUR GLB ASSET>" URL(glbUrl).openStream().use { inputStream: InputStream -> val inputStream = BufferedInputStream(inputStream) ByteArrayOutputStream().use { output-> inputStream.copyTo(output) val byteArr = output.toByteArray() val byteBuffer = ByteBuffer.wrap(byteArr) val rewound = byteBuffer.rewind() withContext(Dispatchers.Main) { modelViewer.destroyModel() modelViewer.loadModelGlb(rewound) modelViewer.transformToUnitCube()La solución se ha incluido en el problema archivado: https://github.com/google/filament/issues/5255