WWDC 2017 - ARKit 簡介

構(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)如下:

screenshot

代碼介紹

畫面捕捉

畫面通過攝像頭來獲取,通過 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 渲染

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容