默认情况下,filament
加载glft
文件时,所依赖的图片资源是从本地src/main/assets
文件夹里读取的。当我们从加载远程gltf
文件时,图片资源也被base64
编码成字符串,一起放进了json
文件,这种情况,可以按照下面的方法处理:
private suspend fun loadBytesModel(byteArray: ByteArray?, isGltf: Boolean) {
val byteBuffer = ByteBuffer.wrap(byteArray)
val rewound = byteBuffer.rewind()
withContext(Dispatchers.Main) {
modelViewer.destroyModel()
if (isGltf) {
modelViewer.loadModelGltf(rewound) { uri ->
val s = uri.split(",") // ----------------------🚩
if (s.size == 2) {
ByteBuffer.wrap(java.util.Base64.getDecoder().decode(s[1].toByteArray(Charsets.UTF_8)))
} else {
return@loadModelGltf byteBuffer
}
}
} else {
modelViewer.loadModelGlb(rewound)
}
modelViewer.transformToUnitCube()
}
}
标🚩处代码说明:
在gltf的json文件里,图片资源按Base64 编码,样式如下:
"data:image/png;base64,abcdefg"
,所以我们以字符,
分隔,解码后面的字符串喂到filament
的modelView
里去。