我曾经在IOS上使用openGL和metal渲染3d场景,我使用的文件格式是OBJ和CTM。这些天我正在尝试Scene Kit。看来SceneKit只加载DAE文件。我在互联网上找到的所有演示都使用DAE文件,我无法在其代码中看到顶点和刻面的数组。 如何加载OBJ文件或CTM文件而不是DAE文件?
答案 0 :(得分:5)
就像向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)
你可以通过编写自己的导入程序来做到这一点。请查看SCNGeometry
,SCNGeometrySource
和SCNGeometryElement
。
编辑:启动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文件。
答案 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有示例代码。