AR技術(shù)叫做虛擬增強(qiáng)現(xiàn)實(shí),也就是在相機(jī)捕捉到的現(xiàn)實(shí)世界的圖像中顯示一個(gè)虛擬的3D模型。
一.框架說(shuō)明
1:相機(jī)捕捉現(xiàn)實(shí)世界圖像
由ARKit來(lái)實(shí)現(xiàn)
2:在圖像中顯示虛擬3D模型
由SceneKit來(lái)實(shí)現(xiàn)
ARKit框架中中顯示3D虛擬增強(qiáng)現(xiàn)實(shí)的視圖ARSCNView繼承于SceneKit框架中的SCNView,而SCNView又繼承于UIKit框架中的UIView
ARSCNView只是一個(gè)視圖容器,它的作用是管理一個(gè)ARSession
在一個(gè)完整的虛擬增強(qiáng)現(xiàn)實(shí)體驗(yàn)中,ARKit框架只負(fù)責(zé)將真實(shí)世界畫面轉(zhuǎn)變?yōu)橐粋€(gè)3D場(chǎng)景,這一個(gè)轉(zhuǎn)變的過(guò)程主要分為兩個(gè)環(huán)節(jié):由ARCamera負(fù)責(zé)捕捉攝像頭畫面,由ARSession負(fù)責(zé)搭建3D場(chǎng)景
將虛擬物體實(shí)現(xiàn)在3D場(chǎng)景中是由SceneKit框架來(lái)完成中:每一個(gè)虛擬的物體都是一個(gè)節(jié)點(diǎn)SCNNode,每一個(gè)節(jié)點(diǎn)構(gòu)成了一個(gè)場(chǎng)景SCNScene,無(wú)數(shù)個(gè)場(chǎng)景構(gòu)成了3D世界
綜上,ARKit捕捉3D現(xiàn)實(shí)世界使用的是自身的功能,這個(gè)功能是在iOS11新增的。而ARKit在3D現(xiàn)實(shí)場(chǎng)景中添加虛擬物體使用的是父類SCNView的功能,這個(gè)功能早在iOS8時(shí)就已經(jīng)添加(SceneKit是iOS8新增)

二.原理
1.ARSCNView與ARSession
1)ARKit提供兩種虛擬增強(qiáng)現(xiàn)實(shí)視圖,他們分別是3D效果的ARSCNView和2D效果的ARSKView,無(wú)論是使用哪一個(gè)視圖都是用了相機(jī)圖像作為背景視圖,而這一個(gè)相機(jī)的圖像就是由ARKit框架中的相機(jī)類ARCamera來(lái)捕捉的。
2)ARSCNView與ARCamera兩者之間并沒(méi)有直接的關(guān)系,它們之間是通過(guò)ARSession來(lái)搭建溝通橋梁的(在iOS框架中,凡是帶session或者context后綴的,這種類一般自己不干活,作用一般都是兩個(gè):1.管理其他類,幫助他們搭建溝通橋梁,好處就是解耦 2.負(fù)責(zé)幫助我們管理復(fù)雜環(huán)境下的內(nèi)存)
3)要想運(yùn)行一個(gè)ARSession會(huì)話,你必須要指定一個(gè)稱之為會(huì)話追蹤配置的對(duì)象:ARSessionConfiguration,ARSessionConfiguration的主要目的就是負(fù)責(zé)追蹤相機(jī)在3D世界中的位置以及一些特征場(chǎng)景的捕捉(例如平面捕捉)(蘋果官方建議我們使用它的子類ARWorldTrackingSessionConfiguration,該類只支持A9芯片之后的機(jī)型,也就是iPhone6s之后的機(jī)型)

2.ARWorldTrackingSessionConfiguration與ARFrame
1)ARSession搭建溝通橋梁的參與者主要有兩個(gè)ARWorldTrackingSessionConfiguration與ARFrame
2)ARWorldTrackingSessionConfiguration(會(huì)話追蹤配置)的作用是跟蹤設(shè)備的方向和位置,以及檢測(cè)設(shè)備攝像頭看到的現(xiàn)實(shí)世界的表面
3)當(dāng)ARWorldTrackingSessionConfiguration計(jì)算出相機(jī)在3D世界中的位置時(shí),它本身并不持有這個(gè)位置數(shù)據(jù),而是將其計(jì)算出的位置數(shù)據(jù)交給ARSession去管理(與前面說(shuō)的session管理內(nèi)存相呼應(yīng)),而相機(jī)的位置數(shù)據(jù)對(duì)應(yīng)的類就是ARFrame
4)RCamera只負(fù)責(zé)捕捉圖像,不參與數(shù)據(jù)的處理。它屬于3D場(chǎng)景中的一個(gè)環(huán)節(jié),每一個(gè)3D Scene都會(huì)有一個(gè)Camera
三.ARKit工作完整流程
1.ARSCNView加載場(chǎng)景SCNScene
2.SCNScene啟動(dòng)相機(jī)ARCamera開(kāi)始捕捉場(chǎng)景
3.捕捉場(chǎng)景后ARSCNView開(kāi)始將場(chǎng)景數(shù)據(jù)交給Session
4.Session通過(guò)管理ARSessionConfiguration實(shí)現(xiàn)場(chǎng)景的追蹤并且返回一個(gè)ARFrame
5.給ARSCNView的scene添加一個(gè)子節(jié)點(diǎn)(3D物體模型)
(ARSessionConfiguration捕捉相機(jī)3D位置的意義就在于能夠在添加3D物體模型的時(shí)候計(jì)算出3D物體模型相對(duì)于相機(jī)的真實(shí)的矩陣位置)

摘自:坤小