簡體   English   中英

將collada(dae)文件加載到SCNNode(Swift - SceneKit)

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

這有效

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

是否有節點的等價物?

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

我已經搜索了高低,找不到任何將整個dae文件加載到SCNNode中的內容。 (不只是一個ID)

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

iOS 9引入了SCNReferenceNode類。 現在你可以這樣做:

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

這就是我在實際項目中使用的內容:

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

}

之后你可以打電話:

let node = SCNNode(named: "art.scnassets/house.dae")

SCNScene(named:)獲得的場景有一個rootNode屬性,其子項是您加載的DAE文件的內容。 您應該能夠從該節點拉出子節點並將其添加到現有SCNScene中的其他節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM