原本的计划是利用碎片时间写一个Core Animation系列,但是最近由于AR的需求,不得不抽时间学习ARkit,目前就没有时间写CoreAnimation了,欠一屁股技术债。将自己学习ARKit的过程简单记录一下,首先是学习资源。我一直觉得官方文档和WWDC是初步了解某个技术的最好途径,当然也有国内一些优秀的博客写ARKit:
ching the 2017 WWDC videos Introducing ARKit:https://developer.apple.com/videos/play/wwdc2017/602/
「Going Beyond 2d with Sprite Kit」:https://developer.apple.com/videos/play/wwdc2017/609/
Reading the 「ARKit Documentation」:https://developer.apple.com/arkit/
Working with SceneKit via 「3D Apple Games by Tutorials」:https://store.raywenderlich.com/products/3d-apple-games-by-tutorials
Learning 「Interactive 3D Graphics」:https://www.udacity.com/course/interactive-3d-graphics--cs291
Checking out the demos at 「Made with ARKit」:http://www.madewitharkit.com/
CSDN serial blogs 「ARKit从入门到精通」:https://blog.csdn.net/u013263917/article/details/72903174
ARKit设备要求
为了支持AR操作,需要使用A9以上芯片的手机,也就是6s及以后版本后者iPad 17年以后出的版本。
HelloAR
惯例,先创建一个官方的ARdemo模板看看是什么。
这里稍微注意一个地方。content Technology选择使用SceneKit,由于我是使用的Augmented Reality App模板,所以它会自动选择SceneKit,里面还有另外2个选择SpriteKit和Metal。SpriteKit是使用了游戏和2D开发的概念命名中文有人称作精灵控件,Metal是iOS提供的对GPU直接操作的库,用与3D渲染,而且要留意的是,它是Apple弃用OpenGL以后的替代品。
创建完成的效果就不展示了,可以自己run一下,看看效果。
ARKit核心类
如果你觉得连看官方文档都很麻烦的话,我把它们都翻译成人话了,你可以简单的了解一下概念.
ARSCNView:通过将 SceneKit 3D 内容显示在相机画面上,从而实现 AR 体验的视图。
官方文档:https://developer.apple.com/documentation/arkit/arscnview
它的地位在UIKit中相当于UIView。用于展示AR世界。
SCNNode:我们有一句很熟悉的话叫“一切东西都是对象”,在AR世界中一切东西都是节点。
官方文档:https://developer.apple.com/documentation/scenekit/scnnode?language=objc
SCNScene:场景是节点的容器,用来承载节点,一个3D视图是由一个个场景构成的。这个概念可能不好理解,可是又很好理解,因为它在UIKit中找不到一个合适的东西来对应,但是你从3D世界的角度来想就很容易理解了。例如:demo中的飞机的3D模型就是通过node(节点)来呈现,而节点是放在scene(场景)这个容器中,这个飞机的场景被放在了ARSCNView上构成了这个有一架3D飞机的AR世界。
官方文档:https://developer.apple.com/documentation/scenekit/scnscene?language=objc
ARSession:ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部所有的代理方法都是由ARSession来提供的
官方文档:https://developer.apple.com/documentation/arkit/arsession
ARSession是底层硬件与AR软件视图之间的一个中间层。注意Apple的命名中有一个特点,context一般是作为软件与软件之间交互的中间层,session作为硬件与软件之间的交互的中间层命名。
ARSessionConfiguration及其子类:它是ARSession的配置类。ARKit需要A9以上的手机也是由于,ARSession要启动这些配置需要A9以上的芯片才能处理。
官方文档:https://developer.apple.com/documentation/arkit/arworldtrackingsessionconfiguration
· ARWorldTrackingConfiguration
使用后置摄像头精确追踪设备的位置和方向并允许平面检测和碰撞测试来提供高品质的AR体验。
·AROrientationTrackingConfiguration
使用后置摄像头并仅追踪设备方向来提供基本的AR体验。
·ARFaceTrackingConfiguration
使用前置摄像头并追踪用户面部的移动和表情来提供AR体验。
·ARImageTrackingConfiguration
提供基本的AR体验,使用后置摄像头,跟踪可见图像,而不考虑用户的环境。
具体看一下官方demo:
在Main.storyboard中加入了一个ARSCNView,声明:
视图即将出现
视图出现
demo构建了一个最基础的AR世界。但是在这里我们还完全没有参与感。
下面来动手实现一个HelloAR场景:让我们做一回上帝,点击屏幕,在镜头的前面的创建一个地球。(至于这里用到的地球表面延展图素材网上有很多,就不贴图了)
我们依然使用官方的demo作为基础,保留所有的配置项,移除加载飞机的场景
下面我会忽略上面demo中的代码
从细节上看一下上面的代码:
点击手势我是自定义了一个手势,你也可以用touchbegin方法,是一样的
点击获取当前相机在现实世界的位置,以后创建一个SCNSphere的球体场景。这是系统默认提供的一种几何模型的类型。系统提供了下面几种类型的几何模型可供直接使用。
最后创建节点,并将它放到当前的sceneView的根节点上,最后拿到相机的位置,将创建的地球的位置设置为相机的位置。
这个demo虽然简单但是里面包含了AR应用中常见的几个很重要的元素:几何图形、节点、渲染和手势和节点位置变换。这里就不给出效果图了,可以自己跑一下,有机会再对这几大元素进行更详细全名的解释。
到这里say hello,完。
欢迎关注,一起成长
领取专属 10元无门槛券
私享最新 技术干货