[英]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.