转载请注明出处:
http://www.jianshu.com/p/0492c7122d2f
1.1-写在前面的话
-
初次接触
ARKit
,很多人会为其复杂的架构关系而感到畏惧。这里笔者将以最基础简介的方式带领一下一睹苹果原生AR(虚拟增强现实)的风采
-
ARKit并不是一个独立就能够运行的框架,而是必须要SceneKit一起用才可以,换一句话说,如果只有
,而没有
,那么ARKit和一般的相机没有任何区别
-
由于笔者从事多年的iOS应用开发,并没有从事过3D游戏的开发(只是业余爱好写了一个3D打飞机的游戏),所以在本篇介绍
ARKit
的过程中,我们将以最小的篇幅来介绍
SceneKit
,毕竟如果没有丰富的3D游戏开发经验,那么光是相机捕捉到的2D界面如果转化为3D世界的矩阵都非常难以理解
-
笔者介绍ARKit的流程大概如下
-
笔者没有单独的3D模型,这里主要以苹果官方给出的参考3D模型(飞机)来实现
-
1.介绍ARKit的工作原理及流程(本篇)
-
2.通过对ARKit的原理及流程的了解,我们自定义实现ARKit
-
3.介绍ARKit框架中的所有API,PS:是翻译官方整个ARKit框架中所有的API………………~
-
4.介绍ARKit框架中几个重量级的类
ARScnView
,
ARSession
,
ARCamera
-
5.ARKit实现捕捉现实世界中的平地,并将虚拟物体添加到平地中
-
6.ARKit实现让虚拟物体跟随相机移动
-
7.ARKit实现让虚拟物体围绕摄像机(拿着iPhone的人)旋转
1.2-ARKit与SceneKit的关系
0301.png
1.3-ARKit工作原理
1.3.1-ARSCNView与ARSession
-
1.ARKit提供两种虚拟增强现实视图,他们分别是3D效果的
ARSCNView
和2D效果的
ARSKView
(关于3D效果和2D效果区别以及在上一小节介绍),无论是使用哪一个视图都是用了相机图像作为背景视图(这里可以参考iOS自定义相机中的预览图层),而这一个相机的图像就是由
框架中的相机类
ARCamera
来捕捉的。
-
2.
ARSCNView
与
ARCamera
两者之间并没有直接的关系,它们之间是通过AR会话,也就是ARKit框架中非常重量级的一个类
ARSession
来搭建沟通桥梁的
-
context与session不同之处是:一般与硬件打交道,例如摄像头捕捉ARSession,网卡的调用NSURLSession等使用的都是session后缀。没有硬件参与,一般用context,如绘图上下文,自定义转场上下文等
-
在iOS框架中,凡是带session或者context后缀的,这种类一般自己不干活,作用一般都是两个:1.管理其他类,帮助他们搭建沟通桥梁,好处就是解耦 2.负责帮助我们管理复杂环境下的内存
-
3.要想运行一个
ARSession
会话,你必须要指定一个称之为
会话追踪配置
的对象:
ARSessionConfiguration
,
ARSessionConfiguration
的主要目的就是负责追踪相机在3D世界中的位置以及一些特征场景的捕捉(例如平面捕捉),这个类本身比较简单却作用巨大
0302.png
1.3.2-ARWorldTrackingSessionConfiguration与ARFrame