iOS AR開發-標尺,精準測量

效果圖

思路梳理

  • 場景實現
    在AR中萬物皆節點,實現AR效果,我們首先需要做的是場景拆分,將AR場景拆分為一個個節點。設定相應的劇本,就能完美的實現AR效果。
    分析我們上面的標尺效果,對場景進行拆分

    • 包含的節點(包含三位坐標)
      開始點節點、結束點節點、線條節點、文本節點
  • 實現思路

    核心:兩點坐標位置 ,兩點間距離
    
    如何表示三維坐標:
    SCNVector3
    
    如何獲取位置:
    hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]
    
    三維坐標距離計算:
    A(x1,y1,z1),B(x2,y2,z2),則A,B之間的距離為
    d=√[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2]
    
    狀態更新:
    起始點位置不變,實時更新線條和終點的位置 計算距離
    
    

類結構圖

難點梳理

  • 獲取相機與物體之間的距離
    hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]
    這個方法,是用來搜索 ARSession 檢測到的錨點還有真實世界的對象, 不是view 里 SceneKit.的內容。若是SceneKit使用如下方法:
    hitTest(<#T##point: CGPoint##CGPoint#>, options: <#T##[SCNHitTestOption : Any]?#>)

  • 4D齊次空間(燒腦內容,3D空間為什么會有四維矩陣)
    4D向量和4x4矩陣不過是對3D運算的一種方便的記憶而已。
    4D向量有4個分量,前3個是標準的x,y和z分量,第4個是w,有時稱作齊次坐標。
    為了理解標準3D坐標是怎樣擴展到4D坐標的,讓我們先看一下2D中的齊次坐標,它的形式為(x, y, w)。想象在3D中w=1處的標準2D平面,實際的2D點(x, y)用齊次坐標表示為(x, y, 1),對于那些不在w=1平面上的點,則將它們投影到w=1平面上。所以齊次坐標(x, y, w) 映射的實際2D點為(x/w, y/w)。

    因此,給定一個2D點(x, y),齊次空間中有無數多個點與之對應。所有點的形式都為(kx, ky, k),k≠0。這些點構成一條穿過齊次原點的直線。
    當w=0時,除法未定義,因此不存在實際的2D點。然而,可以將2D齊次點(x, y, 0)解釋為"位于無窮遠的點",它描述了一個方向而不是一個位置。
    4D坐標的基本思想相同,實際的3D點被認為是在4D中w=1"平面"上。4D點的形式為(x, y, z, w),將4D點投影到這個"平面"上得到相應的實際3D點(x/w, y/w, z/w)。w=0時4D點表示"無限遠點",它描述了一個方向而不是一個位置。
    4 X 4 平移矩陣
    3x3變換矩陣表示的是線性變換,不包括平移。因為矩陣乘法的性質,零向量總是變換成零向量。因此,任何能用矩陣乘法表達的變換都不包含平移。這很不幸,因為矩陣乘法和它的逆是一種非常方便的工具,不僅可以用來將復雜的變換組合成簡單的單一變換,還可以操縱嵌入式坐標系間的關系。如果能找到一種方法將3x3變換矩陣進行擴展,使它能處理平移,這將是一件多么美妙的事情啊。4x4矩陣恰好提供了一種數學上的"技巧",使我們能夠做到這一點。
    暫時假設w總是等于1。那么,標準3D向量[x, y, z]對應的4D向量為[x, y, z, 1]。任意3x3變換矩陣在4D中表示為:
    任意一個形如[x, y, z, 1]的向量乘以上面形式的矩陣,其結果和標準的3x3情況相同,只是結果是用w=1的4D向量表示的:
    現在,到了最有趣的部分。在4D中,仍然可以用矩陣乘法來表達平移,而在3D中是不可能的:
    記住,即使是在4D中,矩陣乘法仍然是線性變換。矩陣乘法不能表達4D中的"平移",4D零向量也將總是被變換成零向量。這個技巧之所以能在3D中平移點是因為我們實際上是在切變4D空間。與實際3D空間相對應的4D中的"平面"并沒有穿過4D中的原點。因此,我們能通過切變4D空間來實現3D中的平移。

下載demo-swift

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容