在上一篇ARKit體驗(yàn)篇中我們體驗(yàn)了ARKit,這一篇主要從類出發(fā)分析下ARKit的流程。
ARKit淺析
我們知道盏筐,iOS的視圖顯示層級(jí)為UIWindow -》UIViewController -》UIView。UIView的作用是將視圖顯示在UIWindow中,AR呈現(xiàn)的東西也屬于視圖,所以我們可以大膽假設(shè)AR的呈現(xiàn)也是基于UIView的蛇损。由此假設(shè),我們看下上一篇的Demo源碼
//在界面上創(chuàng)建ARSCNView坛怪,用于展示AR
@IBOutlet var sceneView: ARSCNView!
可以看到淤齐,AR由ARSCNView呈現(xiàn)出來,查看文檔可以看到ARSCNView繼承于SCNView袜匿。而SCNView則是SceneKit中一個(gè)繼承于UIView的類更啄。
@available(iOS 11.0, *)
open class ARSCNView : SCNView {
SCNView負(fù)責(zé)顯示一個(gè)3D場(chǎng)景,ARSCNView在SCNView的基礎(chǔ)上沉帮,加入了ARSession使得其可以用攝像頭(ARCamera)捕捉到的現(xiàn)實(shí)世界圖像構(gòu)成3D場(chǎng)景锈死,也就是AR。
ARSession
查看文檔穆壕,不難看出ARSession是溝通攝像頭(ARCamera)和運(yùn)動(dòng)處理的橋梁待牵。ARCamera負(fù)責(zé)捕捉攝像頭畫面,ARSession負(fù)責(zé)搭建3D場(chǎng)景喇勋。
運(yùn)行ARSession需要指定一個(gè)ARSessionConfiguration來負(fù)責(zé)追蹤相機(jī)在3D世界中的位置以及場(chǎng)景的捕捉(例如平面)缨该。
ARSessionConfiguration是一個(gè)父類,為了更好的看到增強(qiáng)現(xiàn)實(shí)的效果川背,蘋果為我們提供了它的子類ARWorldTrackingSessionConfiguration來便于使用贰拿。
細(xì)心的朋友可以看到文檔中有個(gè)isSupported方法應(yīng)該就是為什么ARKit要求A9芯片以上的原因了(猜的蛤袒,不準(zhǔn)勿噴),所以膨更,使用ARKit時(shí)別忘了做這個(gè)判斷妙真。
ARWorldTrackingSessionConfiguration計(jì)算出相機(jī)在3D世界中的位置ARFrame后,將其交給ARSession去管理
我們理清了如何從相機(jī)捕捉圖像到手機(jī)上顯示3D場(chǎng)景荚守,而虛擬的物體部分是由節(jié)點(diǎn)SCNNode構(gòu)成的(節(jié)點(diǎn)構(gòu)成了場(chǎng)景SCNScene,無數(shù)個(gè)場(chǎng)景構(gòu)成了3D世界)
ARKit流程
- ARSCNView加載SCNScene
- SCNScene啟動(dòng)ARCamera捕捉圖像
- ARSCNView將SCNScene的數(shù)據(jù)交給Session
- Session通過管理ARSessionConfiguration實(shí)現(xiàn)場(chǎng)景追蹤并且返回一個(gè)ARFrame(添加3D物體模型的時(shí)候計(jì)算出3D物體模型相對(duì)于相機(jī)的真實(shí)的矩陣位置需要使用到)
- 往SCNScene中添加一個(gè)3D物體(SCNNode)
總結(jié)
本篇主要分析了ARKit的流程珍德,讓大家對(duì)ARKit的幾個(gè)主要類以及職責(zé)先有一個(gè)初步了解。下一篇開始將以實(shí)例來一步步探索ARKit矗漾。