如何在 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
}
}
这是 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
}
}