我使用SCNGeometrySource将ARMeshAnchor数据转换为网格,它工作得很好,但有时3/10我会从SceneKit渲染器获得bad_access。
[![1]][1]
这是因为
ARMeshAnchors
不断更新他们的数据,因为ARKit改进了对现实世界的理解。所有ARMeshAnchors
都是动态锚。然而,他们的网格的后续变化并不打算实时反映。
如果要复制ARMeshAnchors集合,请使用以下代码:
var anchorsArray = [ARMeshAnchor]()
let frame = arView.session.currentFrame
let meshAnchors = frame?.anchors.compactMap { $0 as? ARMeshAnchor }
anchorsArray += meshAnchors!
每个ARMeshAnchor
都与存储在MTLBuffer
中的原始几何数据相连接:
anchorsArray[0].geometry.faces.buffer
anchorsArray[0].geometry.vertices.buffer
anchorsArray[0].geometry.normals.buffer
anchorsArray[0].geometry.classification?.buffer