将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)

Posted

技术标签:

【中文标题】将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)【英文标题】:load a collada (dae) file into SCNNode (Swift - SceneKit) 【发布时间】:2014-10-12 19:13:08 【问题描述】:

这行得通

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

节点是否有等价物?

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

我从高处和低处搜索,没有找到将整个 dae 文件加载到 SCNNode 中的内容。 (不只是一个ID)

【问题讨论】:

How do you load a .dae file into an SCNNode in ios SceneKit?的可能重复 也许吧。在这里它得到了正确的回答。 (加载整个 dae 文件,而不仅仅是其中的一个 ID) 【参考方案1】:
// 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()

【讨论】:

【参考方案2】:

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

【讨论】:

最佳答案!【参考方案3】:

这就是我在实际项目中使用的:

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

【讨论】:

【参考方案4】:

您从SCNScene(named:) 获得的场景有一个rootNode 属性,其子项是您加载的DAE 文件的内容。您应该能够从该节点中拉出子节点并将它们添加到现有 SCNScene 中的其他节点。

【讨论】:

请注意,您不能将一个场景的rootNode 移动到另一个场景中。您需要拉出一个子节点。 谢谢,不知道。更新了答案。

以上是关于将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)的主要内容,如果未能解决你的问题,请参考以下文章

Android 将 FBX 或 Collada(.dae) 加载到 Android Studio Activity 中

将dae批量转换为scn

从 A-Frame 或 JS 更新 Collada (.dae) 文件代码

如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?

在 SceneKit 中支持 Collada/DAE 模型都有哪些要求?

导入到 XCode 的 Collada (.dae) 文件显示没有纹理