【问题标题】:Importing .scn file to scene from URL with textures从带有纹理的 URL 将 .scn 文件导入场景
【发布时间】:2018-05-20 13:12:53
【问题描述】:

我正在为我的应用程序使用 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 包含纹理。我得到了一个错误

加载失败: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 会尝试从本地文件加载这些纹理? 我该如何解决?

【问题讨论】:

  • 如果您将 .overrideAssetURLs 设置为 TRUE,您还应该指定 .assetDirectoryURLs 加载选项。但是你为什么把它设置为真呢?默认值为 False,这会导致相对于加载 .scn 的 url 加载资产。
  • 它也不适用于 False。结果一样!
  • @Gor 如果你解决了这个问题,请更新它。谢谢
  • 不,我没有找到解决此问题的方法。仅使用本地模型
  • 关于这个问题的任何更新?即使我面临同样的问题。有没有什么方法可以直接从服务器加载.scn文件而不下载呢?

标签: ios swift scenekit arkit


【解决方案1】:

您应该下载文件及其纹理,然后加载场景。注意 .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")
    }

【讨论】:

  • 这对我不起作用,即使纹理位于正确的目录中。看起来 SceneKit 正在查看资产而不是目录。
  • 我也没有看到这个工作。我加载了 .scn 文件,但纹理未按预期显示。只是白色(或颜色基础),而不是应该存在的图像。有什么想法吗?
猜你喜欢
  • 2019-03-28
  • 2018-11-23
  • 2019-07-15
  • 2018-07-16
  • 2017-05-11
  • 2020-06-07
  • 2019-09-21
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多