【问题标题】:How to turn .scn from Documents folder into SCNNode programmatically?如何以编程方式将 .scn 从 Documents 文件夹转换为 SCNNode?
【发布时间】:2017-08-04 02:09:21
【问题描述】:

我在 iPhone 的 Documents 文件夹中的文件夹中有一个 .scn 文件。我一直在尝试使用SCNSceneSource.scn 文件转换为SCNNode

//fileDestFolderURL is the folder that holds the .scn file
let sceneSource = SCNSceneSource(url: fileDestFolderURL, options: [:])
let scene = sceneSource?.scene(options: [:])
print(scene) //prints nil
print(scene?.rootNode) //prints nil

但是,我不断收到nil :(

我的最终目标是获取SCNNode 并将其添加到ARSCNView

如果有人能提供他们的意见,将不胜感激!

【问题讨论】:

    标签: ios scenekit arkit


    【解决方案1】:

    您应该使用SCNScene.init(url:options:) 而不是SCNSceneSource(主要用于 Collada 文件)。

    【讨论】:

    • 我是否需要通过任何特定的选项才能完成这项工作?即使文件的 URL 正确,它也会为我返回 nil。
    【解决方案2】:

    我正在使用 Objective-C 来完成您的要求。这是一些可能对您有所帮助的翻译代码。这是一个带有椅子 .scn 模型的示例。我注意到 htat 最好将 .scn 文件放在 Models.scnassets 文件夹中

    class Chair {
        func loadModel() {
            let virtualObjectScene = SCNScene(named:"Models.scnassets/chair/chair.scn"")
            let wrapperNode = SCNNode()
            for child: SCNNode in virtualObjectScene?.rootNode?.childNodes {
                wrapperNode.addChildNode(child)
            }
            addChildNode(wrapperNode)
        }
    }
    

    我所做的是实例化这个 Chair 类的一个对象,然后在这个对象上调用 loadModel。之后,我可以将它作为子节点添加到场景的根节点,它就会出现在场景中。

    【讨论】:

    • 但问题是我的.scn 文件在我预运行时不在我的应用程序中(即它不在我的应用程序的Models.scnassets 中)。我正在下载.scn 文件,所以它位于iPhone 的Documents 文件夹中。所以我不能打电话给SCNScene(named:"Models.scnassets/chair/chair.scn")
    • 您是否尝试过此功能,将文件路径名称更改为您的 .scn 文件在文档目录中的任何位置?我已经将它与 Models.scnassets 之外的 .scn 文件一起使用,它也可以正常工作。
    猜你喜欢
    • 2018-07-03
    • 2011-08-31
    • 2021-03-25
    • 2011-01-30
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多