ios - 从带有纹理的 URL 将 .scn 文件导入场景

标签 ios swift scenekit arkit

我正在为我的应用程序使用 ARKit,我尝试从网络服务器动态加载 .scn 文件

这是我的部分代码

    let url = URL(string: "http://192.168.0.31:1234/5a27e09cbad20a7a03ad5d80/box/box.scn")
    if let objectScene = try? SCNScene(url: url!, options: [.overrideAssetURLs: true]) {
        print("load success")
        let node = SCNNode()
        for childNode in objectScene.rootNode.childNodes {
            node.addChildNode(childNode)
        }

        sceneView.scene.rootNode.addChildNode(node)
    } else {
        print("error loading")
    }

此处 box.scn 包含纹理。我得到一个错误

Failed loading: C3DImage 0x1c00f6f80 src:file:///var/containers/Bundle/Application/110F7AB6-00F8-4E5B-B843-46551A23CB7F/ar.app/maps/CMU_Split_Face_Running_200x400_bump.jpg [0.000000x0.000000]

为什么 Scenekit 尝试从本地文件加载这个纹理? 我该如何解决?

最佳答案

您应该下载文件及其纹理,然后加载场景。请注意,除非您想添加一些加载选项,否则 .scn 文件和纹理应该位于同一目录中。

从服务器下载一个带有纹理的.scn文件后,我用这段代码来显示对象:

do {
        let scene = try SCNScene(url: URL(fileURLWithPath: "YourDownloadedScnFilePath") , options: nil)

        // Set the scene to the view
        sceneView.scene = scene
    } catch {
        print("ERROR loading scene")
    }

关于ios - 从带有纹理的 URL 将 .scn 文件导入场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677954/

相关文章:

ios - 如何更改 UINavigationItem 字体?

ios - 在 Action 中设置按钮文本

ios - X 天后删除核心数据

swift - 如何在 Swift 中为 SCNGeometrySource 构建数据

ios - 如何从 UIStoryboardPopoverSegue 获取由 UIPopoverController 包装的 View Controller ?

ios - 我应该如何使用 SDL2 iOS 应用程序事件?

ios - 将 SceneKit 示例代码转换为 Swift 3 后出现奇怪的错误

swift - KVO 在 SCNNode 上绑定(bind) CGFloat

ios - 只能在 arc 或 gc 模式下合成 weak 属性

ios - 不遵循 QoS 优先级的队列