我的目标是将一个对象放在一个房间的arcore平面上,然后我将平面和对象的数据保存在文件中。在app退出并再次启动后,已保存的对象可以从文件加载,然后可以像上次一样显示在同一位置。
为了保持虚拟对象,我们可能可以使用VPS(visual positioning service,尚未发布)来定位具有房间的设备。
但是,在开发人员预览版的ARCore中没有API可以实现这一点。
您可以使用增强图像在ARCore中保存锚点位置。
您所要做的就是将您的对象放在任何您想要的地方,然后返回到更多的Augmented Images
,并将Augmented Images
角落的位置保存到设备中的文本或二进制文件中。
然后在下一个Session中,假设您使用了一个Augmented Image
和4个点(图像的角),您加载这些位置并使用这两组4个点在两个会话之间计算Transformation Matrix
。你需要这个的原因是因为ARCore的坐标系在每个会话中都会根据设备的初始位置和旋转而改变。
最后,您可以使用此转换矩阵计算新会话中锚点的位置和旋转。它将放置在同一物理位置,由Augmented Image
跟踪的准确性引起误差。如果使用更多点,则此误差范围将相对较低。
我已经在每组中测试了4个点,并且考虑到我的锚被放置在没有任何
Trackable
的任意位置上,这是非常准确的。
为了计算转换矩阵,您可以参考this