已经是第7章节了,终于可以开始正式接触到我们梦寐以求的ARCore了,相信大家应该都有一点点小激动了吧。那么下面我们就开始讲解如何进行ARCore的开发。
一、Session简介
初看到Session,大家都摸不到头脑。最直接的解释,它是ARCore API的一个类com.google.ar.core.Session。它管理了AR系统的状态,有自己的生命周期,开始和停止访问摄像头图像帧的获取。
所管理AR系统状态,包含跟踪的Anchor信息、通过session.add(Pose)和session.removeAnchor(anchors)保存和删除。session.getAllPlanes()返回被检测到的平面、当前投影矩阵等。
当ARCore App退至后台,Activity调用onPause()方法时,也需要通过session.pause()暂停Session,来停止摄像机的图像获取并获取资源。在App呈现在前台的时候,onResume()方法中调用session.resume(Config)可以重新启用Session,获取摄像机图像等。
有了平面和虚拟内容位置等信息进行渲染。但是当手机的位置移动的时候,我们是如何保持绘制内容的“位置不变”的呢?这都是基于ARCore系统不断返回的图像帧、设备位置和朝向等信息。调用session.update()方法来获取最新的相机帧,更新设备的位置,更新被跟踪的Anchor信息,更新被检查的平面。
二、Config简介
Config,即ARCore API中com.google.ar.core.Config,保存了用于配置Session的设置。那么这个配置中都包含了什么呢?
- 光线评估子系统的行为Config.LightingMode,包含开启或者禁止光线评估。
- 平面检测子系统的行为Config.PlaneFindingMode,包含开启和禁止平面检测。
- update()的行为Config.UpdateMode。在大多数设备中,摄像头被配置每秒捕捉30帧。当调用update()从摄像机获取帧的时,没有新的相机图片包含两种行为:立即分会和阻塞等待。
另外前面提到过目前并不是所有设备都支持ARCore,session.isSupport(config)方法就能完成当前设备是否支持该ARCore的配置。