ARKit 初體驗

前言

蘋果于9月20日推出了iOS 11框产,帶來了AR(虛擬增強現(xiàn)實)功能。更新到Xcode 9之后就可以進行開發(fā)错洁,我也迫不急待地去搜索一翻秉宿,然后好好體驗一翻。

起初在網(wǎng)上找了一個代碼屯碴,直接打開就提示錯誤Unknown type name 'ARSessionConfiguration'描睦。ARSessionConfiguration 無法識別(未定義的類),其實只是Xcode 9正式發(fā)后就直接用ARConfiguration來實現(xiàn)的导而,把它替換了就OK忱叭。

簡單理解

SpriteKit(iOS 7新增))和SceneKit(iOS 8新增)都是基于游戲開發(fā)的框架,SpriteKit是類似于類似cocos2d今艺,而SceneKit就是3D游戲開發(fā)韵丑,AR(虛擬增強現(xiàn)實)就需要靠它來實現(xiàn)。ARKit用來實現(xiàn)相機捕捉現(xiàn)實世界圖像虚缎,SceneKit則將圖像顯示成虛擬3D模型撵彻。

ARKit 和SceneKit的一些關(guān)系: 1.視圖類存在繼承關(guān)系。ARKit框架中3D虛擬增強現(xiàn)實的視圖ARSCNView是繼承于SceneKit中的SCNView,當然最終都繼承于UIVIiew的陌僵。UIView是將視圖簡單地顯示轴合,而且SCNView就將顯示以3D場景顯示出來,相當于SCNView存在視圖渲染和增加效果碗短。2.ARKit負責將真實世界畫面轉(zhuǎn)變?yōu)橐粋€3D場景值桩,其中ARCamera負責捕捉實現(xiàn)的畫面,ARSesson負責搭建3D場景豪椿,將3D場景和實現(xiàn)畫面統(tǒng)一顯示就是依靠繼承于具有顯示3D視圖顯示能力視圖SCNView的ARSCNView來實現(xiàn)。3.現(xiàn)實在3D場景的SceneKit中的虛擬物體携栋,每一個都是一個節(jié)點SCNNode,每一個節(jié)點構(gòu)成了一個場景SCNScene,無數(shù)個場景構(gòu)成了3D世界搭盾。4.總之,ARKit和SceneKit是不可分割的婉支,ARKit算是為了實現(xiàn)相機的3D虛擬增強現(xiàn)實功能而提煉出來的鸯隅。獲取3D虛擬現(xiàn)實的原料完全是靠ARKit,而實現(xiàn)3D虛擬現(xiàn)實視圖的顯示功能向挖,還是靠SceneKit蝌以,只不過用了繼承關(guān)系來依賴和使用的。

在圖片中搜索到的關(guān)系圖可以很好地說明ARKit 和SceneKit的關(guān)系


ARKit 和SceneKit的關(guān)系

簡單使用

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.創(chuàng)建AR視圖

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

//2.設(shè)置視圖會話

_arSCNView.session = self.arSession;

//3.自動刷新燈光(3D游戲用到,此處可忽略)

_arSCNView.automaticallyUpdatesLighting = YES;

}

return _arSCNView;

}

//MARK: -- 懶加載Session

- (ARSession *)arSession{

if (!_arSession) {

//1.創(chuàng)建會話

_arSession = [[ARSession alloc] init];

}

return _arSession ;

}

//MARK: -- 懶加載會話追蹤器

- (ARConfiguration *)arConfiguration{

if (!_arConfiguration) {

//1.創(chuàng)建世界追蹤會話配置(使用ARWorldTrackingSessionConfiguration效果更加好)溶推,需要A9芯片支持(6S以上)

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

configuration.planeDetection =ARPlaneDetectionHorizontal;

//2.設(shè)置追蹤方向(追蹤平面徊件,后面會用到)

_arConfiguration = configuration;

//3.自適應燈光(相機從暗到強光快速過渡效果會平緩一些)

_arConfiguration.lightEstimationEnabled = YES;

}

return _arConfiguration;

}

4. 將ARSCNView加載到視圖并運行

[self.view addSubview:self.arSCNView];

[self.arSession runWithConfiguration:self.arConfiguration];


5. 點擊屏幕添加3D場景節(jié)點

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

{

//1.使用場景加載scn文件(scn格式文件是一個基于3D建模的文件,使用3DMax軟件可以創(chuàng)建蒜危,這里系統(tǒng)有一個默認的3D飛機)

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

//2.獲取飛機節(jié)點

//所有的場景有且只有一個根節(jié)點虱痕,其他所有節(jié)點都是根節(jié)點的子節(jié)點

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

shipNode.position = SCNVector3Make(0, 0, 0 );//x/y/z/坐標相對于世界原點,也就是相機位置

//3.將飛機節(jié)點添加到當前屏幕中

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

}

6. ARCamera在3D世界的位置辐赞,以此來調(diào)整加入的場景節(jié)點位置坐標


位置坐標示意圖

7. 運行部翘,就可以實現(xiàn)效果了。而且ARSCNView還有ARSCNViewDelegate的代理方法响委,實現(xiàn)代理方法新思,可以實現(xiàn)更好的交互體驗,這里我沒有更多地去深究晃酒。

注意

在網(wǎng)上搜索的一些代碼中會話追蹤配置用的是ARSessionConfiguration類表牢,而且在Xcode 9正式發(fā)布后直接用ARConfiguration來代替的。


最后

這里我只是做了一個簡單的償試贝次,并沒有更多的深究崔兴。

從ARKit可以看到未來將是3D的世界,多姿多彩的3D生活將帶慢慢開來。

Demo下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敲茄,一起剝皮案震驚了整個濱河市位谋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堰燎,老刑警劉巖掏父,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秆剪,居然都是意外死亡赊淑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門仅讽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陶缺,“玉大人,你說我怎么就攤上這事洁灵”グ叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵徽千,是天一觀的道長苫费。 經(jīng)常有香客問我,道長双抽,這世上最難降的妖魔是什么百框? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮荠诬,結(jié)果婚禮上琅翻,老公的妹妹穿的比我還像新娘。我一直安慰自己柑贞,他們只是感情好方椎,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钧嘶,像睡著了一般棠众。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上有决,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天闸拿,我揣著相機與錄音,去河邊找鬼书幕。 笑死新荤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的台汇。 我是一名探鬼主播苛骨,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼篱瞎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痒芝?” 一聲冷哼從身側(cè)響起俐筋,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严衬,沒想到半個月后澄者,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡请琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年粱挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俄精。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡抱怔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘀倒,到底是詐尸還是另有隱情,我是刑警寧澤局冰,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布测蘑,位于F島的核電站,受9級特大地震影響康二,放射性物質(zhì)發(fā)生泄漏碳胳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一沫勿、第九天 我趴在偏房一處隱蔽的房頂上張望挨约。 院中可真熱鬧,春花似錦产雹、人聲如沸诫惭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夕土。三九已至,卻和暖如春瘟判,著一層夾襖步出監(jiān)牢的瞬間怨绣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工拷获, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篮撑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓匆瓜,卻偏偏與公主長得像赢笨,于是被迫代替她去往敵國和親未蝌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載請標注出處:http://blog.csdn.net/u013263917/article/details/7...
    Jonath閱讀 460評論 0 1
  • 第一:什么是AR 增強現(xiàn)實AR, 將2D或者3D的元素添加到相機的實時視圖中, 就好像 這些元素居住在現(xiàn)實世界中...
    一朝風月閱讀 587評論 0 0
  • ARKit ARKit框架通過集成iOS設(shè)備攝像頭和運動功能质欲,在您的應用程序或游戲中產(chǎn)生增強現(xiàn)實體驗树埠。 概述 增強...
    暗夜夜夜行路閱讀 5,799評論 0 17
  • 當媽后,會慢慢覺得整個生活都變了嘶伟。 醫(yī)院里 當我像打了勝仗的將軍般凱旋回了病房后怎憋,感覺終于熬過了那漫長的疼痛,終于...
    冷血喵閱讀 146評論 0 0
  • 她坐在搖椅上九昧,兩眼無神的看著前方绊袋,耳旁不時傳來悲傷的爆竹聲。就在一刻鐘以前铸鹰,與她廝守了幾十年的老伴就這樣先她而...
    竹鴻初閱讀 461評論 2 8