ARSession
ARSession(AR会话)是ARKit 中最重要的概念之一,其主要的功能是管理AR应用的状态和整个周期,是ARKit API的主要人口。
ARSession 整合了底层的所有技术并为开发者提供程序界面,这些技术包括从设备运动传感器硬件取数据、捕获摄像头图像数据并进行分析、控制虛拟场景摄像机与硬件设备摄像头的对齐、执行 Sess间与 AR世界空间的转换等。ARSession 综合所有这些信息,在设备所处的现实空间和虚拟空同之师联系。每一个 ARKit 应用都需要且仅需要一个 ARSession,由其向上提供服务。
ARKit 提供了非常多的功能特性,每一个功能特性对软硬件都有??独特的要求(如进行人脸检测的功能和进行2D图像检测识别的功能对硬件及前置需求均不一样),因此当应用序需要使用,某项功能时 应改提前进行配置。负责功能配置的为配置信息类ARCoofiguratiom配置信息决定了 ARKit如何使用硬件、可以使用的功能集及更多其他细节。如 ARWorldTrackingConfiguran 允许用户使用后置摄像头以6DOF的模式开启运动追踪。
利用ARSeuion 可以检测设备是否支持 ARKi 及支持的功能子集,可以在运行时检測 ARKit的定
跟踪状态,并可根据需要暂停、停止、重启 ARSession 进程。
ARAnchor
ARAnchor(AR 锚点)也是 ARKit 中最重要概念之一,任何需要锚定到现实空间、现实2D图像、现業3D 物体、人体、人脸的虚拟对象都需要通过特定的锚点连接,另外,共享 AR 体验也必须通过 ARAnchor 实现。在后续的学习中,还会详细讲述 ARAnchor,现在需要知道的是,不通过锚点就无法将虛拟元素,處拟对象添加到场景中。
1. 锚点
锚点(Anchor)的原意是指不让船舶漂移的固定锚,这里用来指将虚拟物体固定在AR空间上的一种技术。由于跟踪使用的陀螺仪传感器的特性,误差会随着时间积累,所以需要通过图像检测技术修正误差,此时,如果已存在于空间中的虚拟对象不同步进行校正则会出现偏差,锚点的功能即是绑定虚拟物体与 AR空间位置。被赋予锚点的对象将被视为固定在空间上的特定位置,并自动进行位置校正,锚点可以确保物体在空间中保持相对位置和方向,将虚拟物体固定在AR场景中。
锚点的种类
为了好地表达舖点的性质及其附帶信息,ARKit 将 ARAnchor 分为9类,
ARFrame
运行中的ARSesion会从设备报像头中采集视频图傻流,并利用这些视教图像流进行分析以评估用户设备的姿态和进行其他视觉计算,这些视频图像流会以帧(Frame)的形式进行更新,ARKit 也以 ARFrame的形式向用户提供这些信息。
ARFrame(AR 帧)最直观的理解是摄像头获取的一帧图像,ARKit 背景渲染的画面就来自摄像头获取的图像帧。但在 ARKit 中,ARFrame 还包含更丰富的内容,它提供了某一个时刻的AR状态,这些状态包括:当前 Frame 中的环境光照信息(如在渲染虚拟物体的时候根据光照控制虚拟物体绘制的颜色,使其更真实);WorldMap 状态;当前场景的参数;当前 Frame 中检测到的特征点云及其姿态;当前 Frame 中包含的Anchors 和检测到的平面集合;手机设备当前的姿态、帧获取的时间戳、AR 跟踪状态和摄像头的视矩阵等。
ARFrame 也构成了 AR应用使用者可见的场景,是 ARKit 与使用者交互的窗口。
示例代码--显示世界坐标系和检测到的平面
struct AnchorGeometryView : View { var body: some View { return ARViewContainer7().edgesIgnoringSafeArea(.all) } } struct ARViewContainer7: UIViewRepresentable { func makeUIView(context: Context) -> ARView { let arView = ARView(frame: .zero) let config = ARWorldTrackingConfiguration() config.planeDetection = [.vertical,.horizontal] arView.session.run(config, options:[ ]) arView.debugOptions = [.showAnchorGeometry,.showAnchorOrigins,.showFeaturePoints,.showPhysics] return arView } func updateUIView(_ uiView: ARView, context: Context) { } }