Swift 3 将 .dae 文件加载到 SCNNode
Swift 3 load .dae file into SCNNode
正在加载 .dae 文件作为场景元素
此代码有效,加载文件作为场景:
let scene = SCNScene(named: "art.scnassets/base-wall-tile_sample.dae")!
此代码将文件加载为 SCNGeometry,不会:
let url = Bundle.main.url(forResource: "art.scnassets/base-wall-tile_sample", withExtension: "dae")
let source = SCNSceneSource(url: url! )
let geo = source!.entryWithIdentifier("Geo", withClass: SCNGeometry.self)!
url 和 source 没问题,但它在尝试生成 geo 时崩溃了。糟糕的指导。
这段代码,就像网上提供的几个例子一样,在 Swift 2(load a collada (dae) file into SCNNode (Swift - SceneKit)。我不得不把它改成 Swift 3,而且似乎有些东西迷失在翻译中。有人能告诉我如何正确地做这些事情吗?
.dae
文件始终作为 SCNScene
加载。您需要命名包含要添加的几何图形的节点。
然后您可以加载场景,为具有给定名称的节点过滤它并将其添加到您的场景中。
func addNode(named nodeName, fromSceneNamed: sceneName, to scene: SCNScene) {
if let loadedScene = SCNScene(named: sceneName),
let node = loadedScene.rootNode.childNode(withName: nodeName, recursivly: true) {
scene.rootNode.addChildNode(node)
}
}
guard let shipScene = SCNScene(named: "ship.dae") else { return }
let shipNode = SCNNode()
let shipSceneChildNodes = shipScene.rootNode.childNodes
for childNode in shipSceneChildNodes {
shipNode.addChildNode(childNode)
}
node.addChildNode(shipNode)
正在加载 .dae 文件作为场景元素
此代码有效,加载文件作为场景:
let scene = SCNScene(named: "art.scnassets/base-wall-tile_sample.dae")!
此代码将文件加载为 SCNGeometry,不会:
let url = Bundle.main.url(forResource: "art.scnassets/base-wall-tile_sample", withExtension: "dae")
let source = SCNSceneSource(url: url! )
let geo = source!.entryWithIdentifier("Geo", withClass: SCNGeometry.self)!
url 和 source 没问题,但它在尝试生成 geo 时崩溃了。糟糕的指导。
这段代码,就像网上提供的几个例子一样,在 Swift 2(load a collada (dae) file into SCNNode (Swift - SceneKit)。我不得不把它改成 Swift 3,而且似乎有些东西迷失在翻译中。有人能告诉我如何正确地做这些事情吗?
.dae
文件始终作为 SCNScene
加载。您需要命名包含要添加的几何图形的节点。
然后您可以加载场景,为具有给定名称的节点过滤它并将其添加到您的场景中。
func addNode(named nodeName, fromSceneNamed: sceneName, to scene: SCNScene) {
if let loadedScene = SCNScene(named: sceneName),
let node = loadedScene.rootNode.childNode(withName: nodeName, recursivly: true) {
scene.rootNode.addChildNode(node)
}
}
guard let shipScene = SCNScene(named: "ship.dae") else { return }
let shipNode = SCNNode()
let shipSceneChildNodes = shipScene.rootNode.childNodes
for childNode in shipSceneChildNodes {
shipNode.addChildNode(childNode)
}
node.addChildNode(shipNode)