ARKit 初体验

前言

苹果于9月20日推出了iOS 11,带来了AR(虚拟增强现实)功能。更新到Xcode 9之后就可以进行开发,我也迫不急待地去搜索一翻,然后好好体验一翻。

起初在网上找了一个代码,直接打开就提示错误Unknown type name 'ARSessionConfiguration'。ARSessionConfiguration 无法识别(未定义的类),其实只是Xcode 9正式发后就直接用ARConfiguration来实现的,把它替换了就OK。

简单理解

SpriteKit(iOS 7新增))和SceneKit(iOS 8新增)都是基于游戏开发的框架,SpriteKit是类似于类似cocos2d,而SceneKit就是3D游戏开发,AR(虚拟增强现实)就需要靠它来实现。ARKit用来实现相机捕捉现实世界图像,SceneKit则将图像显示成虚拟3D模型。

ARKit 和SceneKit的一些关系: 1.视图类存在继承关系。ARKit框架中3D虚拟增强现实的视图ARSCNView是继承于SceneKit中的SCNView,当然最终都继承于UIVIiew的。UIView是将视图简单地显示,而且SCNView就将显示以3D场景显示出来,相当于SCNView存在视图渲染和增加效果。2.ARKit负责将真实世界画面转变为一个3D场景,其中ARCamera负责捕捉实现的画面,ARSesson负责搭建3D场景,将3D场景和实现画面统一显示就是依靠继承于具有显示3D视图显示能力视图SCNView的ARSCNView来实现。3.现实在3D场景的SceneKit中的虚拟物体,每一个都是一个节点SCNNode,每一个节点构成了一个场景SCNScene,无数个场景构成了3D世界。4.总之,ARKit和SceneKit是不可分割的,ARKit算是为了实现相机的3D虚拟增强现实功能而提炼出来的。获取3D虚拟现实的原料完全是靠ARKit,而实现3D虚拟现实视图的显示功能,还是靠SceneKit,只不过用了继承关系来依赖和使用的。

在图片中搜索到的关系图可以很好地说明ARKit 和SceneKit的关系


ARKit 和SceneKit的关系

简单使用

1.导入框架

#import <SceneKit/SceneKit.h>

#import <ARKit/ARKit.h>

2. 定义属性

//AR视图,展示3D页面

@property(nonatomic,strong)ARSCNView *arSCNView;

//AR会话,负责管理相机追踪配置及3D相机坐标

@property(nonatomic,strong)ARSession *arSession;

//会话追踪配置:负责追踪相机的运动

@property(nonatomic,strong)ARConfiguration *arConfiguration;

3. 我用懒加载的方法进行初始化

//MARK: -- 懒加载AR视图

- (ARSCNView *)arSCNView{

  if (!_arSCNView) {

//1.创建AR视图

_arSCNView = [[ARSCNView alloc] initWithFrame:self.view.bounds];

//2.设置视图会话

_arSCNView.session = self.arSession;

//3.自动刷新灯光(3D游戏用到,此处可忽略)

_arSCNView.automaticallyUpdatesLighting = YES;

}

return _arSCNView;

}

//MARK: -- 懒加载Session

- (ARSession *)arSession{

if (!_arSession) {

//1.创建会话

_arSession = [[ARSession alloc] init];

}

return _arSession ;

}

//MARK: -- 懒加载会话追踪器

- (ARConfiguration *)arConfiguration{

if (!_arConfiguration) {

//1.创建世界追踪会话配置(使用ARWorldTrackingSessionConfiguration效果更加好),需要A9芯片支持(6S以上)

ARWorldTrackingConfiguration *configuration =[[ARWorldTrackingConfiguration alloc] init];

configuration.planeDetection =ARPlaneDetectionHorizontal;

//2.设置追踪方向(追踪平面,后面会用到)

_arConfiguration = configuration;

//3.自适应灯光(相机从暗到强光快速过渡效果会平缓一些)

_arConfiguration.lightEstimationEnabled = YES;

}

return _arConfiguration;

}

4. 将ARSCNView加载到视图并运行

[self.view addSubview:self.arSCNView];

[self.arSession runWithConfiguration:self.arConfiguration];


5. 点击屏幕添加3D场景节点

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event

{

//1.使用场景加载scn文件(scn格式文件是一个基于3D建模的文件,使用3DMax软件可以创建,这里系统有一个默认的3D飞机)

SCNScene *scene = [SCNScene sceneNamed:@"Models.scnassets/ship.scn"];

//2.获取飞机节点

//所有的场景有且只有一个根节点,其他所有节点都是根节点的子节点

SCNNode *shipNode = scene.rootNode.childNodes[0];

shipNode.position = SCNVector3Make(0, 0, 0 );//x/y/z/坐标相对于世界原点,也就是相机位置

//3.将飞机节点添加到当前屏幕中

[self.arSCNView.scene.rootNode addChildNode:shipNode];

}

6. ARCamera在3D世界的位置,以此来调整加入的场景节点位置坐标


位置坐标示意图

7. 运行,就可以实现效果了。而且ARSCNView还有ARSCNViewDelegate的代理方法,实现代理方法,可以实现更好的交互体验,这里我没有更多地去深究。

注意

在网上搜索的一些代码中会话追踪配置用的是ARSessionConfiguration类,而且在Xcode 9正式发布后直接用ARConfiguration来代替的。


最后

这里我只是做了一个简单的偿试,并没有更多的深究。

从ARKit可以看到未来将是3D的世界,多姿多彩的3D生活将带慢慢开来。

Demo下载

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

推荐阅读更多精彩内容

  • 转载请标注出处:http://blog.csdn.net/u013263917/article/details/7...
    Jonath阅读 457评论 0 1
  • 第一:什么是AR 增强现实AR, 将2D或者3D的元素添加到相机的实时视图中, 就好像 这些元素居住在现实世界中...
    一朝风月阅读 572评论 0 0
  • ARKit ARKit框架通过集成iOS设备摄像头和运动功能,在您的应用程序或游戏中产生增强现实体验。 概述 增强...
    暗夜夜夜行路阅读 5,777评论 0 17
  • 当妈后,会慢慢觉得整个生活都变了。 医院里 当我像打了胜仗的将军般凯旋回了病房后,感觉终于熬过了那漫长的疼痛,终于...
    冷血喵阅读 141评论 0 0
  • 她坐在摇椅上,两眼无神的看着前方,耳旁不时传来悲伤的爆竹声。就在一刻钟以前,与她厮守了几十年的老伴就这样先她而...
    竹鸿初阅读 453评论 2 8