SceneKit:已从 STL 导入的导出网格导致垃圾
Posted
技术标签:
【中文标题】SceneKit:已从 STL 导入的导出网格导致垃圾【英文标题】:SceneKit: export mesh that has been imported from STL results in garbage 【发布时间】:2020-08-19 00:12:40 【问题描述】:我正在使用this gist 将二进制 STL 3d 网格导入 SCNNode,效果很好(我可以在 SCNView 中查看网格,看起来不错)。
但是,如果我尝试使用 MDLAsset.export(to: url)
或 SCNScene.write(to: url)
将(未更改的)网格导出到 STL 或 OBJ 文件,则生成的网格会损坏。
如果我加载示例 ship.scn
场景然后导出到 STL,一切看起来都很好。
这让我觉得上面提到的 gist 如何创建 SCNNode 肯定有问题,但我无法弄清楚它是什么。
实际型号: STL/OBJ 导出的结果:
【问题讨论】:
【参考方案1】:我自己想通了。 SCNGeometryElement 的构造函数允许为索引数据传递 nil。虽然这对于在场景中显示网格很好,但至少导出功能和可能框架的其他部分依赖于填充的数据 - 这与人们所期望的相反 - 不是由构造函数自动完成的。所以你需要自己做。幸运的是,还有另一个构造函数使这更容易:
let indices = [UInt32](0..<UInt32(trianglesCounted * 3))
let countedTriangles = SCNGeometryElement(indices: indices, primitiveType: .triangles)
【讨论】:
以上是关于SceneKit:已从 STL 导入的导出网格导致垃圾的主要内容,如果未能解决你的问题,请参考以下文章