quemeful
quemeful

Reputation: 9848

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)

Upvotes: 10

Views: 16857

Answers (4)

Crashalot
Crashalot

Reputation: 34503

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!)
   }
}

Upvotes: 11

Denis Bystruev
Denis Bystruev

Reputation: 406

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")

Upvotes: 6

Noah Witherspoon
Noah Witherspoon

Reputation: 57149

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.

Upvotes: 1

user3957490
user3957490

Reputation: 146

// 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()

Upvotes: 13

Related Questions