如何在SceneKit中使用OBJ文件或CTM文件而不是DAE文件?

时间:2015-03-09 04:37:34

标签: ios 3d scenekit

我曾经在IOS上使用openGL和metal渲染3d场景,我使用的文件格式是OBJ和CTM。这些天我正在尝试Scene Kit。看来SceneKit只加载DAE文件。我在互联网上找到的所有演示都使用DAE文件,我无法在其代码中看到顶点和刻面的数组。 如何加载OBJ文件或CTM文件而不是DAE文件?

5 个答案:

答案 0 :(得分:5)

加载OBJ文件

就像向MDLAsset传递有效的URL一样简单。

private func nodeForURL(url: NSURL) -> SCNNode
{
    let asset = MDLAsset(URL: url)
    let object = asset.objectAtIndex(0)
    let node = SCNNode(MDLObject: object)

    return node
}

这不仅会正确加载.obj文件,还会加载引用的.mtl文件。

答案 1 :(得分:3)

你可以通过编写自己的导入程序来做到这一点。请查看SCNGeometrySCNGeometrySourceSCNGeometryElement

编辑:启动iOS 9.0和OS X 10.11 SceneKit可以打开OBJ文件或Model I / O支持的任何其他文件格式。您可以使用以前存在的API(例如+sceneNamed:)或新的+sceneWithMDLAsset:方法。

答案 2 :(得分:2)

编辑:ModelIO现在可以加载OBJ文件。我自己没有试过这条路。这个答案是在iOS 9和OS X 10.11之前编写的:

SceneKit无法在iOS上加载DAE文件,实际上,它实际上是将DAE文件预编译为iOS设备的内部格式。

如果你想将OBJ转换为DAE,你可以在OS X上编写一个简单的导入器/导出器 - 在OS X上,SceneKit实际上会读取OBJ文件(它没有记录,但它有效)写DAE。

或者你可以下载" Assimp"如果您想尝试自己阅读OBJ,那么可以在github上进行项目,但是将它转换为SceneKit对象会有一些工作。

答案 3 :(得分:2)

有关支持的文件格式的更多信息:

SceneKit支持以下3D文件格式,可以使用Xcode中的场景编辑器将其导入.scn文件:

  

DAE,OBJ,Alembic,STL和PLY文件。

来源:WWDC 2015 Session "Enhancements to SceneKit"于02:24

答案 4 :(得分:1)

从iOS 9 / OS X 10.11开始,您可以使用Model I / O的MDLAsset导入OBJ文件(以及其他一些格式)。 How do you convert Wavefront OBJ file to an SCNNode with Model I/O有示例代码。