如何将Wavefront OBJ文件转换为具有模型I/O的SCNNode

Jas*_*ach 5 3d wavefront ios scenekit

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

let asset = MDLAsset(URL: localFileUrl)
print("count = \(asset.count)")  // 1
Run Code Online (Sandbox Code Playgroud)

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

模型I/O可以与MetalKit,GLKit和SceneKit框架共享数据缓冲区,以帮助您有效地加载,处理和呈现3D资产.

但我不知道如何从MDLAsset获取缓冲区到SCNNode.

Jas*_*ach 8

事实证明这很容易,因为许多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)
Run Code Online (Sandbox Code Playgroud)

这很容易......

  • 请注意`+ [SCNScene sceneWithURL:options:error:]`也可以. (5认同)
  • 另请注意,解析/导入OBJ需要一些成本.如果这是您在应用程序中随附的资产,请考虑先将其转换为Xcode中的".scn"(或使用您在Mac上运行的工具,使用模型I/O). (2认同)