上篇文章講到ARKit中的橋梁類ARSession 沒看過的可以去了解下。傳送門http://www.lxweimin.com/p/743ef3d6c8dd,本篇內容我們來了解下AR里面的追蹤配置。
官方文檔地址 :https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration
一.官文翻譯
ARConfiguration
-
它是AR會話配置的抽象基類。
-
ARConfiguration是一個抽象的基類,你不用創建或使用它的實例來應用于AR場景中。
-
當你想要運行AR會話,創建一個ARConfiguration的子類的實例。它可以為您的APP或游戲提供增強現實的體驗。它有三個子類。
- ARWorldTrackingConfiguration
提供高品質的AR體驗,使用后置攝像頭精確跟蹤設備的位置和方向,并允許平面檢測和碰撞試驗。- AROrientationTrackingConfiguration
提供使用后置攝像頭并僅跟蹤設備方向的基本AR體驗。- ARFaceTrackingConfiguration
提供使用前置攝像頭并跟蹤用戶臉部的移動和表情的AR體驗。
其中第一個是比較常用的會話配置子類,下面2個子類只作為了解用到的時候再做詳細介紹。
ARWorldTrackingConfiguration
它是一個可以追蹤相機的位置和方向,檢測相機捕捉到的現實世界的平面的一個配置類。
所有的AR配置都要建立設備所在現實環境與虛擬的3D模型內容之間的對應關系。當你的APP將虛擬模型和相機捕捉的實時圖像一起展示的時候,用戶會有一種虛擬世界成為了現實世界的一部分的錯覺。
創建和維護這兩者之間的對應關系需要追蹤設備的運動。(其實就是通過追蹤設備的運動來同步這兩個世界形成增強現實的效果)ARWorldTrackingConfiguration類以6個自由度(6DOF)。具體來說就是三個平移軸(X、Y、Z),三個旋轉軸(滾動、俯仰、偏航,也可以簡單理解為在x、y、z軸上的旋轉)
這種追蹤可以創建一種沉浸式的AR體驗。一個虛擬的物體可以保持一個相對于現實環境中的相同位置。即使你把設備傾斜到上方或者下方,移動設備到前面或者后面。
圖示1
6個自由度(6DOF)追蹤維持一個AR場景不管你怎么移動或者旋轉。虛擬的模型位置不會隨著你設備的移動而改變。(除了特殊需求之外)
f76d63a3-7620-40d1-9e52-0d9ad6329678-1.png
如果你啟用了planeDetection設置,ARKit分析場景(scene)找到真實世界的平面。 對于檢測到的每個平面,ARKit會自動添加一個ARPlaneAnchor
到會話中。
二.API介紹
ARWorldTrackingConfiguration
/**
平面檢測類型
*/
public struct PlaneDetection : OptionSet {
public init(rawValue: UInt)
/** 場景中的水平平面檢測 */
public static var horizontal: ARWorldTrackingConfiguration.PlaneDetection { get }
}
}
/**
AR會話配置的抽象基類.
*/
ARConfiguration
/**
判斷設備是否支持 ARConfiguration.
*/
open class var isSupported: Bool { get }
/**
設備是否支持將真實世界的設備運動映射到3D場景坐標系中的值。
默認ARWorldAlignmentGravity.
*/
open var worldAlignment: ARConfiguration.WorldAlignment
/**
是否分析場景中的光照
默認YES
*/
open var isLightEstimationEnabled: Bool
/**
是否捕獲或者提供音頻
默認NO
*/
open var providesAudioData: Bool
/**
一個運行全局追蹤的配置.
提供對設備6個自由度的追蹤
通過尋找場景中的特征點來,并進行全局追蹤的碰撞測試來確定模型的框架.
會話暫停后追蹤也就不會更新了.
*/
ARWorldTrackingConfiguration :
/**
平面檢測的一個類型
如果進行設置,新的平面將會持續被檢測和更新, 被檢測到的平面會被作為一個平面錨點添加到會話中.當兩個平面合并的時候,新的平面會被移除,默認ARPlaneDetectionNone.
*/
open var planeDetection: ARWorldTrackingConfiguration.PlaneDetection
public init()
/**
只追蹤方向的配置
設備沿xyz三軸移動的追蹤
*/
AROrientationTrackingConfiguration : ARConfiguration {
public init()
}