第一次寫簡書,鑒于ARKit網上相關資料比較少,寫一套實戰教程,希望能幫到需要的人吧。表達能力捉急,寫的不好的請留言提意見。兩個圖是盜的
1、寫在前面:
本文開發語言OC。
開發環境需要滿足以下條件
1.Xcode版本:Xcode9及以上
2.iOS系統:iOS11及以上
3.iOS設備:處理器A9及以上(6S機型及以上)
4.MacOS系統:10.12.4及以上(安裝Xcode9對Mac系統版本有要求)
2、最終效果預覽
3、AR運行模式簡介
AR 運作流程圖(盜的)
藍色表示 ARKit ,綠色表示 SceneKit 。
ARKit負責捕捉現實世界的信息,SceneKit通過ARkit得到的信息,建立一個虛擬世界。之后通過ARKit將虛擬世界與現實世界實時維系起來。
ARKit 和 SceneKit 關系圖
介紹一下主要的類:
ARSCNView:渲染虛擬世界和呈現現實世界,我們手機上獲得的在現實世界中放置的虛擬物品的效果的就是它。
ARSession:會話配置,追蹤現實世界信息,并更新SCNView場景,
ARCamera:相機當前的位置信息,通過四元數給出。(四元數 這個比較抽象,我不是很懂,讀者可以自行百度一下,一般就用第三列,是xyz坐標信息,ARAnchor也是)。
ARAnchor:錨點,通過相機捕捉到的現實世界中的點
SCNNode:節點,我們添加上去的點,一般先確定錨點,然后再錨點點位置上添加節點
ARConfiguration:一般就用ARWorldTrackingConfiguration,6自由度追蹤,比較準確。AROrientationTrackingConfiguration,3自由度追蹤,旋轉,精度不如ARWorldTrackingConfiguration。ARFaceTrackingConfiguration,人臉追蹤,得IPhone X才行,注釋太長,咱不管他,需要了解的直接看Xcode里注釋吧。
4,第一架AR飛機
打開Xcode,新建工程,選擇AR
下一步,這里選sceneKit。我們用的場景渲染是sceneKit
下一步,創建好了之后,可以看到,蘋果給我們生成的一些初始代碼:
上面用sb拉了一個SceneView
@property (nonatomic, strong) IBOutlet ARSCNView *sceneView;
- (void)viewDidLoad {
[super viewDidLoad];
// Set the view's delegate
self.sceneView.delegate = self;
// 顯示fps,幀頻等信息
self.sceneView.showsStatistics = YES;
// 創建一個場景,加載飛機的模型
SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn"];
// Set the scene to the view
self.sceneView.scene = scene;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Create a session configuration:世界會話追逐配置,一般用ARWorldTrackingConfiguration這個就行了
ARWorldTrackingConfiguration *configuration = [ARWorldTrackingConfiguration new];
// Run the view's session
[self.sceneView.session runWithConfiguration:configuration];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Pause the view's session
[self.sceneView.session pause];
}
跑一下,體驗一下第一架飛機。
嗯,太假了。我們來給他加個光影效果:
//添加光照節點
SCNNode *lightNode = [SCNNode node];
lightNode.light = [SCNLight light];
lightNode.light.type = SCNLightTypeOmni;
lightNode.position = SCNVector3Make(0, 10, 10);
[self.sceneView.scene.rootNode addChildNode:lightNode];
效果:
看著是不是好多了。
5......沒有5了,字數限制到這里了。下一篇吧。
本文Demo地址:https://github.com/HalfOfSunshine/AR-Distance-Calculator