【问题标题】:How to load SCN or glTF model at runtime in ARKit app?如何在 ARKit 应用程序运行时加载 SCN 或 glTF 模型?
【发布时间】:2020-05-08 16:02:39
【问题描述】:

在运行时从 iOS 内部的 URL 加载 3d 模型的最佳方法是什么。我试过这个.scn.gtlf 模型导入器。

我正在使用这个框架https://github.com/prolificinteractive/SamMitiAR-iOS 我这样加载模型:

let virtualObjectGLTFNode = SamMitiVirtualObject(gltfUrl: URL(string: 
   "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample- 
    Models/master/2.0/Duck/glTF-Embedded/Duck.gltf")!, allowedAlignments: 
   [.horizontal])
virtualObjectGLTFNode.name = "Duck"

virtualObjectGLTFNode.setAnimationForVirtualObjectRemoving { (node, completed) in
    SceneKitAnimator.animateWithDuration(duration: 0.35 / 2, 
                                   timingFunction: .easeIn, 
                                       animations: {
        let transform = SCNMatrix4MakeScale(0.01, 0.01, 0.01)
        node.contentNode?.transform = transform
        }, completion: completed)
    }
return virtualObjectGLTFNode

像上面一样,我正在从远程服务器加载不同的 url,请指导我如何从远程服务器加载 3d 模型。我想以哪种格式获取 url。请发送任何链接,其中包含远程服务器的 scn 文件 提前谢谢。

【问题讨论】:

    标签: ios swift scenekit augmented-reality arkit


    【解决方案1】:

    似乎url loader 功能在SamMitiAR 框架中不起作用。它在 Placing and Removing Virtual Objects 部分下显示 Work in Progress

    要了解如何将模型动态加载到 ARKit 应用程序中(当模型在编译时无法访问时),请阅读这篇文章(抱歉,这里有 Objective-C 代码):

    如果您想了解在使用 url 时如何使用不同的方法,请阅读以下 SO 帖子:

    如需更多阅读,请使用 Apple 文档:

    【讨论】:

    • 感谢您的重播,我已经尝试过 [stackoverflow.com/questions/48636461/…,但我的服务器 url 没有加载。我正在获取 .scn 文件和 .dae file.obj 文件。
    • 您能否分享任何通过加载样本从服务器动态获取 3d 模型的代码。
    • @GangiReddyRamiReddy,你在这个项目上有什么进展吗?
    • 是的 github.com/prolificinteractive/SamMitiAR-iOS 通过使用这个框架我已经完成了,但 glTF url 会加载正常。
    • 现在我的问题是如何从远程服务器创建 glTF url
    【解决方案2】:

    我可以解释我现在所做的工作。我想我们也尝试过 .gltf 和 .scn 并没有得到任何结果,所以我们得出这样的结论:

    1. 获取一个包含 Collada 文件 (.dae) 和所有纹理的文件夹。

    2. 正如@AndyFedo 也提到的,我们已经完成了this solution 的步骤。当您在本地没有运行时文件时,您应该执行此步骤。

    3. 在 copySceneKitAssets 的帮助下将原始 Collada 文件夹转换为该页面中解释的所需文件夹后,我已压缩新文件夹并将其放在服务器上

    4. 然后调用api,将zip文件夹保存在设备上,解压文件夹并搜索.dae文件并获取该文件的路径。我将其命名为 modelUrl。

    5. 让 virtualObject = SamMitiVirtualObject(referenceNode: SCNReferenceNode.init(url:modelUrl as URL)! , allowedAlignments: [.horizo​​ntal])

    应该可以的。

    【讨论】:

    • 我不确定你是否可以将URL直接放在SCNReferenceNode中,我从研究中了解到,你应该将文件保存在本地,获取它的URL并显示。
    • 谢谢你能分享你的示例代码吗?
    • 你得到了什么,你得到一个错误吗?您需要代码的哪一部分?好吧,您不需要在 URL 中包含纹理。 Collada 有自己的信息。确保 step2 正确完成,没有任何错误。你确定吗?如果是,请将压缩包保存在“文档”文件夹中,然后在此处解压缩。转到解压缩的文件夹并选择 .dae 文件。最后,modelUrl 应如下所示:file:///var/mobile/Containers/Data/Application/7DVBACE2-9584-412A-AB38-661CE60BE98C/Documents/modelunzip/YYY_2019339_Internetworld/YYY_2019339_Internetworld.dae
    猜你喜欢
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2014-10-13
    • 2015-02-12
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多