ARKit 帶你走進全新的世界 四 平面檢測

2021-09-11 13:27:50 字數 2230 閱讀 6538

上篇回顧:

上篇文章中我們簡單寫了乙個ar尺子測量距離的demo,計算距離的公式--> a(x1,y1,z1),b(x2,y2,z2),則a,b之間的距離為d=√[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2],專案中有小夥伴們說道劃線的**,其實這段**有點超出ios的東西有用到opengl的東西,含金量還是蠻高的

func line(to vector:scnvector3,color:uicolor) -> scnnode {

let indices : [uint32] = [0,1]//指數

let source = scngeometrysource(vertices: [self,vector]) // 建立乙個幾何容器(頂點)

let element = scngeometryelement(indices: indices, primitivetype: .line)//用線的方式來創造乙個幾何元素(線)

let geomtry = scngeometry(sources: [source], elements: [element])//幾何

geomtry.firstmaterial?.diffuse.contents = color//渲染顏色

let node = scnnode(geometry: geomtry)//返回乙個節點

return node

本篇介紹:

ar應平面檢測來說並不稀奇,首先我們來說一下錨點與節點,可以這樣說對應錨點來說,可以是任意乙個形態的事物,並且不侷限於虛擬物件,比如說我們現實中的桌子、窗台、床等等都可以理解錨點,當然虛擬物件也可以,對於虛擬世界來說,萬物節節點,比如說arkit-帶你走進全新的世界(二:動畫與光線處理)篇中的太陽、地球、月球包括黃道與白道,又或者說是arkit-帶你走進全新的世界(三:追蹤/距離感應/ar尺子)篇中的線與文字都可以理解為節點,arkit為我們提供了乙個**方法"func renderer(_ renderer: scnscenerenderer, didadd node: scnnode, for anchor: aranchor) "當我們檢測到錨點的時候會去呼叫這個方法,一旦我們檢測到平面錨點我們就可以去對之做一些視覺化的東西,將整個平面的角度與格局展示出來,**方法中anchor也就是錨的意思

效果展示:

實現思路:

1.實現**方法

2.建立幾何

3.建立節點

4.渲染

5.新增幾何到節點

步驟:1.在檢測到錨點的時候去搞事情

func renderer(_ renderer: scnscenerenderer, didadd node: scnnode, for anchor: aranchor) {

搞事情

2.建立平面幾何

let plane = scnplane(width: cgfloat(planeanchor.extent.x), height: cgfloat(planeanchor.extent.z))

因為此時我們處在乙個三維座標中,此時我們要處理平面的寬高的話取得值也就是x值和z值如下圖所示

3.建立節點

let planenode = scnnode()

注意:此時建立節點的時候,還不知道所新增的幾何是怎樣的乙個幾何,交由後面處理

4.渲染幾何,還是老**了,相信大家已經熟悉了

planenode.position = scnvector3(x: planeanchor.center.x, y: 0, z: planeanchor.center.z)

planenode.transform = scnmatrix4makerotation(-float.pi/2, 1, 0, 0)

let gridmaterial = scnmaterial()

gridmaterial.diffuse.contents = uiimage(named: "art.scnassets/grid.png")

plane.materials = [gridmaterial]

planenode.geometry = plane

5.渲染完成後將幾何新增為子節點

node.addchildnode(planenode)

c部落格位址

Python帶你走進鍊錶的世界

a 1 2,3 4 for i in range len a print id a i if i len a 1 break print id a i 1 id a i 下面是最終的執行結果 140722440987280 32140722440987312 32140722440987344 32...

帶你走進設計模式 內部類的世界

單例模式 保證類只能存在乙個物件 懶漢式 呼叫功能的時候才建立物件 餓漢式 類第一次載入完成之後就建立物件 當多個人同時呼叫靜態方法時,懶漢容易建立不同物件 實現步驟 構造器私有化 私有的靜態的該類的引用 公共的訪問方式 餓漢式 public class single01 public static...

帶你走進ATM的世界實戰篇

atm atm account 賬戶 balancelnquiry 查詢餘額 bankdatabase 銀行資料庫 cashdispenser 取款口 deposit 存款 depositslot 存款口 keypad 鍵盤 screen 螢幕 transaction 交易 withdrawal 取...