我正在寻找这个问题的技术答案:
ARkit中“真实世界对象”,表面,AR锚点之间有什么区别?
我相信,至于我可以说: 1)ARkit提供3种不同的方法来搜索“真实世界的物体”,表面,AR锚点。
ARSCNView hitTest(_:types :) https://developer.apple.com/documentation/arkit/arscnview/2875544-hittest
ARSKView hitTest(_:types :) https://developer.apple.com/documentation/arkit/arskview/2875733-hittest
ARFrame hitTest(_:types :) https://developer.apple.com/documentation/arkit/arframe/2875718-hittest
我理解要查看视图中显示的SceneKit / SpriteKit内容,您需要使用不同的hitTest方法。
我只是无法理解什么是“真实世界的对象”是vs surface vs AR anchor?
我最好的猜测是:
真实世界的对象: - 我不知道? 表面: - featurePoints - 估计水平平面 -estimatedVerticalPlane AR锚点: ARImageAnchor ARFaceAnchor ARPlaneAnchor
我认为你明白了...... ARKit中的“真实世界对象”是什么?
任何帮助都会很棒。文档似乎真正强调了“实际工作对象或表面”之间的区别。
谢谢 Smartdog 我们都通过分享我们所知道的东西来学习
答案 0 :(得分:3)
我的直觉是,无论是谁编写Apple的文档都会使事情变得模棱两可,因为a)你可以将这些方法用于多种命中测试,而b)ARKit并不真正知道它在看什么。
如果您对任何与平面相关的类型(existingPlane
,estimatedHorizontalPlane
等)进行了点击测试,那么您正在寻找真实的平面。或者更确切地说,您正在寻找ARKit“认为”看起来像平面水平(或垂直,在iOS 11.3及更高版本)表面的东西。那些可能会或可能不会在任何特定时刻准确地反映现实世界的形状,但它们是ARKit的最佳猜测。您搜索的与平面相关的哪种类型决定了您是否获得现有ARAnchor
。
(注意假阴性比假阳性更常见。例如,您可能在ARKit尚未映射桌面角落的位置找不到命中结果,但您不太可能找到飞机命中结果没有相应的真实平面。)
如果你进行了featurePoint
点击测试,那么你正在测试ARKit用户环境的稀疏地图。如果您打开showFeaturePoints
中的ARSCNView
选项,则可以看到此地图 - 在每个视频帧中,它会找到几十到几百个视觉上非常有趣的点(好吧,“有趣”来自特定算法的观点)它可以关联帧之间的2D位置,并使用视差来估计它们与相机的距离和3D空间中的位置。 (反过来,这可以告知ARKit关于设备本身在3D空间中的位置的想法。)
因为“特征点”可以是相机图像中的任何小的高对比度区域,所以它并不真正与任何特定类型的现实世界相关联。如果你正在看一张带有漂亮木纹图案的桌子,你会在桌面上看到很多特征点。如果你正在看一张带有盆栽植物的桌子,你会在桌面上看到一些点,一些在锅上,一些在叶子上...没有足够的点(或CV算法) )真的可以直观地了解植物的形状。但足够的是,如果用户点击其中一个点,你的应用程序可以在那里放置一些3D对象,它可能令人信服地看起来坚持工厂。
因此,在最普遍的意义上,ARKit命中测试是在“现实世界”中寻找某种“对象”(如ARKit所感知的那样),但除非您正在寻找飞机(表面),否则可以'对于“对象”可能是什么更加具体。