如何在 SceneKit 中将 .dae 文件转换为 .scn 文件

how to convert .dae to .scn files in SceneKit

这是 Apple 的 Fox 示例代码的屏幕截图。如您所见,它们使用 .scn 文件格式作为图形对象。他们在 wwdc2015 视频中明确表示这是由一位艺术家完成的。到目前为止,我只使用 .dae,直到最近才确信这是唯一受支持的格式。我的问题是,如何将存储在 .dae 文件中的对象导出到 .scn 文件?

编辑:如果转到编辑器-> 转换为 SceneKit 场景文件格式 (.scn),这就是我得到的结果

不需要导出 .dae;您可以将对象直接放入 .scn 文件中:

.scnassets文件夹中新建.scn文件,然后将.dae文件拖到场景中。

在 SceneKit 场景编辑器中打开您的 DAE 文件,然后转到“编辑器”菜单并单击 "Convert to scn file format"。

您的艺术家将无法从他们最喜欢的工具中导出 scn 文件。您必须使用 Xcode 将 DAE 转换为 SCN。

您可以使用以下代码以编程方式将 .dae 转换为 .scn。名为 write(to:options:delegate:progressHandler:) 的实例方法适用于 iOS 10.0+ 和 macOS 10.9+。

import SceneKit

class GameViewController: NSViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let sceneView = self.view as! SCNView
        sceneView.allowsCameraControl = true
        let dae = SCNScene(named: "art.scnassets/model.dae")!
        
        
        let path = FileManager.default.urls(for: .documentDirectory,
                                             in: .userDomainMask)[0]
                                          .appendingPathComponent("Model.scn")
        
        dae.write(to: path, options: nil, delegate: nil, progressHandler: nil)
        print(path)
        
        let scene = try! SCNScene(url: path)
        sceneView.scene = scene
    }
}