我正在考虑开发一款ARKit应用程序,但在决定购买iPhone之前,我想问两个对我来说至关重要的问题。如果已经有人问过这个问题,请告诉我,因为我无法在网上找到它。
问题: 1.让我们说运动跟踪丢失(例如,当指向白墙时),然后再次恢复。它是在同一参照系中本地化还是从头开始?还有,锚被保留了吗? 2.让我们说暂停会话,然后再次运行(例如,离开应用程序,然后再回来)。是否在暂停之前将其本地化回到参考框架?还有,锚被保留了吗?
我问这个是因为我知道本地化在ARCore中不起作用,我想知道它在ARKit中的状态。
谢谢!
答案 0 :(得分:2)
ARKit有两到三种失去跟踪的方法(取决于你对它们的看法);每个都对锚点有不同的影响。
(老实说,在这个词的中间,我已经摸索着锁定了。我的键盘正在为我制造双关语!)
在你提到的第一种情况下,以及类似的情况 - 指向一堵空白的墙壁,让手机突然推挤,从黑暗的区域移动到明亮的光线,反之亦然 - 你的应用程序会收到有关ARKit {{{{ 3}}会影响相机姿势跟踪的质量。
当跟踪状态为limited
时,ARKit对世界所在位置的想法可能与现实世界不同步,但它仍然有足够的信息可以在情况发生时重新定位。这包括锚点。 (试试自己;运行Apple的ARKit示例代码项目之一,并在移动手机的同时覆盖相机镜头。)
如果影响跟踪状态的任何情况持续很长时间,重定位不太可能成功。它可以帮助您跟踪有限跟踪的时间长度,并为用户提供一种方法来重新启动会话,如果事情变得非常糟糕。
如果发生某些事情会中断ARKit接收相机和动作数据的能力 - 例如iPhone上的来电电话屏幕,或响应交互式通知的用户,您的应用会收到tracking state消息。除了等待相应的sessionWasInterrupted
消息之外,在这种情况下您无法做任何事情(就会话管理而言)。
如果中断很短暂且设备自那以后没有移动太多,则可能会自动重新定位。当然,由于运动跟踪已关闭,您无法确定设备的移动量...您可以根据中断的持续时间以及AR体验对跟踪精度的敏感程度进行有根据的猜测,并相应地决定是否重新启动会话。 (例如,有空间入侵者漂浮在空中的游戏受到的影响小于允许用户通过标记墙壁来追踪平面图的应用程序。)
除此之外:传统的iOS UI模式(如模态视图控制器,选项卡视图和导航控制器)可以推动托管AR会话的视图,中断会话并丢失跟踪。就像Apple的
sessionInterruptionEnded
建议的那样,使用popover视图这样的东西会很好,这样你就可以在屏幕上保持AR体验并运行会话。
当您执行Human Interface Guidelines for AR时,您可以选择是保留锚点还是重置跟踪。如果你已经失去了本地化,这真正意味着你是否在他们定义的任意坐标空间中跟踪锚点(即使该空间不再与现实世界对齐),或者只是失去所有锚。
尽管没有重启会话,但没有什么能够导致锚被删除。如果您暂时失去跟踪以进行重定位,那么跟踪现实世界对象(即,平面锚点,而不是您手动创建的对象)的锚点应调整回实际位置,即使坐标系不完全相同以前的方式。