1.錨點
這個概念一開始不太容易理解。那么如何理解錨點呢?
這樣假如我們現(xiàn)在正在創(chuàng)作一本電子版小說,我發(fā)現(xiàn)每次繼續(xù)寫小說都要拉到文檔最后好麻煩⊙_⊙好了其實要解決這個問題也挺簡單的,我在開始添加個結尾書簽直接跳到結尾就好了●ω●,書簽多方便想鏈接到哪里都可以,好了我們加了一個結尾書簽方便我們每次寫新的內容。
但是后來我發(fā)現(xiàn)一個問題,我每次寫完都要修改這個書簽的位置o_O,因為每次寫完新的內容結尾位置也改變了...好不快樂~~好吧我想到一個辦法在文章結尾處加一個"End"的字符,讓書簽指向"End"每次我都在"End"前面添加內容,這樣也算完美的解決了問題了吧
~~~在這里我們的書簽,永遠說他在"物體"的相對位置(書簽指向"End"第一個字符的位置,一開始我們加的"結尾書簽"也是指向最后一個字符的后面),這里書簽也就是"錨點"。
實際中我們一般讓錨點指點一個特殊的點稱為"定位點",并攜帶一些其他信息,來表示"物體"(一般我們還會在書簽中加入標題信息,有時我們也會在書簽中加入某個章節(jié)的字數,以便我們可以直接對所有章節(jié)進行分割)
2.用于表示現(xiàn)實世界的對象和位置類
ARAnchor
AR錨點,可用于表示對象在AR場景中真實世界的位置和方向。
ARPlaneAnchor
AR平面錨點,有關在AR會話中檢測到的真實平面的位置和方向的信息,ARPlaneAnchor繼承自ARAnchor
ARHitTestResult
通過檢查AR會話的設備攝像機視圖中一個點找到有關現(xiàn)實世界表面的信息。
3.用于相機和場景細節(jié)類
ARFrame
作為AR會話的一部分捕獲的視頻圖像和位置跟蹤信息。
ARCamera
有關AR會話中拍攝的視頻幀的攝像機位置和成像特性的信息。
ARLightEstimate
與AR會話中捕獲的視頻幀相關聯(lián)的估計場景照明信息。
4.AR代理
(1)ARSessionObserver
你可以實現(xiàn)的方法來響應AR會話狀態(tài)的更改。ARSessionDelegate、ARSCNViewDelegate、ARSKViewDelegate這此協(xié)議定義了共同的可選方法,以及協(xié)議。當采用這些協(xié)議之一時,可以實現(xiàn)該協(xié)議的方法:
func session(ARSession, cameraDidChangeTrackingState: ARCamera)
通知代表ARKit設備位置跟蹤質量的變化。
func sessionWasInterrupted(ARSession)
告訴代表會話已暫時停止處理幀和跟蹤設備位置。
func sessionInterruptionEnded(ARSession)
告訴代表會話已恢復處理幀和跟蹤設備位置。
(2)ARSessionDelegate
如果您需要直接使用ARFrame捕獲會話的對象或直接跟蹤會話的跟蹤ARAnchor對象集的更改請執(zhí)行此協(xié)議。通常情況下,你建立一個自定義視圖顯示AR時,采用這個協(xié)議的內容,如果顯示與SceneKit或SpriteKit內容中,ARSCNViewDelegate或ARSKViewDelegate協(xié)議提供類似的信息,并與技術集成。此協(xié)議擴展了ARSessionObserver協(xié)議。
func session(ARSession, didUpdate: ARFrame)
向代理人提供新捕獲的攝像機圖像和附帶的AR信息。
func session(ARSession, didAdd: [ARAnchor])
告訴代表一個或多個錨點已被添加到會話中。
func session(ARSession, didUpdate: [ARAnchor])
告訴代表會話已調整一個或多個錨點的屬性。
func session(ARSession, didRemove: [ARAnchor])
告訴代表一個或多個錨已從會話中刪除。
(3)ARSKViewDelegate
實現(xiàn)此協(xié)議以提供ARAnchor與視圖的AR會話跟蹤的對象相對應的SpriteKit內容,或者管理視圖對這些內容的自動更新。此協(xié)議擴展了ARSessionObserver協(xié)議。
func view(ARSKView, nodeFor: ARAnchor)
請求委托人提供一個對應于新添加的錨點的SpriteKit節(jié)點。
func view(ARSKView, didAdd: SKNode, for: ARAnchor)
告訴代理人,一個與新的AR錨點相對應的SpriteKit節(jié)點已被添加到場景中。
func view(ARSKView, willUpdate: SKNode, for: ARAnchor)
告訴委托人SpriteKit節(jié)點的屬性將被更新以匹配其相應錨點的當前狀態(tài)。
func view(ARSKView, didUpdate: SKNode, for: ARAnchor)
告知委托人SpriteKit節(jié)點的屬性已更新,以匹配其對應錨點的當前狀態(tài)。
func view(ARSKView, didRemove: SKNode, for: ARAnchor)
告訴代理人,與AR錨點相對應的SpriteKit節(jié)點已從場景中刪除。
(4)ARSCNViewDelegate
實現(xiàn)此協(xié)議以提供ARAnchor與視圖的AR會話跟蹤的對象相對應的SceneKit內容,或者管理視圖對這些內容的自動更新。此協(xié)議擴展了ARSessionObserver協(xié)議。
func renderer(SCNSceneRenderer, nodeFor: ARAnchor)
請求委托人提供一個對應于新添加的錨點的SceneKit節(jié)點。
func renderer(SCNSceneRenderer, didAdd: SCNNode, for: ARAnchor)
告訴代理人,一個與新的AR錨點相對應的SceneKit節(jié)點已添加到場景中。
func renderer(SCNSceneRenderer, willUpdate: SCNNode, for: ARAnchor)
告訴代理,SceneKit節(jié)點的屬性將被更新以匹配其相應錨點的當前狀態(tài)。
func renderer(SCNSceneRenderer, didUpdate: SCNNode, for: ARAnchor)
告訴代理人,一個SceneKit節(jié)點的屬性已被更新,以匹配其相應錨點的當前狀態(tài)。
func renderer(SCNSceneRenderer, didRemove: SCNNode, for: ARAnchor)
告訴代理人,已將已刪除的AR錨點對應的SceneKit節(jié)點從場景中刪除。