Swift ios-将MDLAsset转换为MDLMesh时无法打开OBJ文件
我正在使用ModelIO演示加载和纹理.OBJ文件。 当我使用本地文件时,下面的代码运行良好Swift ios-将MDLAsset转换为MDLMesh时无法打开OBJ文件,swift,scnscene,Swift,Scnscene,我正在使用ModelIO演示加载和纹理.OBJ文件。 当我使用本地文件时,下面的代码运行良好 guard let url = Bundle.main.url(forResource: "myVase", withExtension: "obj") else { fatalError("Failed to find model file.") } let asset = MDLAsset(url:url) guard let object = asset.object(at: 0) as
guard let url = Bundle.main.url(forResource: "myVase", withExtension: "obj") else {
fatalError("Failed to find model file.")
}
let asset = MDLAsset(url:url)
guard let object = asset.object(at: 0) as? MDLMesh else {
fatalError("Failed to get mesh from asset.")
}
但是,当我将代码更改为使用AmazonS3中的文件而不是本地文件时。我收到错误:“无法打开OBJ文件”&“无法从资源获取网格。”
这是我的密码:
let url = URL.init(string: "https://s3.amazonaws.com/myObject/.../object.obj")
let asset = MDLAsset(url:url!)
guard let object = asset.object(at: 0) as? MDLMesh else {
fatalError("Failed to get mesh from asset.")
}
注意:我公开了链接并免费下载。我修复了我的问题。我的问题是我在下载完成之前转换了文件。因此,本地路径已创建,但数据为空,因为下载过程尚未完成 为了解决这个问题,我首先使用async完成下载,然后转换它
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("myVase.obj")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
Alamofire.download(urlString, to: destination).response { response in
if response.error == nil, let filePath = response.destinationURL?.path {
print(imagePath)
let myUrl = "file://" + filePath
let asset = MDLAsset(url:URL(string:myUrl)!)
guard let object = asset.object(at: 0) as? MDLMesh else {
fatalError("Failed to get mesh from asset.")
}
...
}
}
您需要从Amazon下载文件并将其放在本地,因为MDLAsset只从文件URL加载内容,而不是从远程URL加载内容。@deoKasuhai:我不想将所有文件都存储在本地。按照我的代码,我从remote下载了.obj,然后对其进行转换,但转换时出现了一些问题