How do you load a .dae file into an SCNNode in iOS SceneKit?

前端 未结 6 1178
你的背包
你的背包 2021-01-31 10:14

I am having trouble understanding how geometry from .dae files should be loaded into an iOS SceneKit scene graph.

I know that you can load .dae

相关标签:
6条回答
  • 2021-01-31 10:46

    Thanks for your help!

    Here is a simple collada2Node class.

    //collada2SCNNode
    class func collada2SCNNode(filepath:String) -> SCNNode {
        var node = SCNNode()
        let scene = SCNScene(named: filepath)
        var nodeArray = scene!.rootNode.childNodes
    
        for childNode in nodeArray {
            node.addChildNode(childNode as SCNNode)
        }
        return node
    }
    
    0 讨论(0)
  • 2021-01-31 10:50

    I had a similar problem where I had one .dae file and I wanted to load multiple nodes from that file into a node. This worked for me:

    var node = SCNNode()
    let scene = SCNScene(named: "helloScene.dae")
    var nodeArray = scene.rootNode.childNodes
    
    for childNode in nodeArray {
      node.addChildNode(childNode as SCNNode)
    }
    

    First, I set a node that will hold it all together so it looks like it does in the original file. Next we import the .dae file we want and copy all the nodes inside of it. Lastly, for each node in the array I added it to the node.

    0 讨论(0)
  • 2021-01-31 10:51

    The usual pattern is to load your scene and retrieve the node you are interested in with its name using

    [scene.rootNode childNodeWithName:aName recursively:YES];
    

    Then you can reparent this node to your main scene.

    0 讨论(0)
  • 2021-01-31 11:03
    guard let shipScene = SCNScene(named: "ship.dae") else { return }
    let shipNode = SCNNode()
    let shipSceneChildNodes = shipScene.rootNode.childNodes
    for childNode in shipSceneChildNodes {
        shipNode.addChildNode(childNode)
    }
    
    0 讨论(0)
  • 2021-01-31 11:06
    func nodeWithFile(path: String) -> SCNNode {
    
        if let scene = SCNScene(named: path) {
    
            let node = scene.rootNode.childNodes[0] as SCNNode
            return node
    
        } else {
            println("Invalid path supplied")
            return SCNNode()
        }
    
    }
    
    0 讨论(0)
  • 2021-01-31 11:06

    The following answers didn't work for me.

    Here is what worked for me in Xcode 7.0 beta 5 , iOS 9.0 beta / Swift 2.0:

    3D model type: Collada 3D model name: "model.dae"

    1. Load the scene:

      let lampScene = SCNScene(named: "art.scnassets/model.dae")
      
    2. Access the child SCNode which is in the SCNScene:

      let lampRootNode = lampScene?.rootNode.childNodes[0]
      
    3. Add the lamp node from the loaded scene into the current loaded and viewed scene:

      self.scene.rootNode.addChildNode(lampRootNode!)
      

    NOTE: The self.scene exists due to:

    private var scene:SCNScene!
    

    Prior of adding the object to the scene I have made some scene setup according to the scene kit example. If you need the code mention it in the comments.

    Hope it helps.

    0 讨论(0)
提交回复
热议问题