如何以.DAE格式编程保存ARKIT对象



我正在使用一个应用程序创建一个用户面对的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可以做到。

要点:

  1. 从您的顶点/索引数据创建MDLMesh。对于顶点和纹理坐标数据,这将需要MDLMeshBuffer s,而三角形索引数据则需要MDLSubmesh。或者,如果您已经在Scenekit中拥有网格,请使用MDLMesh(scnGeometry:)进行转换。

  2. 创建一个空的MDLAsset,并将网格添加到子对象中。

  3. 将资产导出到文件。您提供的为编写资产来确定导出的文件格式的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);

相关内容

  • 没有找到相关文章

最新更新