我正在使用一个应用程序创建一个用户面对的3D网格。我成功地生成了用户面对的数据。
我想以.dae格式进行程序上保存此数据,以便我可以导出.DAE文件,在Blender等3D软件中进行编辑,而不是在我的iPhone中进一步导入它,并在我的iPhone中进行导入并在castenceview中显示该文件。
长话短说,我希望以.dae格式将数据保存。我无法在Internet上找到有关此的任何内容。
如果有另一种方法,请告诉我。
Scenekit不会在iOS中本地读取或编写DAE格式。(SceneKit仅在MacOS中读取/写入DAE。当您在应用程序的捆绑资源中运送DAE时,Xcode在构建时间将其转换为iOS优化的格式。(
从iOS中导出网格到常见文件格式的最佳选择是型号I/O。该框架支持几种格式,但不支持DAE。如果您只是想输出Arkit生成的ARFaceGeometry
网格,那么您实际上并不需要比OBJ更复杂的格式,并且Model I/O可以做到。
要点:
-
从您的顶点/索引数据创建
MDLMesh
。对于顶点和纹理坐标数据,这将需要MDLMeshBuffer
s,而三角形索引数据则需要MDLSubmesh
。或者,如果您已经在Scenekit中拥有网格,请使用MDLMesh(scnGeometry:)
进行转换。 -
创建一个空的
MDLAsset
,并将网格添加到子对象中。 -
将资产导出到文件。您提供的为编写资产来确定导出的文件格式的URL的文件名扩展名,因此,如果要编写OBJ文件,请使用" .OBJ"文件名。
您可以尝试以下代码:
let scene2 = sceneView.scene
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let timeInterval = Date().timeIntervalSince1970 * 1000
let filename = String(format: "test_%d.dae", timeInterval)
let exportUrl = documentsPath.appendingPathComponent(filename)
scene2.write(to: exportUrl, options: nil, delegate: nil, progressHandler: nil);