IT狗

ARKit从入门到精晓(4)-ARKit全框架API大全

1.1-ARKit框架简介

  • 再上一大节中,置信大伙儿曾经对<ARKit>框架的运用及道理有了一个全局的看法,为了可以越发深刻的研讨进修ARKit技能,以是笔者本大节紧张引见<ARKit>框架中一切的API

    • 本篇紧张翻译自苹果官方文档,得当加上一些笔者的看法
  • ARKit框架类图


0501.png

1.2-ARAnchor

  • ARAnchor暗示一个物体在3D空间的地位和偏向(ARAnchor一样平常称为物体的3D锚点,有点像UIKit框架中CALayer的Anchor)
    • ARFrame暗示的也是物体的地位和偏向,可是ARFrame一样平常暗示的是AR相机的地位和偏向和追踪相机的工夫,还可以捕获相机的帧图画
      • 也就是说ARFrame用于捕获相机的挪动,其他假造物体用ARAnchor
@interface ARAnchor : NSObject <NSCopying>/** 标识符 */@property (nonatomic, readonly) NSUUID *identifier;/** 锚点的扭转变更矩阵,界说了锚点的扭转、地位、缩放。是一个4x4的矩阵(读者可以本身科普甚么叫4x4矩阵) */@property (nonatomic, readonly) matrix_float4x4 transform;/** 机关要领,一样平常咱们不须要机关。因为增加一个3D物体时ARKit会有署理告诉咱们物体的锚点 */- (instancetype)initWithTransform:(matrix_float4x4)transform;@end

1.3-ARCamera

  • *AR相机,该类API较多,而且明白对比坚苦,将会在后续大节独自引见
    • 该类极度紧张,且API较多,将在后续大节引见

1.4-ARError

  • ARError是一个形貌ARKit毛病的类,这个毛病来源于几个方面,比方装备不支撑,大概当相机常驻背景时ARSession会断开等成绩
//感化域,一样平常会暗示是哪一个类呈现成绩NSString *const ARErrorDomain;//毛病码形貌  100:不支撑会话追踪设置,主线因为A9芯片以下的机型会报错   101:失活状况 102:传感器妨碍  200:追踪失利typedef NS_ERROR_ENUM(ARErrorDomain, ARErrorCode) {    /** Unsupported session configuration. */    ARErrorCodeUnsupportedConfiguration   = 100,    /** A sensor required to run the session is not available. */    ARErrorCodeSensorUnavailable          = 101,    /** A sensor failed to provide the required input. */    ARErrorCodeSensorFailed               = 102,    /** World tracking has encountered a fatal error. */    ARErrorCodeWorldTrackingFailed        = 200,};

1.5-ARFrame

  • ARFrame紧张是追踪相机以后的状况,这个状况不单单只是地位,另有图象帧及工夫等参数
@interface ARFrame : NSObject <NSCopying>/**工夫戳. */@property (nonatomic, readonly) NSTimeInterval timestamp;/** 缓冲区图象帧 */@property (nonatomic, readonly) CVPixelBufferRef capturedImage;/**相机(暗示这个ARFrame是哪一个相机的,iPhone7plus有两个摄像机) */@property (nonatomic, copy, readonly) ARCamera *camera;/** 前往以后相机捕获到的锚点数据(当一个3D假造模子插手到ARKit中时,锚点值得就是这个模子在AR中的地位) */@property (nonatomic, copy, readonly) NSArray<ARAnchor *> *anchors;/**光线,概况可见本章节ARLightEstimate类引见(指的是光线强度 一样平常是0-2000,零碎默许1000) */@property (nonatomic, copy, nullable, readonly) ARLightEstimate *lightEstimate;/**特性点(应当是捕获高山大概人脸的,对比苹果有自带的人脸辨认功用) */@property (nonatomic, nullable, readonly) ARPointCloud *rawFeaturePoints;/**按照2D坐标点搜刮3D模子,这个要领一样平常用于,当咱们在手机屏幕点击某一个点的时间,可以捕获到这一个点地点的3D模子的地位,至于为甚么是一个数组极度好明白。手机屏幕一个是长方形,这是一个二维空间。而相机捕获到的是一个由这个二维空间射进来的长方体,咱们点击屏幕一个点可以明白为在这个长方体的边沿射出一条线,这一条线上大概会有多个3D物体模子point:2D坐标点(手机屏幕某一点)ARHitTestResultType:捕获范例  点仍是面(NSArray<ARHitTestResult *> *):追踪后果数组  概况见本章节ARHitTestResult类引见 */- (NSArray<ARHitTestResult *> *)hitTest:(CGPoint)point types:(ARHitTestResultType)types;/**相机窗口的的坐标变更(可用于相机反正屏的扭转适配) */- (CGAffineTransform)displayTransformWithViewportSize:(CGSize)viewportSize orientation:(UIInterfaceOrientation)orientation;@end

1.6-ARHitTestResult

  • ARHitTestResult:点击回调后果,这个类紧张用于假造加强理想技能(AR技能)中理想天下与3D场景中假造物体的交互。 比方咱们在相机中挪动。拖拽3D假造物体,都可以通过这个类来获得ARKit所捕获的后果
//捕获范例罗列typedef NS_OPTIONS(NSUInteger, ARHitTestResultType) {    /** 点. */    ARHitTestResultTypeFeaturePoint              = (1 << 0),    /** 水立体 y为0. */    ARHitTestResultTypeEstimatedHorizontalPlane  = (1 << 1),    /** 已结存在的立体. */    ARHitTestResultTypeExistingPlane             = (1 << 3),    /** 已结存在的锚点和立体. */    ARHitTestResultTypeExistingPlaneUsingExtent  = (1 << 4),} NS_SWIFT_NAME(ARHitTestResult.ResultType);/**捕获范例 */@property (nonatomic, readonly) ARHitTestResultType type;/** 3D假造物体与相机的间隔(单元:米) */@property (nonatomic, readonly) CGFloat distance;/**当地坐标矩阵(天下坐标指的是相机为场景原点的坐标,而每一个3D物体本身有一个场景,当地坐标就是绝对于这个场景的坐标)类似于frame和bounds的区分 */@property (nonatomic, readonly) matrix_float4x4 localTransform;/**天下坐标矩阵 */@property (nonatomic, readonly) matrix_float4x4 worldTransform;/** 锚点(3D假造物体,在假造天下有一个地位,这个地位参数是SceneKit中的SCNVector3:三维矢量),而锚点anchor是这个物体在AR理想场景中的地位,是一个4x4的矩阵 */@property (nonatomic, strong, nullable, readonly) ARAnchor *anchor;@end

1.7-ARLightEstimate

  • ARLightEstimate是一个光线后果,它可以让你的AR场景看起来越发的好
@interface ARLightEstimate : NSObject <NSCopying>/**光线强度  局限0-2000 默许1000 */@property (nonatomic, readonly) CGFloat ambientIntensity;@end

1.8-ARPlaneAnchor

  • ARPlaneAnchor是ARAnchor的子类,笔者称之为高山锚点。ARKit可以自动辨认高山,而且会默许增加一个锚点到场景中,固然要想发现实在天下中的高山后果,须要咱们本身运用SCNNode来衬着这个锚点
    • 锚点只是一个地位
/**高山范例,目前只要一个,就是水立体 */@property (nonatomic, readonly) ARPlaneAnchorAlignment alignment;/**3轴矢量构造体,暗示高山的中心点  x/y/z */@property (nonatomic, readonly) vector_float3 center;/**3轴矢量构造体,暗示高山的巨细(宽度和高度)  x/y/z */@property (nonatomic, readonly) vector_float3 extent;@end

1.9-ARPointCloud

  • ARPointCloud:点状衬着云,紧张用于衬着场景
@interface ARPointCloud : NSObject <NSCopying>/** 点的数目 */@property (nonatomic, readonly) NSUInteger count;/**每一个点的地位的纠合(构造体带*暗示的是构造体数组) */@property (nonatomic, readonly) const vector_float3 *points;@end

1.10-ARSCNView

  • AR视图,在第一大节笔者引见过,ARKit支撑3D的AR场景和2D的AR场景,ARSCNView是3D的AR场景视图

    • 该类极度紧张,且API较多,将在后续大节引见
  • 该类是全部ARKit框架中独一两个有署理的类当中之一

1.11-ARSession

  • AR会话,它的感化曾经在后面大节中引见,这里不再累述

    • 该类极度紧张,且API较多,将在后续大节引见
  • 该类是全部ARKit框架中独一两个有署理的类当中之一

1.12-ARSessionConfiguration

  • ARSessionConfiguration会话追踪设置,紧张就是追踪相机的设置
    • 留意:该类另有一个子类:ARWorldTrackingSessionConfiguration,它们在同一个API文件中
//会话追踪设置类@interface ARSessionConfiguration : NSObject <NSCopying>/**以后装备是不是支撑,一样平常A9芯片以下装备不支撑 */@property(class, nonatomic, readonly) BOOL isSupported;/**会话的对其方法,这里的对其指的是3D天下的坐标。罗列值见下方 */@property (nonatomic, readwrite) ARWorldAlignment worldAlignment;/**是不是须要自顺应光线后果,默许是YES */@property (nonatomic, readwrite, getter=isLightEstimationEnabled) BOOL lightEstimationEnabled;@end//天下会话追踪设置,苹果倡议咱们运用这个类,这个子类只要一个属性,也就是可以匡助咱们追踪相机捕获到的高山@interface ARWorldTrackingSessionConfiguration : ARSessionConfiguration/**侦察范例。罗列值见下方(默许侦察高山) */@property (nonatomic, readwrite) ARPlaneDetection planeDetection;@end

//追踪对其方法,这个注定了会话的参考坐标系(参照物)
typedef NS_ENUM(NSInteger, ARWorldAlignment) {
/* 相机地位 vector (0, -1, 0) /
ARWorldAlignmentGravity,

/** 相机地位及偏向. vector (0, -1, 0) heading :(0, 0, -1) */ARWorldAlignmentGravityAndHeading,/** 相机偏向. */ARWorldAlignmentCamera

} NS_SWIFT_NAME(ARSessionConfiguration.WorldAlignment);

/
侦察范例
*/
API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, watchos, tvos)
typedef NS_OPTIONS(NSUInteger, ARPlaneDetection) {
/
 不侦察. */
ARPlaneDetectionNone = 0,

/** 高山侦察 */ARPlaneDetectionHorizontal  = (1 << 0),

} NS_SWIFT_NAME(ARWorldTrackingSessionConfiguration.PlaneDetection);

1.13-ARSKView

  • ARSKView也是AR视图,只不过他是2D的,因为2D比3D简洁许多,而且ARSKView根本与ARSCNView类似,以是这里不做一次又一次引见。具体内容可参考ARSCNView

此文由 IT狗 编辑,本网站所发布展示的作品/文章版权归原作者所有,任何商业用途均须联系作者!

相关推荐

评论 暂无评论