ios - 将MDLAsset转换为MDLMesh时无法打开OBJ文件

时间:2018-03-13 21:33:10

标签: swift scnscene

我正在使用 ModelIO 演示加载和纹理 .OBJ 文件。 当我使用本地文件时,此代码可以正常工作。

br

但是,当我更改代码以使用来自我的Amazon S3的文件而不是本地文件时。我收到了错误:“无法打开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? MDLMesh else {
    fatalError("Failed to get mesh from asset.")
}

注意:我公开了这个链接并免费下载。

1 个答案:

答案 0 :(得分:1)

我解决了我的问题。我的问题是我在下载完成之前转换了文件。因此,创建了本地路径但数据为空,因为下载过程尚未完成。

要解决这个问题,我先使用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.")
       }
        ...
    }
}