ARKit:你如何迭代所有检测到的特征点?

Sea*_*son 3 swift arkit

我想对ARKit会话期间在单个帧中找到的每个检测到的特征点进行一些处理.如何迭代每个检测到的特征点,并获得它们的世界坐标?

我正在使用Swift,但Objective-C答案也会很好.

ric*_*ter 7

编辑:在Xcode 9.0 GM(及更高版本)中,points是一个Swift float3矢量数组,所以你可以像任何其他Swift数组一样迭代它:

for point in frame.rawFeaturePoints.points { 
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么:

frame.rawFeaturePoints.points.map { point in 
    ... 
}
Run Code Online (Sandbox Code Playgroud)

或者您最喜欢的阵列/收集算法.


在各种Xcode 9.x测试版中,此属性的Swift Array版本不可用.所以你必须处理底层的ObjC属性,它导入Swift作为一个UnsafePointer,你不能轻易迭代.(因此OP的原始问题.)

如果那个bug再次出现(或者你遇到类似的问题),你可以这样做:

for index in 0..<frame.rawFeaturePoints.count {
    let point = frame.rawFeaturePoints.points[index]
    // do something with point
}
Run Code Online (Sandbox Code Playgroud)