会话期间捕捉的、带有位置跟踪信息的视频图像。
正在运行的会话不断从设备摄像头中捕获视频帧,而ARKit则对其进行分析,以估计用户在世界上的位置。ARKit还以“ARFrame”的形式并以应用程序帧速率的频率向您提供此信息。
您的应用程序有两种接收“ARFrame”的方式:
- Request the
currentFramefrom anARSession如果您的应用程序保持自己的渲染循环,或者您需要在ARSCNViewDelegateorARSKViewDelegatecallback.
[`ARSCNView`] [`ARSKView`]
let session = ARSession()
session.delegate = self
session.currentFrame
# ARSCNViewDelegate
您可以实现的方法来中介SceneKit内容与AR会话的自动同步。
[`func renderer(SCNSceneRenderer, nodeFor: 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节点已从场景中删除。
# ARSKViewDelegate
您可以实现的方法来调解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节点已从场景中删除。
每个帧都可以包含基于 frameSemantics 你为你的会话选择 ARConfiguration.
访问相机数据
有关用于捕捉帧的相机位置、方向和成像参数的信息。
var capturedImage: CVPixelBuffer
包含相机捕获的图像的像素缓冲区。
拍摄帧的时间。
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
捕获帧深度数据(如果有的话)的时间。
关于AR体验中设备后置摄像头与现实世界物体之间距离的数据。
var smoothedSceneDepth: ARDepthData?
设备后置摄像头与现实世界物体之间的距离测量平均值,可在增强现实体验中创建更流畅的视觉效果。
与现实世界的跟踪和互动
代表场景中跟踪的位置或检测到的对象的锚列表。
获取屏幕点的光线投射查询。
检查世界映射状态
var worldMappingStatus: ARFrame.WorldMappingStatus
为该框架生成或重新定位世界地图的可行性。
enum ARFrame.WorldMappingStatus
描述ARKit如何彻底映射给定帧中可见区域的可能值。
没有可用的世界地图。
世界跟踪尚未充分映射当前设备位置周围的区域。
世界跟踪已经映射了最近访问的区域,但仍然在围绕当前设备位置进行映射。
世界跟踪已经充分绘制了可见区域的地图。
检查人员
ARKit在相机图像中识别的主体的屏幕位置信息。
ARKit在相机提要中识别的人的屏幕空间表示。
var segmentationBuffer: CVPixelBuffer?
包含像素信息的缓冲区,该缓冲区标识了相机提要中用于遮挡虚拟内容的对象形状。
var estimatedDepthData: CVPixelBuffer?
一个缓冲区,表示相机提要中用于遮挡虚拟内容的估计深度值。
enum ARFrame.SegmentationClass
像素的分类,定义了用于遮挡应用程序虚拟内容的内容类型。
分割缓冲区中像素作为人的一部分的分类。
将分割缓冲区中的像素分类为未识别。
评估地理跟踪状况
var geoTrackingStatus: ARGeoTrackingStatus?
会话捕获帧时的地理跟踪条件。
地理跟踪当前状况可能存在的状态、准确性和原因。