Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

load a collada (dae) file into SCNNode (Swift - SceneKit)

This works

let scene = SCNScene(named: "house.dae")

Is there an equivalent for a node?

let node = SCNNode(geometry: SCNGeometry( ..??.. "house.dae" ..??.. ))

I have searched high and low, finding nothing that will load an entire dae file into a SCNNode. (not just one ID from it)

like image 592
quemeful Avatar asked Aug 19 '14 15:08

quemeful


4 Answers

// add a SCNScene as childNode to another SCNScene (in this case to scene)
func addSceneToScene() {
    let geoScene = SCNScene(named: "art.scnassets/ball.dae")
    scene.rootNode.addChildNode(geoScene.rootNode.childNodeWithName("Ball", recursively: true))
}
addSceneToScene()
like image 171
user3957490 Avatar answered Nov 01 '22 03:11

user3957490


That's what I use in real project:

extension SCNNode {

    convenience init(named name: String) {
        self.init()

        guard let scene = SCNScene(named: name) else {
            return
        }

        for childNode in scene.rootNode.childNodes {
            addChildNode(childNode)
        }
    }

}

After that you can call:

let node = SCNNode(named: "art.scnassets/house.dae")
like image 38
Denis Bystruev Avatar answered Nov 01 '22 03:11

Denis Bystruev


iOS 9 introduced the SCNReferenceNode class. Now you can do:

if let filePath = Bundle.main.path(forResource: "Test", ofType: "dae", inDirectory: "GameScene.scnassets") {
   // ReferenceNode path -> ReferenceNode URL
   let referenceURL = URL(fileURLWithPath: filePath)

   if #available(iOS 9.0, *) {
      // Create reference node
      let referenceNode = SCNReferenceNode(URL: referenceURL)
      referenceNode?.load()
      scene.rootNode.addChildNode(referenceNode!)
   }
}
like image 35
Crashalot Avatar answered Nov 01 '22 04:11

Crashalot


The scene you get from SCNScene(named:) has a rootNode property whose children are the contents of the DAE file you loaded. You should be able to pull children off that node and add them to other nodes in an existing SCNScene.

like image 31
Noah Witherspoon Avatar answered Nov 01 '22 04:11

Noah Witherspoon