AR初探
什麼是 AR?
增強現實技術(Augmented Reality,簡稱 AR),是一種實時地計算攝影機影像的位置及角度并加上相應圖像、視訊、3D模型的技術,這種技術的目标是在螢幕上把虛拟世界套在現實世界并進行互動。這種技術1990年提出。随着随身電子産品CPU運算能力的提升,預期增強現實的用途将會越來越廣。 百度百科
ARKit是什麼?
iOS 11 introduces ARKit, a new framework that allows you to easily create unparalleled augmented reality experiences for iPhone and iPad. By blending digital objects and information with the environment around you, ARKit takes apps beyond the screen, freeing them to interact with the real world in entirely new ways.
翻譯就是 ios11 蘋果推出的一個好用 AR 架構來實作 AR 的應用,增加一個全新的使用者互動方式
我所了解的 AR
我所了解的 AR 就是把現實場景通過鏡頭記錄到螢幕中(或者說程式中)通過圖像處理來改變螢幕中的場景,活添加或修改或删除,人們通過螢幕來擷取圖像資訊.來改變我們眼中的世界!
ARKit
1. 視覺慣性測量
ARKit使用視覺慣性測距(VIO)來精确跟蹤周圍的世界。VIO将攝像頭傳感器資料與CoreMotion資料進行融合。這兩個輸入允許裝置以高精确度感測房間内的移動方式,并且不需要額外的校準。
2. 場景了解和照明估計
使用ARKit,iPhone和iPad可以分析相機視圖呈現的場景,并在房間中找到水準面。ARKit可以檢測水準平面,如桌子和地闆,并且可以跟蹤和放置較小特征點上的對象。ARKit還利用相機傳感器來估計場景中可用光量的總量,并将正确數量的照明應用于虛拟對象。
3. 高性能硬體和渲染優化
ARKit運作在Apple A9和A10處理器上。這些處理器提供突破性的性能,可實作快速場景了解,并可讓您在現實世界場景之上建構詳盡而引人注目的虛拟内容。您可以利用Metal,SceneKit以及Unity和虛幻引擎等第三方工具中的ARKit優化。
AR 初探
- 準備工作 Xcode9 以上版本
- ios11 以上版本系統
- 硬體必須是 a9以上的處理器
- 官方下載下傳位址 https://developer.apple.com/download/
打開 Xcode 建立一個 AR 工程
1. 建立場景(類似于建立一個視圖)
- 最開始先建立一個視圖容器來存放我們的場景.
- (ARSCNView *)sceneView {
if (!_sceneView) {
_sceneView = [[ARSCNView alloc]initWithFrame:[UIScreen mainScreen].bounds];
_sceneView.delegate = self;
_sceneView.showsStatistics = YES;
SCNScene *scene = [[SCNScene alloc]init];
_sceneView.scene = scene;
}
return _sceneView;
}
- 注意要添加需要通路攝像頭的權限, Xcode9建立 AR 項目幫我們自動添加了;
2. 建立一個模型
//建立模型
SCNBox *box = [SCNBox boxWithWidth:0.1 height:0.1 length:0.1 chamferRadius:0];
//建立渲染
SCNMaterial *boxMaterial = [SCNMaterial material];
//設定渲染
boxMaterial.diffuse.contents = [UIColor yellowColor];
// 添加渲染
box.materials = @[boxMaterial];
3. 添加模型
//建立節點
SCNNode *boxNode = [SCNNode nodeWithGeometry:box];
//把模型根據節點的位置添加到場景之中
boxNode.position = SCNVector3Make(0, 0, - 0.2);
//設定模型的根節點 也就相當于吧這個東西添加到場景中響應的位置當中
[self.sceneView.scene.rootNode addChildNode:boxNode];
4. 添加互動方式
//建立點選手勢
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureRecognizer:)];
//添加手勢
[self.sceneView addGestureRecognizer:tap];
- 操作模型 實作互動