Understanding Augmented Reality
Overview
任何AR的经验和arkit定义特征的基本要求是能够创建和跟踪对应的真实空间之间的用户在和一个虚拟的空间里你可以模型视觉内容。当你的应用程序显示的内容与现场摄像头图像,用户体验增强现实:幻想,你的虚拟内容是真实世界的一部分
How World Tracking Works
创建一个现实和虚拟空间之间的对应关系,arkit使用的技术称为视觉惯性测距。这个过程结合了从iOS设备的运动传感硬件与设备的摄像头可见的场景的计算机视觉分析的信息。arkit识别显著特征的场景图像,跟踪在视频帧之间的特征差异的位置,该信息与运动传感数据比较。其结果是一个高精度的设备的位置和运动模型。
世界跟踪还分析和理解场景的内容。使用命中测试方法(参见
ARHitTestResult
类)找到对应于相机图像中某个点的真实世界的表面。如果启用
planeDetection
在您的会话配置设置,ARKit检测平面在相机的图像和报告他们的位置和尺寸。您可以使用命中测试结果或检测到的飞机放置或与您的场景中的虚拟内容交互
Best Practices and Limitations
世界跟踪是一门不精确的科学。这个过程往往会产生令人印象深刻的准确性,导致现实的AR经验。然而,它依赖于设备的物理环境的细节并不总是一致的或难以实时测量没有一定程度的错误。要建立高质量的AR体验,请注意这些警告和提示。
设计可预见照明条件的AR经验。世界跟踪涉及图像分析,需要清晰的图像。当相机看不到细节时,跟踪质量降低,例如当相机指向空白的墙壁或场景太暗时。
使用跟踪质量信息提供用户反馈。世界跟踪相关的图像分析与设备的议案。arkit开发更好的了解现场,如果设备是移动的,即使设备只能移动微妙。过大的运动过快、过快或晃动过猛会导致模糊图像或太多的距离用于跟踪视频帧之间的特征,降低跟踪质量。这个
arcamera
类提供跟踪状态原因信息,您可以使用它来开发用户界面,该用户界面告诉用户如何解决低质量的跟踪情况。
允许平面检测的时间产生明确的结果,并禁用平面检测时,你有你需要的结果。平面检测结果随时间变化时,首先检测到的平面,其位置和程度可能是不准确的。当飞机仍在现场,随着时间的推移,arkit提炼其位置和程度的估计。当一个大的平面是在现场,arkit可能继续变平面锚的位置、程度,当你已经用飞机把内容变换。
ARSession
一个arsession物体坐标的主要过程,arkit执行代表您创建一个增强现实体验。这些过程包括读取数据从设备的运动传感硬件,控制设备的内置摄像头,并对捕获的相机图像进行图像分析。该会话综合所有这些结果,以建立真实世界的空间,设备栖息和虚拟空间,你模型AR内容之间的对应关系。
每一个AR体验了arkit需要一个单一的arsession对象。如果你使用
arscnview
或
arskview
对象容易建立你的AR的视觉体验的一部分,视图对象包括arsession实例。如果你的AR内容建立你自己的渲染器,你就需要实例化并保持arsession对象自己。
运行会话需要会话配置:
arsessionconfiguration
类或其子类
arworldtrackingsessionconfiguration
。这类决定如何arkit跟踪设备的位置和运动的相对真实的世界,从而影响你可以创建AR体验的种类。
Topics
Configuring and Running a Session
-runWithConfiguration:options:
使用指定的配置和选项启动会话的AR处理。
Parameters
configuration:定义会话的运动和场景跟踪行为的对象。
options:如何影响现有会话状态(如果有的话)转换到新配置的选项。
如果会话第一次运行,此参数没有影响。
Discussion:该会话跟踪设备的运动,捕捉和处理场景从设备摄像头图像,并与您的坐标delegateobject orARSCNVieworARSKView仅在运行时查看。
在已开始立即转换到新会话配置的会话上调用此方法。选项参数决定如何将现有会话状态转换到新配置。默认情况下,会话将从上次已知状态恢复设备位置跟踪,并保留添加会话的任何锚点。调用此方法后,会话将异步运行。
ARSessionRunOptions
当更改其配置时,影响如何转换AR会话当前状态的选项
Topics
ARSessionRunOptionResetTracking
该会话不继续从先前配置的设备位置/运动跟踪。
Declaration
ARSessionRunOptionResetTracking= (1 << 0)
Discussion
默认情况下,当您调用runwithconfiguration:选项:方法在已运行或正在运行的会话上,会话将从其最后一个已知状态恢复设备位置跟踪。(例如,一个aranchor对象保持其相对于摄像机的明显位置。
runwithconfiguration:选项:方法具有与会话当前配置相同类型的配置,可以使用此选项强制设备位置跟踪返回初始状态。
当你呼唤runwithconfiguration:选项:方法与会话当前配置的不同类型的配置,会话总是重置跟踪(也就是说,这个选项是隐式启用)
ARSessionRunOptionRemoveExistingAnchors
任何与前一配置中的会话相关的锚点对象将被移除
Declaration
ARSessionRunOptionRemoveExistingAnchors= (1 << 1)
默认情况下,当您调用runwithconfiguration:选项:在已运行或正在运行的会话的方法上,会话将保留任何aranchor以前添加的对象。也就是说,AR场景中的对象保持相对于设备的真实真实位置(除非启用arsessionrunoptionresettracking选项)。
如果更改会话配置应该无效在AR场景明显的物体的真实位置使arsessionrunoptionremoveexistinganchors选项。例如,如果您向AR场景添加了虚拟内容,其位置与真实世界的对象相关,请移除这些锚,以便重新评估适当的真实位置。另一方面,如果在场景中的虚拟内容需要跟踪真实世界的位置,只有当该内容第一次出现,并可以自由移动后,您可以禁用此选项,以保持锚。
configuration
定义会话的运动和场景跟踪行为的对象。
Declaration
@property(nonatomic, copy, readonly)ARSessionConfiguration*configuration;
-pause
会话中的暂停处理
Declaration
- (void)pause;
Discussion
暂停时,该会话不跟踪设备的运动或捕捉场景图像,也不配合其delegate object或更新任何关联arscnview或arskview对象。
Responding to AR Updates
delegate
您提供的对象,用于接收捕获的视频图像和跟踪信息,或响应会话状态的更改。
如果你使用arscnview或arskview类来显示AR体验,不需要会话委派。这些观点自动显示捕获的视频图像和坐标SceneKit或SpriteKit内容跟踪装置和摄像机运动。
如果使用金属或其他渲染技术创建AR可视化,请设置会话委托。您的委托对象定期接收arframe会话捕获的对象。这些对象包含视频帧图像供您显示和AR场景信息,您可以使用坐标显示您渲染的场景元素。
delegateQueue
通过会话调用委托方法的调度队列。
Discussion
如果此值为nil(默认值),则会话将在主队列上调用委托方法。
ARSessionDelegate
方法可以实现从AR会话接收捕获的视频帧图像和跟踪状态。
...
ARSessionObserver
方法可以实现响应于AR会话状态的更改。
Displaying and Interacting with AR Content
currentFrame
视频帧图像,与相关的AR场景信息,最近捕获的会话。
-addAnchor:
添加由会话跟踪的指定锚点。
-removeAnchor:
移除由会话跟踪的指定锚点。
Instance Methods
-runWithConfiguration: