3
votes

I used to render 3d scene with openGL and metal on IOS, and the file format which I used was OBJ and CTM. These days I am trying Scene Kit. It seems that SceneKit only load DAE file. All the demos I can found on the Internet use DAE file , and I can't see the array of vertex and facet in their codes. How can I load OBJ file or CTM file instead of DAE file?

5

5 Answers

3
votes

you can do that by writing your own importer. Take a look at SCNGeometry, SCNGeometrySource and SCNGeometryElement.

edit: starting iOS 9.0 and OS X 10.11 SceneKit can open OBJ files or any other file format supported by Model I/O. You can use previously existing APIs to do that (such as +sceneNamed:) or the new +sceneWithMDLAsset: method.

5
votes

Loading an OBJ file

It is as simple as passing MDLAsset a valid URL.

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

    return node
}

This will not only correctly load the .obj file, but it will load referenced .mtl files.

2
votes

As of iOS 9/OS X 10.11, you can use Model I/O's MDLAsset to import OBJ files (and a few other formats). How do you convert Wavefront OBJ file to an SCNNode with Model I/O has sample code.

2
votes

EDIT: ModelIO can probably load OBJ files now. I haven’t tried this path myself. This answer was written before iOS 9 and OS X 10.11:

SceneKit can't load DAE files on iOS, actually, it actually precompiles the DAE files to an internal format for iOS devices.

If you want to transform your OBJs to DAEs you can write a simple importer/exporter on OS X to do so — on OS X SceneKit will actually read OBJ files (it's not documented but it works) and will write DAEs.

Or you could download the "Assimp" project on github if you'd like to try to read OBJs yourself, but it's going to be a bit of work getting it into SceneKit objects.

2
votes

Further information regarding the supported file formats:

The following 3D file formats are supported by SceneKit and can be imported to an .scn file using the Scene Editor in Xcode:

DAE, OBJ, Alembic, STL and PLY files.

Source: WWDC 2015 Session "Enhancements to SceneKit" at 02:24