構(gòu)建了新的本地 MarkDown 工具
MWeb + 七牛圖床
拿這篇文章測試一下
這篇文章是 ARKit \ Session 602 的一些整理。【基于OC】
轉(zhuǎn)自我的 Blog: Danny's Dream
這應(yīng)該是這屆 WWDC 發(fā)布的最酷的幾個功能之一了。也是最吸引我的幾個功能之一,所以在看完預覽介紹之后,就直接看了這個視頻。
上來展示了兩個應(yīng)用場景,一個是幼兒教育的視頻,能把童話故事展示到床上。還有一個是宜家的家具展示,可以把宜家的家具放到你家中,并且尺寸還是真實的大小。
支持的設(shè)備
- A9及及以上的處理器 【6s 及 以上設(shè)備,估計是需要較高的運算,我用的測試設(shè)備是 se ,跑起來手機熱量及耗電感人】
- iOS 11
AR技術(shù)的主要技術(shù)點
追蹤
追蹤手機本身的變化,包括角度,空間位置等。
場景理解
- 平面探測 【AR物體,需要展示的界面】
- Hit-testing 【當沒有規(guī)則平面的時候,進行的操作,類似于點擊直接的hit-test,判斷圖像中的模塊是否為平面】
- 光影推測 【相當酷的一個功能,為了能讓 AR 渲染出來的更加逼真,ARKit 會先去判斷當前的光影結(jié)構(gòu),并渲染在物體畫面上】
渲染
顧名思義,就是怎么把 3D 的物體以一種立體的模式渲染到平面圖像上,提供了 SceneKit,SpriteKit,Metal 等三種渲染方式,當然你也可以通過 Unity ,Unreal 等引擎做渲染。這一步的開放,意味著開發(fā)的成本更低。
主要的結(jié)構(gòu)如下:

代碼介紹
畫面捕捉
畫面通過攝像頭來獲取,通過 AVFoundation 和 CoreMotion,所以 AR 應(yīng)用要獲取攝像頭的權(quán)限。
ARSession
ARKit 中最主要的類,它的用法和 NSUrlSession 的模式很像,應(yīng)該是相似的設(shè)計思想。
首先構(gòu)造 ARSessionConfiguration ,它和 NSURLSessionTask 一樣是抽象的接口
實現(xiàn)分為以下:
- ARWorldTrackingSessionConfiguration 提供 6 個維度空間的設(shè)備追蹤參數(shù),一旦 Session pause 了,不能恢復追蹤。
ARWorldTrackingSessionConfiguration 提供 isSupported 來判斷當前設(shè)備是否支持 AR。
開始
// Create a session configuration
ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];
// Run the view's session
[self.session runWithConfiguration:configuration];
通過 ARSession 的 run 方法來開始追蹤。
停止
當不再使用的時候,如 viewWillDisappear 的時候,執(zhí)行 pause 方法停止追蹤。
// Pause the view's session
[self.session pause];
恢復
需要恢復的時候調(diào)用要重新 run 一個 Configuration 。
重置
在需要重置的時候,調(diào)用如下方法
[self.session runWithConfiguration:configuration options:ARSessionRunOptionResetTracking]
ARSessionDelegate
ARSession 提供的代理方法
@protocol ARSessionDelegate <ARSessionObserver>
@optional
/**
當一個新的 frame 繪制的時觸發(fā)
*/
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame;
/**
當一個新的 ARAnchor 加到 Session 的時觸發(fā)
*/
- (void)session:(ARSession *)session didAddAnchors:(NSArray<ARAnchor*>*)anchors;
/**
當 ARAnchor 刷新的時候觸發(fā)
*/
- (void)session:(ARSession *)session didUpdateAnchors:(NSArray<ARAnchor*>*)anchors;
/**
當 ARAnchor 被移除的時候觸發(fā)
*/
- (void)session:(ARSession *)session didRemoveAnchors:(NSArray<ARAnchor*>*)anchors;
@end
關(guān)鍵參數(shù)介紹
ARFrame
Scense understanding 場景的理解
Plane detection
Hit-testing
Light estimate 渲染