日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARKit从入门到精通(2)-ARKit工作原理及流程介绍

發布時間:2024/9/30 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARKit从入门到精通(2)-ARKit工作原理及流程介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請注明出處:ARKit從入門到精通(2)-ARKit工作原理及流程介紹

  • 1.1-寫在前面的話
  • 1.2-ARKit與SceneKit的關系
  • 1.3-ARKit工作原理
    • 1.3.1-ARSCNView與ARSession
    • 1.3.2-ARWorldTrackingSessionConfiguration與ARFrame
  • 1.4-ARKit工作完整流程

1.1-寫在前面的話

  • 初次接觸ARKit,很多人會為其復雜的架構關系而感到畏懼。這里筆者將以最基礎簡介的方式帶領一下一睹蘋果原生AR(虛擬增強現實)的風采

  • ARKit并不是一個獨立就能夠運行的框架,而是必須要SceneKit一起用才可以,換一句話說,如果只有<ARKit>,而沒有<SceneKit>,那么ARKit和一般的相機沒有任何區別

  • 由于筆者從事多年的iOS應用開發,并沒有從事過3D游戲的開發(只是業余愛好寫了一個3D打飛機的游戲),所以在本篇介紹ARKit的過程中,我們將以最小的篇幅來介紹SceneKit,畢竟如果沒有豐富的3D游戲開發經驗,那么光是相機捕捉到的2D界面如果轉化為3D世界的矩陣都非常難以理解

    • 關于3D系統X/Y/Z,與4x4矩陣等之間的轉換及關系,不會過多深入,筆者將保證每一個不懂3D游戲開發的人都可以學習如何使用ARKit
    • 筆者認為:ARKit最難的部分在于3D坐標的矩陣轉換
  • 筆者介紹ARKit的流程大概如下

    • 1.介紹ARKit的工作原理及流程(本篇)
    • 2.通過對ARKit的原理及流程的了解,我們自定義實現ARKit
    • 3.介紹ARKit框架中的所有API,PS:是翻譯官方整個ARKit框架中所有的API………………~
    • 4.介紹ARKit框架中幾個重量級的類ARScnView,ARSession,ARCamera
    • 5.ARKit實現捕捉現實世界中的平地,并將虛擬物體添加到平地中
    • 6.ARKit實現讓虛擬物體跟隨相機移動
      • 筆者沒有單獨的3D模型,這里主要以蘋果官方給出的參考3D模型(飛機)來實現
    • 7.ARKit實現讓虛擬物體圍繞攝像機(拿著iPhone的人)旋轉

1.2-ARKit與SceneKit的關系

  • 1.在上一小節中介紹過,AR技術叫做虛擬增強現實,也就是在相機捕捉到的現實世界的圖像中顯示一個虛擬的3D模型。這一過程可以分為兩個步驟:

    • 一:相機捕捉現實世界圖像
      • 由ARKit來實現
    • 二:在圖像中顯示虛擬3D模型
      • 由SceneKit來實現
  • 2.下圖是一個<ARKit>與<SceneKit>框架關系圖,通過下圖可以看出

    • 繼承:子類擁有父類所有的屬性及方法

    • 1.<ARKit>框架中中顯示3D虛擬增強現實的視圖ARSCNView繼承于<SceneKit>框架中的SCNView,而SCNView又繼承于<UIKit>框架中的UIView

      • UIView的作用是將視圖顯示在iOS設備的window中,SCNView的作用是顯示一個3D場景,ARScnView的作用也是顯示一個3D場景,只不過這個3D場景是由攝像頭捕捉到的現實世界圖像構成的
    • 2.ARSCNView只是一個視圖容器,它的作用是管理一個ARSession,筆者稱之為AR會話。
      • ARSession的作用及原理將在本篇下一小節介紹
    • 3.在一個完整的虛擬增強現實體驗中,<ARKit>框架只負責將真實世界畫面轉變為一個3D場景,這一個轉變的過程主要分為兩個環節:由ARCamera負責捕捉攝像頭畫面,由ARSession負責搭建3D場景。
    • 4.在一個完整的虛擬增強現實體驗中,將虛擬物體現實在3D場景中是由<SceneKit>框架來完成中:每一個虛擬的物體都是一個節點SCNNode,每一個節點構成了一個場景SCNScene,無數個場景構成了3D世界
    • 5.綜上所述,ARKit捕捉3D現實世界使用的是自身的功能,這個功能是在iOS11新增的。而ARKit在3D現實場景中添加虛擬物體使用的是父類SCNView的功能,這個功能早在iOS8時就已經添加(SceneKit是iOS8新增)
      • 今后在介紹使用ARSCNView時將不再累述這一關系,可以簡單的理解為:ARSCNView所有跟場景和虛擬物體相關的屬性及方法都是自己父類SCNView的

0301.png

1.3-ARKit工作原理

1.3.1-ARSCNView與ARSession

  • 1.ARKit提供兩種虛擬增強現實視圖,他們分別是3D效果的ARSCNView和2D效果的ARSKView(關于3D效果和2D效果區別以及在上一小節介紹),無論是使用哪一個視圖都是用了相機圖像作為背景視圖(這里可以參考iOS自定義相機中的預覽圖層),而這一個相機的圖像就是由<ARKit>框架中的相機類ARCamera來捕捉的。

  • 2.ARSCNView與ARCamera兩者之間并沒有直接的關系,它們之間是通過AR會話,也就是ARKit框架中非常重量級的一個類ARSession來搭建溝通橋梁的

    • 在iOS框架中,凡是帶session或者context后綴的,這種類一般自己不干活,作用一般都是兩個:1.管理其他類,幫助他們搭建溝通橋梁,好處就是解耦 2.負責幫助我們管理復雜環境下的內存
      • context與session不同之處是:一般與硬件打交道,例如攝像頭捕捉ARSession,網卡的調用NSURLSession等使用的都是session后綴。沒有硬件參與,一般用context,如繪圖上下文,自定義轉場上下文等
  • 3.要想運行一個ARSession會話,你必須要指定一個稱之為會話追蹤配置的對象:ARSessionConfiguration,ARSessionConfiguration的主要目的就是負責追蹤相機在3D世界中的位置以及一些特征場景的捕捉(例如平面捕捉),這個類本身比較簡單卻作用巨大

    • ARSessionConfiguration是一個父類,為了更好的看到增強現實的效果,蘋果官方建議我們使用它的子類ARWorldTrackingSessionConfiguration,該類只支持A9芯片之后的機型,也就是iPhone6s之后的機型

0302.png

1.3.2-ARWorldTrackingSessionConfiguration與ARFrame

  • 1.ARSession搭建溝通橋梁的參與者主要有兩個ARWorldTrackingSessionConfiguration與ARFrame

  • 2.ARWorldTrackingSessionConfiguration(會話追蹤配置)的作用是跟蹤設備的方向和位置,以及檢測設備攝像頭看到的現實世界的表面。它的內部實現了一系列非常龐大的算法計算以及調用了你的iPhone必要的傳感器來檢測手機的移動及旋轉甚至是翻滾

    • 我們無需關心內部實現,ARKit框架幫助我們封裝的非常完美,只需調用一兩個屬性即可
  • 3.當ARWorldTrackingSessionConfiguration計算出相機在3D世界中的位置時,它本身并不持有這個位置數據,而是將其計算出的位置數據交給ARSession去管理(與前面說的session管理內存相呼應),而相機的位置數據對應的類就是ARFrame

    • ARSession類一個屬性叫做currentFrame,維護的就是ARFrame這個對象
  • 4.ARCamera只負責捕捉圖像,不參與數據的處理。它屬于3D場景中的一個環節,每一個3D Scene都會有一個Camera,它覺得了我們看物體的視野

  • 它們三者之間的關系看起來如下圖:


0303.png
  • ARCamera在3D世界的位置看起來是這樣的

0304.png

1.4-ARKit工作完整流程

  • ARKit框架工作流程可以參考下圖:
    • 1.ARSCNView加載場景SCNScene
    • 2.SCNScene啟動相機ARCamera開始捕捉場景
    • 3.捕捉場景后ARSCNView開始將場景數據交給Session
    • 4.Session通過管理ARSessionConfiguration實現場景的追蹤并且返回一個ARFrame
    • 5.給ARSCNView的scene添加一個子節點(3D物體模型)
      • ARSessionConfiguration捕捉相機3D位置的意義就在于能夠在添加3D物體模型的時候計算出3D物體模型相對于相機的真實的矩陣位置
        • 在3D坐標系統中,有一個世界坐標系和一個本地坐標系。類似于UIView的Frame和Bounds的區別,這種坐標之間的轉換可以說是ARKit中最難的部分

0305.png
  • 下一小節:ARKit從入門到精通(3)-ARKit自定義實現

總結

以上是生活随笔為你收集整理的ARKit从入门到精通(2)-ARKit工作原理及流程介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。