0

.usdz是否可以使用 ModelIO 和 MetalKit 框架以编程方式将 3D 网格导出为文件格式?

这是一个代码:

import ARKit
import RealityKit
import MetalKit
import ModelIO

let asset = MDLAsset(bufferAllocator: allocator)
asset.add(mesh)

let filePath = FileManager.default.urls(for: .documentDirectory, 
                                         in: .userDomainMask).first!
    
let usdz: URL = filePath.appendingPathComponent("model.usdz")

do {
    try asset.export(to: usdz)               
    let controller = UIActivityViewController(activityItems: [usdz], 
                                      applicationActivities: nil)
    controller.popoverPresentationController?.sourceView = sender
    self.present(controller, animated: true, completion: nil)
} catch let error {
    fatalError(error.localizedDescription)
}

当我按下一个Save按钮时,我得到一个错误。

4

1 回答 1

1

2021 年 6 月 24 日

目前苹果开发者可以使用canExportFileExtension(_:)类型方法导出.usd,.usda.usdc文件:

let usd = MDLAsset.canExportFileExtension("usd")
let usda = MDLAsset.canExportFileExtension("usda")
let usdc = MDLAsset.canExportFileExtension("usdc")
let usdz = MDLAsset.canExportFileExtension("usdz")
    
print(usd, usda, usdc, usdz)

它打印:

true true true false

.usdz但是,您可以使用名为的实例方法轻松地将 SceneKit 的场景导出为文件: write(to:options:delegate:progressHandler:).

let path = FileManager.default.urls(for: .documentDirectory,
                                     in: .userDomainMask)[0]
                                         .appendingPathComponent("file.usdz")
    
sceneKitScene.write(to: path, 
               options: nil, 
              delegate: nil, 
       progressHandler: nil)
于 2020-09-28T08:26:44.390 回答