ARAnchor

物理环境中某个关注物体的位置和方向

声明

class ARAnchor : NSObject

概述

为了追踪与摄像头相关的真实或者虚拟物体的静态位置和方向,创建锚点对象并通过add(anchor:) 方法将其添加到你的AR会话中。

提示

添加锚点到会话中可以帮助ARKit来优化锚点附近的世界追踪的准确性,因此虚拟物体江湖出现并停留在真实世界中的相关位置。

一些ARKit特性将会自动添加特殊的锚点到会话中。当你开启相应的特性时,世界追踪会话便会添加ARPlaneAnchor, ARObjectAnchor, 和 ARImageAnchor 对象;人脸识别会话将会添加ARFaceAnchor 对象。

子类相关

如果你要额外创建你自己的ARAnchor实例来追踪你的虚拟内容在真实世界的位置时,你可以同样将ARAchor子类化来将自定义数据和你创建的锚点关联起来。当ARKit更新帧或者在一个ARWorldMap 中保存和加载锚点时,请确保你的锚点类工作正常:

  • 锚点子类必须满足ARAnchorCopying 协议的所有需求。ARKit调用init(anchor:) (通过一个后台线程)来从每一个ARFrame 拷贝你的锚点类到下一个。你的初始化方法的实现需要拷贝你添加的子类的所有自定义属性的值。
  • 锚点的子类必须同样采用NSSecureCoding 协议。通过重写encode(with:)init(coder:) 方法,当ARKit保存和加载一个世界地图时,来保存和恢复你的子类的自定义属性的值。
  • 锚点,基于他们的identifier 属性,被认为是平等的。
  • 当你保存一个世界地图时,只有没有采用ARTrackable 的买点会被包含进去。

主题

创建锚点

init(transform: simd_float4x4) 通过一个指定的transform参数来创建一个新的锚点对象

init(name: String, transform: simd_float4x4) 通过一个指定的transform参数和一个描述名称参数来创建一个新的锚点

var name: String? 锚点的描述名称


追踪锚点

var identifier: UUID 锚点的标识符

var sessionIdentifier: UUID? 拥有此锚点的会话的唯一标识符

var transform: simd_float4x4 编码了与锚点相对于其所处的AR会话的世界坐标系的位置、方向和大小的矩阵


子类

protocol ARAnchorCopying 自定义ARAnchor 子类的支持

protocol ARTrackable 一个真实世界场景中的对象用于ARKit追踪其位置和方向的变化

ARPlaneAnchor

ARKit在物理环境中检测到的一个2D平面

声明

class ARPlaneAnchor : ARAnchor

概述

当你在AR会话中启用planeDetection 后,ARKit将后置摄像头观察到的所有表面通知你给的app。每遇到一个独立的表面,ARKit都会调用代理的session(_:didAdd:) 并传入一个ARPlaneAnchor 参数。每一个平面锚点都提供了表面的细节,例如它的真实世界位置和形状。

主题

方向

var alignment: ARPlaneAnchor.Alignment 检测到平面的相对于重力的一般方向。

enum ARPlaneAnchor.Alignment 描述检测到平面的相对于重力的一般方向可能的值。

几何

var geometry: ARPlaneGeometry 表示检测平面总体形状的粗三角网格。

class ARPlaneGeometry 一个用来描述真实世界中一个被检测平面的形状的3D网格。

class ARSCNPlaneGeometry 平面2D形状的SceneKit表示,与AR会话中的平面检测结果一起使用。

维度

var center: simd_float3 平面相对于其锚点位置的中心点

var extent: simd_float3 平面的预估长度与宽度

分类一个平面

class var isClassificationSupported: Bool 一个用来判断当前设备是否支持平面分类的布尔值。

var classification: ARPlaneAnchor.Classification 平面锚点表示了一个哪种真实世界表面的一般特征

enum ARPlaneAnchor.Classification 平面锚点表示的真实世界表面的所有可能特征