首页 > 解决方案 > SceneKit:已从 STL 导入的导出网格导致垃圾

问题描述

我正在使用这个 gist将二进制 STL 3d 网格导入 SCNNode,它工作正常(我可以在 SCNView 中查看网格,它看起来不错)。

但是,如果我尝试将(未更改的)网格导出到 STLMDLAsset.export(to: url)SCNScene.write(to: url)OBJ 文件中,则生成的网格会损坏。

如果我加载示例ship.scn场景然后导出到 STL,一切看起来都很好。这让我觉得上面提到的 gist 如何创建 SCNNode 一定有问题,但我不知道它是什么。

实际模型: 在此处输入图像描述 STL/OBJ 导出结果: 在此处输入图像描述

标签: iosswift3dscenekitscenekit-modelio

解决方案


我自己想通了。SCNGeometryElement 的构造函数允许为索引数据传递 nil。虽然这对于在场景中显示网格很好,但至少导出功能和可能框架的其他部分依赖于填充的数据 - 这与人们所期望的相反 - 不是由构造函数自动完成的。所以你需要自己做。幸运的是,还有另一个构造函数使这更容易:

let indices = [UInt32](0..<UInt32(trianglesCounted * 3))
let countedTriangles = SCNGeometryElement(indices: indices, primitiveType: .triangles)

推荐阅读