ARKit部分API翻译
说明:学习AR查阅API翻译的,有点粗糙,个人笔记,别吐槽
目录
- ARSessionDelegate
- ARSession
- SCNGeometry
- ARAnchor
- ARSCNViewDelegate
- ARPlaneAnchor
- automaticallyUpdatesLighting
- lightEstimationEnabled
ARSessionDelegate
介绍
这个代理主要是实现了接受视频帧画面和从AR session跟踪状态
综述
如果你需要直接处理通过ARAnchor对象的会话设置的捕获的ARFrame对象,就实现这个协议。
代表性的,当你为了展示AR内容,你可以用这个协议
如果你用SceneKit显示内容或SpriteKit ARSCNViewDelegate和ARSKViewDelegate协议提供类似的信息和与这些技术集成。
这个协议扩展了 ARSessionObserver protocol,所以你的ARSessionDelegate也可以实现那些方法(ARSessionObserver 协议)去改变session的状态
协议方法
- 接受相机的frame
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame;
提供相机捕获的最近的图像和附带AR信息
相机移动就会调用这个方法
- 处理内容更新
- (void)session:(ARSession *)session didAddAnchors:(NSArray<ARAnchor *> *)anchors
{
NSLog(@"添加锚点");
}
- (void)session:(ARSession *)session didUpdateAnchors:(NSArray<ARAnchor*>*)anchors
{
NSLog(@"刷新锚点");
}
- (void)session:(ARSession *)session didRemoveAnchors:(NSArray<ARAnchor*>*)anchors
{
NSLog(@"移除锚点");
}
ARSession
- 介绍
继承NSObject
一个管理类,为了增强现实,负责管理设备相机和运动跟踪的需求
- 概述
ARSession对象协调的ARKit展示增强现实体验的主要流程。
这些流程包括:从设备的运动传感硬件获取数据,控制设备的内置摄像头,并处理分析相机捕获的图形。
基于以上的功能,session会综合的创建一个在真实世界和虚拟世界内容上的通讯。
执行一个session需要会话配置, ARConfiguration 或者 ARWorldTrackingConfiguration
这些配置决定了ARKit怎么去设备的位置和移动
- 方法
配置并跑起session
开始与指定ARKit处理会话配置和选择。
- (void)runWithConfiguration:(ARConfiguration *)configuration options:(ARSessionRunOptions)options;
方法参数
configuration:配置
options:选择影响现有会话状态(如果有的话)过渡到新的配置。
如果session是为了第一次run,那这个没啥影响
SCNGeometry
介绍
继承NSObject
一个三维形状(也称为一个模型或网格),可以显示在一个场景中,附加材料定义其外观。
概述
在SceneKit,几何图形附加到SCNNode对象形成一个场景的可见的元素,和SCNMaterial对象附加到几何确定它的外观。
处理Geometry对象
用node 和 material控制一个在场景中的几何体(Geometry)的外貌
通过SceneKit,一个Geometry对象提供了可见对象的形状
你可以为一个几何体平面指定颜色和材料,控制它去配合灯光,并通过附加材料去指定效果
安置并且确定一个几何体的方向,
ARAnchor
继承NSObject
实现NSCopying
介绍
一个真实世界的位置和方向,可以用于将对象放置到AR场景(AR场景中物体的锚点)
概述
相对于相机,去追踪真实或者虚拟的对象,创建一个锚点对象,并且使用 addAnchor:方法去添加他们到你的AR场景中
当 ARWorldTrackingConfiguration *arConfig.planeDetection = ARPlaneDetectionHorizontal;,ARKit也会自动的添加anchors(也就是ARKit会自动捕捉平面)
方法
- 创建自定义的Anchors
- initwithTransform:
使用特定的transform创建锚点
- (instancetype)initWithTransform:(matrix_float4x4)transform;
参数:
属性
- 追踪锚点
// 锚点独一无二的标识
@property(nonatomic, readonly) NSUUID *identifier;
//
ARSCNViewDelegate
- 添加节点时候调用(当开启平地捕捉模式之后,如果捕捉到平地,ARKit会自动添加一个平地节点)
- (void)renderer:(id <SCNSceneRenderer>)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor
{
}
- 刷新时调用
- (void)renderer:(id <SCNSceneRenderer>)renderer willUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor
{
NSLog(@"刷新中");
}
- 更新节点时调用
- (void)renderer:(id <SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor
{
NSLog(@"节点更新");
}
- 移除节点时调用
- (void)renderer:(id <SCNSceneRenderer>)renderer didRemoveNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor
{
NSLog(@"节点移除");
}
ARPlaneAnchor
介绍
继承关系
ARPlaneAnchor
--> ARAnchor
-->NSObject
在AR会话世界监测中,被监测的真实世界的位置和方向信息
属性:检测平面尺寸
- alignment
一般监测到平面的方向取决于重力
@property(nonatomic, readonly) ARPlaneAnchorAlignment alignment;
- ARPlaneAnchorAlignment
描述了一般平面的方向是取决于重力
- center
介绍:
平面相对于锚点位置的中心点
描述:
@property(nonatomic, readonly) vector_float3 center;
谈论:
当ARKit第一次监测到平面的时候,会产生一个中心点是(0,0,0)的ARPlaneAnchor对象。
- extent
介绍:
平面的长度和宽度
描述:
@property(nonatomic, readonly) vector_float3 extent;
谈论:
automaticallyUpdatesLighting
概述
一个BOOL,指定是否由ARKit创建和更新SceneKit在视图场景中的灯光
声明
@property(nonatomic) BOOL automaticallyUpdatesLighting;
详述
默认情况下,这个值是YES,视图会自动创建一个或者多个SCNLight对象,添加它们到场景中并更新它们属性去反映灯光估算信息(从相机场景中)
如果你想要立即的控制所有SceneKit场景中的所有灯光,那么把这个值设为NO
lightEstimationEnabled
概述
这个属性是BOOL,表示是否启动ARKit在捕获相机画面中分析场景灯光
声明
@property(nonatomic, readwrite, getter=isLightEstimationEnabled) BOOL lightEstimationEnabled;
详述
当这个属性是YES(默认就是YES),在它捕获的每个ARFrame对象中,正在运行的AR会话会提供它捕获到的ARFrame的lightEstimate属性中的场景灯光信息
为了AR场景,如果你渲染你自己叠加图片,通过阴影算法,你可以使用这个信息去帮助那些图形匹配相机捕获到的真正世界的灯光条件
ARSCNView类自动使用这个信息去配置SceneKit的灯光
概述
这个属性表示会话是否和怎么去相机拍摄到的
画面中监测平面
声明
@property(nonatomic, readwrite) ARPlaneDetection planeDetection;
详述
默认情况下,平面检测是关着的,如果你启动ARPlaneDetectionHorizontal平面监测,
每当它捕获到视频图像中有平面,
会话就会添加 ARPlaneAnchor对象和通知你的ARSessionDelegate, ARSCNViewDelegate, or ARSKViewDelegate对象
planeDetection属性的类型(枚举)
/**
选项设置平面探测的类型
*/
API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, watchos, tvos)
typedef NS_OPTIONS(NSUInteger, ARPlaneDetection) {
/** No plane detection is run. */
ARPlaneDetectionNone = 0,
/** 平面探测的决定:重力垂直的面就是平面 */
ARPlaneDetectionHorizontal = (1 << 0),
} NS_SWIFT_NAME(ARWorldTrackingConfiguration.PlaneDetection);
网友评论