ARKit 只检测地板来放置物体
ARKit only detect floor to place objects
在 ARKit 中我可以使用 hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent
如果您想将对象放置在例如tables as types:ARHitTestResultTypeExistingPlaneUsingExtent
将仅检测检测到的平面范围内的命中。
如果你想把物体放在地板上,它就没那么有用了,因为你需要四处走动,直到 ARKit 在你的地板上放置(或扩展)了很多平面。
ARHitTestResultTypeExistingPlane
解决了这个问题,因为您只需要检测到地板上的一小块区域,就可以在任何地方放置物体。然而,问题是一旦 ARKit 检测到另一个与地板不对应的平面(例如 table),每个对象都会被放置在更高的表面上。
是否可以控制哪些平面用于命中测试?
命中测试方法return 多个结果,按与相机的距离排序。如果您正在对具有无限范围的现有平面进行命中测试,您应该在您描述的情况下看到至少两个结果:首先是 table/desk/etc,然后是地板。
如果您特别想要地板,有两种方法可以找到它:
如果您已经知道哪个 ARPlaneAnchor
是您之前会话的地板,请在命中测试结果数组中搜索 anchor
匹配的地板。
假设地板始终是离相机最远的平面(数组中的最后一个)。在大多数情况下可能是一个安全的假设,但要注意阳台、玄关等。
在 ARKit 中我可以使用 hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent
如果您想将对象放置在例如tables as types:ARHitTestResultTypeExistingPlaneUsingExtent
将仅检测检测到的平面范围内的命中。
如果你想把物体放在地板上,它就没那么有用了,因为你需要四处走动,直到 ARKit 在你的地板上放置(或扩展)了很多平面。
ARHitTestResultTypeExistingPlane
解决了这个问题,因为您只需要检测到地板上的一小块区域,就可以在任何地方放置物体。然而,问题是一旦 ARKit 检测到另一个与地板不对应的平面(例如 table),每个对象都会被放置在更高的表面上。
是否可以控制哪些平面用于命中测试?
命中测试方法return 多个结果,按与相机的距离排序。如果您正在对具有无限范围的现有平面进行命中测试,您应该在您描述的情况下看到至少两个结果:首先是 table/desk/etc,然后是地板。
如果您特别想要地板,有两种方法可以找到它:
如果您已经知道哪个
ARPlaneAnchor
是您之前会话的地板,请在命中测试结果数组中搜索anchor
匹配的地板。假设地板始终是离相机最远的平面(数组中的最后一个)。在大多数情况下可能是一个安全的假设,但要注意阳台、玄关等。