ARFrame

472 阅读4分钟

会话期间捕捉的、带有位置跟踪信息的视频图像。

正在运行的会话不断从设备摄像头中捕获视频帧,而ARKit则对其进行分析,以估计用户在世界上的位置。ARKit还以“ARFrame”的形式并以应用程序帧速率的频率向您提供此信息。

您的应用程序有两种接收“ARFrame”的方式:


[`ARSCNView`] [`ARSKView`]



let session = ARSession()
session.delegate = self
session.currentFrame

# ARSCNView​Delegate

您可以实现的方法来中介SceneKit内容与AR会话的自动同步

[`func renderer(SCNSceneRenderernodeFor: ARAnchor) -> SCNNode?`](https://developer.apple.com/documentation/arkit/arscnviewdelegate/2865801-renderer)

要求委托提供与新添加的锚相对应的SceneKit节点

[`func renderer(SCNSceneRenderer, didAdd: SCNNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arscnviewdelegate/2865794-renderer)

告诉委托人,与新AR锚对应的SceneKit节点已添加到场景中

[`func renderer(SCNSceneRenderer, willUpdate: SCNNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arscnviewdelegate/2865792-renderer)

告诉委托人,SceneKit节点的属性将进行更新,以匹配其相应锚的当前状态 

[`func renderer(SCNSceneRenderer, didUpdate: SCNNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arscnviewdelegate/2865799-renderer)

告诉委托,SceneKit节点的属性已更新,以匹配其相应锚的当前状态 

[`func renderer(SCNSceneRenderer, didRemove: SCNNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arscnviewdelegate/2865795-renderer)

告诉委托,与已删除的AR锚相对应的SceneKit节点已从场景中删除

# ARSKView​Delegate
您可以实现的方法来调解SpriteKit内容与AR会话的自动同步

[`func view(ARSKView, nodeFor: ARAnchor) -> SKNode?`](https://developer.apple.com/documentation/arkit/arskviewdelegate/2865596-view)

要求委托提供与新添加的锚相对应的SpriteKit节点

[`func view(ARSKView, didAdd: SKNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arskviewdelegate/2865588-view)

告诉委托人,与新AR锚对应的SpriteKit节点已添加到场景中

[`func view(ARSKView, willUpdate: SKNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arskviewdelegate/2865591-view)

告诉委托人,SpriteKit节点的属性将更新,以匹配其相应锚的当前状态

[`func view(ARSKView, didUpdate: SKNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arskviewdelegate/2865590-view)

告诉委托人,SpriteKit节点的属性已更新,以匹配其相应锚的当前状态

[`func view(ARSKView, didRemove: SKNode, for: ARAnchor)`](https://developer.apple.com/documentation/arkit/arskviewdelegate/2865594-view)

告诉委托人,与AR锚点对应的SpriteKit节点已从场景中删除


  • 让你的一个物体成为 delegate of an ARSession 在ARKit捕获新帧时自动接收它们。

每个帧都可以包含基于 frameSemantics 你为你的会话选择 ARConfiguration.

访问相机数据

var camera: ARCamera

有关用于捕捉帧的相机位置、方向和成像参数的信息。

var capturedImage: CVPixelBuffer

包含相机捕获的图像的像素缓冲区。

var timestamp: TimeInterval

拍摄帧的时间。

var cameraGrainIntensity: Float

指定相机纹理中存在的纹理数量的值。

var cameraGrainTexture: MTLTexture?

ARKit创建的可瓷砖金属纹理,以匹配当前视频流的视觉特征。

访问场景数据

var lightEstimate: ARLightEstimate?

基于相机图像的照明条件估计。

func displayTransform(for: UIInterfaceOrientation, viewportSize: CGSize) -> CGAffineTransform

返回一个仿射变换,用于在归一化图像坐标和适合在屏幕上渲染相机图像的坐标空间之间转换。

var rawFeaturePoints: ARPointCloud?

ARKit用于执行世界跟踪的场景分析的当前中间结果。

var capturedDepthData: AVDepthData?

在前置摄像头体验中捕获的深度数据。

var capturedDepthDataTimestamp: TimeInterval

捕获帧深度数据(如果有的话)的时间。

var sceneDepth: ARDepthData?

关于AR体验中设备后置摄像头与现实世界物体之间距离的数据。

var smoothedSceneDepth: ARDepthData?

设备后置摄像头与现实世界物体之间的距离测量平均值,可在增强现实体验中创建更流畅的视觉效果。

与现实世界的跟踪和互动

var anchors: [ARAnchor]

代表场景中跟踪的位置或检测到的对象的锚列表。

func raycastQuery(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery

获取屏幕点的光线投射查询。

检查世界映射状态

var worldMappingStatus: ARFrame.WorldMappingStatus

为该框架生成或重新定位世界地图的可行性。

enum ARFrame.WorldMappingStatus

描述ARKit如何彻底映射给定帧中可见区域的可能值。

case notAvailable

没有可用的世界地图。

case limited

世界跟踪尚未充分映射当前设备位置周围的区域。

case extending

世界跟踪已经映射了最近访问的区域,但仍然在围绕当前设备位置进行映射。

case mapped

世界跟踪已经充分绘制了可见区域的地图。

检查人员

var detectedBody: ARBody2D?

ARKit在相机图像中识别的主体的屏幕位置信息。 

class ARBody2D

ARKit在相机提要中识别的人的屏幕空间表示。

var segmentationBuffer: CVPixelBuffer?

包含像素信息的缓冲区,该缓冲区标识了相机提要中用于遮挡虚拟内容的对象形状。

var estimatedDepthData: CVPixelBuffer?

一个缓冲区,表示相机提要中用于遮挡虚拟内容的估计深度值。

enum ARFrame.SegmentationClass

像素的分类,定义了用于遮挡应用程序虚拟内容的内容类型。

case person

分割缓冲区中像素作为人的一部分的分类。

case none

将分割缓冲区中的像素分类为未识别。

评估地理跟踪状况

var geoTrackingStatus: ARGeoTrackingStatus?

会话捕获帧时的地理跟踪条件。

class ARGeoTrackingStatus

地理跟踪当前状况可能存在的状态、准确性和原因。