【问题标题】:How do you convert Wavefront OBJ file to an SCNNode with Model I/O如何使用 Model I/O 将 Wavefront OBJ 文件转换为 SCNNode
【发布时间】:2016-04-12 14:24:10
【问题描述】:

我已经从 URL 导入了 Wavefront OBJ 文件,现在我想将它插入到我的 iOS 9 应用程序(在 Swift 中)上的场景 (SceneKit) 中。到目前为止我所做的是:

let asset = MDLAsset(URL: localFileUrl)
print("count = \(asset.count)")  // 1

任何将其转换为 SCNNode 的帮助将不胜感激。根据 Apple 的文档:

模型 I/O 可以与 MetalKit、GLKit 和 SceneKit 框架共享数据缓冲区,以帮助您高效地加载、处理和渲染 3D 资产。

但我不确定如何将缓冲区从 MDLAsset 获取到 SCNNode。

【问题讨论】:

    标签: ios 3d scenekit wavefront


    【解决方案1】:

    事实证明这很容易,因为许多 ModelIO 类已经桥接。我在做import ModelIO,它让我可以访问所有 ModelIO 类,同样import SceneKit 它给了我 SceneKit 类,但是,我缺少 import SceneKit.ModelIO 来引入对 ModelIO 的 SceneKit 支持。

    let url = NSURL(string: "url-to-your-obj-here")
    let asset = MDLAsset(URL: url!)
    let object = asset.objectAtIndex(0)
    let node = SCNNode(MDLObject: object)
    

    就这么简单...

    【讨论】:

    • 请注意,+[SCNScene sceneWithURL:options:error:] 也可以使用。
    • 另请注意,解析/导入 OBJ 会产生一些成本。如果这是您在应用中/随应用一起提供的资产,请考虑首先在 Xcode 中将其转换为 .scn(或使用您自己在 Mac 上运行的工具,使用 Model I/O)。
    • 我在文档中看到了 SCNNode 初始化程序,其签名更改为 SCNNode(mdlObject:)。但是.. Xcode 9.4.1 声称该初始化程序不存在,并且右键单击SCNNode 会显示一个没有该初始化程序的类定义。它在哪里?
    • 同样,Xcode 否认 SCNScene(mdlObject:) 存在。
    • 感谢您的解决方案,我的问题是我正在使用服务器 url 将其下载到本地内存,然后使用您的解决方案将其加载到相机上,并且工作正常,但问题是我正在获取 .obj 3d 对象灰色没有颜色我的问题是如何加载资产?
    猜你喜欢
    • 2017-06-27
    • 2011-12-09
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2019-10-18
    • 2012-02-05
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多