(苹果框架学习)00001_ARkit.framework苹果框架_2018-08-17

文丨lyh165
发布时间:2018-08-17(周五 广州/雨)
最后更新时间:2018-08-20 (周一 广州/晴)


之前版本
V1.0.1 开启第一个AR项目 (2018-08-17 周五 广州/雨)
V1.0.2 添加苹果ARkit框架每个类的官方文档、示例代码、技术文章、视频讲解 (2018-08-18 周六 广州/晴)
V1.0.3 添加demo的workspace和官方demo (2018-08-18 周六 广州/晴)

本次更新
V1.0.4 对苹果官方技术文章和示例代码进行简化翻译理解 (2018-08-20 周一 广州/晴)

后续将更新
...敬请期待


零、关键词

<坐标系的表示>:(x,y,z)(x:左右,y:上下,z:前后) 
<iOS3d包含 position、Euler、Scale> (position表示坐标系,Scale表示每个坐标的大小)
世界坐标
本地坐标
场景
帧
<锚> : 是网页制作中超级链接的一种,又叫命名锚记。命名锚记像一个迅速定位器一样是一种页面内的超级链接,运用相当普遍。
会话
<映射> : 指两个元素的集之间元素相互“对应”的关系、两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射
<投影矩阵> :https://www.cnblogs.com/wonderKK/p/5695116.html
00、xyz坐标系.png

一、ARKit类的官方文档

框架标记
📃 表示Article 说明是一篇技术文章
C 表示class 说明是一个类
M 表示method 说明是一个方法
P 表示property 说明是一个属性
Pr 表示protocol 说明是一个协议
E 表示 Enumeration 说明是一个枚举

K 表示 Enumeration Case 说明是一个枚举里面的一个常量
V 表示 Global Variable 说明是一个全局变量
{} 表示Sample Code 说明是示例代码


----
Declaration 宣言
Discussion 讨论
Parameters 参数
Return Value 返回值
Overview    概述 (简单描述该类是干什么用的)
Topics 主题 (拥有哪些方法)
Relationships 关系 (继承于谁)
See Also    另请参阅

框架和类
ARKit
1、ARKit/ARSession
2、ARKit/ARConfiguration
3、ARKit/ARWorldTrackingConfiguration
4、ARKit/AROrientationTrackingConfiguration
5、ARKit/ARPlaneAnchor
6、ARKit/ARFaceTrackingConfiguration
框架和类
7、ARKit/ARFaceAnchor
8、ARKit/ARSCNView
9、ARKit/ARSKView
10、ARKit/ARReferenceImage
11、ARKit/ARImageAnchor
12、ARKit/ARHitTestResult
13、ARKit/ARAnchor
14、ARKit/ARTrackable
15、ARKit/ARFrame
16、ARKit/ARCamera
17、ARKit/ARLightEstimate
18、ARKit/ARDirectionalLightEstimate

技术文章
------第一篇------
1、About Augmented Reality and ARKit 了解ARKit中的世界跟踪
知识点:
1.世界分两个两种空间 (真实世界空间、虚拟空间)
2.坐标系遵守右手定律
y轴向上指向,并且(当相关时)z轴指向观察者并且x轴指向观察者的右侧。
3.世界跟踪使用了一种称为视觉惯性测距法的技术。
视觉惯性测距法 使用的是:iOS设备的运动感应硬件的信息与设备相机可见场景的计算机视觉分析相结合
4.命中测试法,是世界跟踪用来分析和理解场景的内容实用的。
对应ARKit的类是 ARHitTestResultplaneDetection
⚠️:世界追踪是一门不精准的科学。提高质量需要:
1.清晰的图像
2.不要频繁过度移动设备。比如 过快 或 激烈摇晃
3.检测平面需要空出一点时间。需要大量算法计算
------第二篇------
2、Displaying an AR Experience with Metal

示例代码
1、Building Your First AR Experience 建立您的第一个AR体验
2、Handling 3D Interaction and UI Controls in Augmented Reality
3、Creating Face-Based AR Experiences
4、Recognizing Images in an AR Experience
5、Using Vision in Real Time with ARKit
6、Creating an Immersive AR Experience with Audio

视频讲解
https://developer.apple.com/videos/library/?q=ARKit

01、ARKit框架类.jpg
01、ARKit框架类(2).jpg

二、参考文章

原理篇文章
0000.参考文章(ARKit API)
0000.参考文章(AR项目工作流程)
(https://www.jianshu.com/p/7faa4a3af589)
0000.参考文章(ARKit1.5版本支持垂直方向,iOS11.3)
技术参考文章
3d模型的obj,dae格式转scn
制作传送门
收费视频文章
蛮牛AR

02、ARKit关系图(1).jpeg
02、ARKit关系图(2).jpg

三、ARKit常用的类

UIView  视图
ARSCNView AR视图(参考文章 https://blog.csdn.net/biangabiang/article/details/76619177)
SCNScene AR场景
SCNnode AR节点(3D模型)

ARsession  AR会话 (参考文章 https://blog.csdn.net/biangabiang/article/details/76818441)
ARSessioncofguration AR会话追踪位置(**已经废除**)
    新类: ARConfiguration AR追踪位置
    子类: ARWorldTrackingConfiguration AR世界追踪会话配置
ARFarme AR位置
ARCamare AR相机 (参考文章 https://blog.csdn.net/biangabiang/article/details/76819262)

四、demo

1 体验ARdemo

通过点击按钮跳转到该页面
该页面点击屏幕进行加载模型
#import "LYH_ARSCNViewController.h" // AR控制器界面
#import <SceneKit/SceneKit.h>   // 3D游戏框架
#import <ARKit/ARKit.h>         // ARKit框架

@interface LYH_ARSCNViewController ()
/** AR视图:展示3D界面 */
@property(nonatomic, strong)ARSCNView *arSCNView;
/** AR会话:负责管理相机追踪配置以及3D相机的坐标 */
@property(nonatomic, strong)ARSession *arSession;
/** 会话追踪配置:负责追踪相机的运动 */
@property(nonatomic, strong) ARConfiguration *arConfiguration; // 注意点 Xcode bate版 ARSessionConfiguration 在正式版已经被废除了 。使用 ARConfiguration 替代
/** 飞机模型 */
@property(nonatomic, strong) SCNNode *planeNode;
@end

@implementation LYH_ARSCNViewController

#pragma mark -  💤 懒加载 Lazy loading start
#pragma mark 搭建ARKit环境__懒加载  1.创建AR视图 2.创建AR会话 3.创建AR会话追踪配置
- (ARSCNView *)arSCNView
{
    if (_arSCNView == nil)
    {
        /**
         1.创建AR视图
         2.设置视图会话
         3.自动刷新灯光(3D游戏用到,此处可忽略)
         */
        _arSCNView = [[ARSCNView alloc] initWithFrame:self.view.bounds];
        _arSCNView.session = self.arSession;
        _arSCNView.automaticallyUpdatesLighting = YES;
    }
    return _arSCNView;
}
- (ARSession *)arSession
{
    if(_arSession == nil)
    {
        /**
         1.创建AR会话
         */
        _arSession = [[ARSession alloc] init];
    }
    return _arSession;
}
- (ARConfiguration *)arConfiguration
{
    if (_arConfiguration == nil)
    {
        /**
         1.创建世界追踪会话配置(使用ARWorldTrackingSessionConfiguration效果更加好),需要A9芯片支持
         2.设置追踪方向(追踪平面,后面会用到)   ARPlaneDetectionHorizontal
         3.自适应灯光(相机从暗到强光快速过渡效果会平缓一些)
         */
        ARWorldTrackingConfiguration *configuration = [[ARWorldTrackingConfiguration alloc] init];
        configuration.planeDetection = ARPlaneDetectionHorizontal;
        _arConfiguration.lightEstimationEnabled = YES;
        _arConfiguration = configuration; // 将创建的属性赋值给全局变量
    }
    return _arConfiguration;
}
#pragma mark  💤 懒加载  Lazy loading end


#pragma mark - ♻️ 视图的生命周期 view life cycle start
- (void)viewDidLoad
{
    [super viewDidLoad];
}
#pragma mark 视图已在屏幕上渲染完成 1、将AR视图添加到视图 2、开启AR会话
- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    /**
     1.将AR视图添加到当前视图
     2.开启AR会话(此时相机开始工作)
     */
    [self.view addSubview:self.arSCNView];
    [self.arSession runWithConfiguration:self.arConfiguration];
    
}
#pragma mark  ♻️ 视图的生命周期 view life cycle end

#pragma mark - ✍🏻(系统方法) system method start

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //1.使用场景加载scn文件(scn格式文件是一个基于3D建模的文件,使用3DMax软件可以创建,这里系统有一个默认的3D飞机)——–在右侧我添加了许多3D模型,只需要替换文件名即可
    SCNScene *scene = [SCNScene sceneNamed:@"Models.scnassets/ship.scn"];
    //2.获取飞机节点(一个场景会有多个节点,此处我们只写,飞机节点则默认是场景子节点的第一个)
    //所有的场景有且只有一个根节点,其他所有节点都是根节点的子节点
    SCNNode *shipNode = scene.rootNode.childNodes[0];
    
    // 椅子比较大,可以调整调整Z的位置让它离摄像头远一点,然后在往下一点(椅子太高我们做不上去)就可以看得全局一点
    //    shipNode.position = SCNVector3Make(0, -1, -1); // x | y | z 坐标相当于世界原点,也就是相机位置
    
    //3.将飞机节点添加到当前屏幕中
    [self.arSCNView.scene.rootNode addChildNode:shipNode];
}

#pragma mark  ✍🏻(系统方法) system method end

@end

2、AR捕捉平面demo
3、00003_ARKit捕捉平地
4、00004_ARKit让飞机跟着镜头飞起来
5、00005_ARKit让飞机绕着你飞起来
具体请到《五、资源和素材》 里面下载。已经上传到百度云分享。


五、资源和素材

workspace代码: 
链接:https://pan.baidu.com/s/107h2PC9ssWuooSY3MLj5og  密码:r6v9
框架注释版:
拼命添加翻译中....
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容