ARSession

309 阅读4分钟

管理与每个AR体验相关的主要任务的对象,如运动跟踪、相机直通和图像分析。

ARSession对象协调ARKit代表您执行的主要进程,以创建增强现实体验。这些过程包括从设备的运动传感硬件读取数据,控制设备的内置相机,以及对捕获的相机图像进行图像分析。会话综合所有这些结果,以在设备居住的现实世界空间与您建模AR内容的虚拟空间之间建立对应关系。

创建会话

每个AR体验都需要一个“ARSession”。如果您实现自定义渲染器,则自己实例化会话。

let session = ARSession()
session.delegate = self

如果您使用标准渲染器之一 (like ARViewARSCNView, or ARSKView), 渲染器为您创建一个会话对象。当您想与应用程序的会话交互时,您可以在应用程序的渲染器上访问它。

let session = myView.session

Run a Session

运行会话需要配置。子类 ARConfiguration 确定ARKit如何跟踪设备相对于现实世界的位置和运动,从而决定您创建的AR体验类型。例如, ARWorldTrackingConfiguration使您能够通过设备的后置摄像头增强用户对周围世界的视图。

配置和运行会话

func run(ARConfiguration, options: ARSession.RunOptions)

使用指定的配置和选项开始会话的AR处理。

var identifier: UUID

正在运行会话的唯一标识符。

struct ARSession.RunOptions

更改AR会话配置时转换其当前状态的选项。

var configuration: ARConfiguration?

为会话定义运动和场景跟踪行为的对象。

func pause()

暂停会话中的处理。

响应事件

var delegate: ARSessionDelegate?

您提供的对象,用于接收捕获的视频图像和跟踪信息,或响应会话状态的变化。

var delegateQueue: DispatchQueue?

会话调用委托方法的调度队列。

protocol ARSessionDelegate

您可以实现从AR会话接收捕获的视频帧图像和跟踪状态的方法。

protocol ARSessionObserver

您可以实现的方法来响应AR会话状态的变化。

管理锚

func add(anchor: ARAnchor)

添加要由会话跟踪的指定锚。

func remove(anchor: ARAnchor)

从会话跟踪中删除指定的锚。

保存或共享状态

func getCurrentWorldMap(completionHandler: (ARWorldMap?, Error?) -> Void)

返回封装世界跟踪会话的空间映射状态和锚集的对象。

Recording and Replaying AR Session Data 

在Reality Composer中录制AR会话,并在ARKit应用程序中重播。

扫描3D对象

func createReferenceObject(transform: simd_float4x4, center: simd_float3, extent: simd_float3, completionHandler: (ARReferenceObject?, Error?) -> Void)

从会话世界空间的指定区域创建一个参考对象(用于3D对象检测)。

更新世界起源

func setWorldOrigin(relativeTransform: simd_float4x4)

使用指定的变换更改AR世界坐标空间的基础。

寻找现实世界的表面

从屏幕上的某个点投射光线,以找到与现实世界表面的交叉点。

func raycast(ARRaycastQuery) -> [ARRaycastResult]

检查一次光线和现实世界表面之间的交叉点。

func trackedRaycast(ARRaycastQuery, updateHandler: ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?

随着时间的推移,重复光线投射查询,以通知您物理环境中更新的表面。

将本地坐标转换为地理坐标

func getGeoLocation(forPoint: simd_float3, completionHandler: (CLLocationCoordinate2D, CLLocationDistance, Error?) -> Void)

将框架局部坐标系统中的位置转换为纬度、经度和高度。

访问相机帧

var currentFrame: ARFrame?

活动相机提要捕获的最新静态帧,包括ARKit对其的解释。

class ARFrame

作为会话的一部分捕获的视频图像,其中包含位置跟踪信息。

管理协作

func update(with: ARSession.CollaborationData)

使用其他用户收集的物理环境信息更新您的会话。

class ARSession.CollaborationData

一个包含用户收集的关于物理环境的信息的对象。

Providing a Session

protocol ARSessionProviding

提供会话的对象。

Setup

Choosing Which Camera Feed to Augment

通过前置或后置摄像头在增强现实体验中为用户环境添加视觉效果。

Managing Session Life Cycle and Tracking Quality

让用户随时了解当前的会话状态,并从中断中恢复。

Displaying an AR Experience with Metal

在相机提要上控制应用程序虚拟内容的渲染。

Configuration Objects

配置增强现实会话以检测和跟踪特定类型的内容。