如何在 iOS SceneKit 中使用具有不同场景图形的 DAE 文件

Posted

技术标签:

【中文标题】如何在 iOS SceneKit 中使用具有不同场景图形的 DAE 文件【英文标题】:How to use DAE file with different Scene Graphs in iOS SceneKit 【发布时间】:2018-02-05 09:12:22 【问题描述】:

我有一个 .dae 文件并想在 SceneKit 中使用该模型。问题是 .dae 文件中有不同的场景图:

在我的 ViewController.swift 我有这个代码:

let scene = SCNScene(named: "art.scnassets/Edward_Kenway.dae")!
self.baumNode = scene.rootNode.childNode(withName: "???", recursively: true)

我必须在 childNode withName 中使用什么?如果我选择第一个场景图 (EdwardKenwayNecklace) 并将几何图形的名称 (EdwardKenwayNecklaceMesh) 放入我的代码中,应用程序就会崩溃。

【问题讨论】:

【参考方案1】:

您可以遍历场景的子节点,然后将它们全部添加到您创建的新节点中。

假设这是您正在寻找的东西,这样的事情可能会起作用。

func loadModel() 
    let virtualObjectScene = SCNScene(named: path)
    let wrapperNode = SCNNode()
    for child: SCNNode in virtualObjectScene?.rootNode?.childNodes 
        wrapperNode.addChildNode(child)
    
    addChildNode(wrapperNode)

路径是场景的名称。 该函数在初始化一个 SCNNode 类型的对象后运行,然后对该对象调用 loadModel。

【讨论】:

以上是关于如何在 iOS SceneKit 中使用具有不同场景图形的 DAE 文件的主要内容,如果未能解决你的问题,请参考以下文章

iOS SceneKit 霓虹灯

如何使用 SceneKit iOS 将背面图像添加为纹理

iOS10 + SceneKit:使用自定义着色器渲染视频

在 SceneKit 中,如何在不同大小的对象上平铺纹理,同时保持最小的绘制调用?

如何通过使用不同的类来切换 SceneKit 视图

如何在 iOS 11 中将 SKVideoNode 添加到 ARKit-SceneKit?