2016-11-08 32 views
1

檢測觸摸我有一個大約在SceneKit檢測觸摸問題。我已經能夠找到關於如何檢測某個對象何時被觸摸的問題,但我需要一些更具體的東西。我需要能夠分辨對象的某個部分何時被觸摸。爲了更好地解釋了一下,我有一個人的3D模型,我需要能夠告訴說,當頭部被觸摸或腿被觸摸等,如果需要任何進一步澄清,我將很高興提供它,我我不太清楚如何做到這一點。在SceneKit

+0

可能的重複[識別觸摸立方體命中的面從Swift-Scene Kit開始](http://stackoverflow.com/questions/35153302/identify-face-of-a-cube-hit-在觸摸 - 開始在迅速場景工具包) –

回答

3

要在NICOS的回答擴大:hit testing是做到這一點的方式。但實際上,您有幾種可能的選項來確定命中測試結果中的模型部件,因此您可以選擇最適合您的內容創建管道的部件。

  1. 在其他的答案提到的,如果你能打破你的模型成獨立的模型,每一個與它自己的節點現場託管,可以使用SCNHitTestResult.node屬性找出被點擊的節點/輕敲/抓起。

  2. 如果不能徹底分裂的模型,你可以將它拆分成多個部分仍住在同一資產/節點。 SceneKit調用這些幾何元素,某些創作工具叫他們子網,低級別的渲染代碼調用它與一個單獨的索引緩衝區等單獨繪製調用當你有獨立的幾何元素(這是必要的繪製一個幾何在幾何體的不同部分使用多種材料),您可以在使用SCNHitTestResult.geometryIndex屬性進行命中測試時識別它們。 (這種方法在answer HalMueller linked to使用。)

  3. 如果你控制了網格紋理貼圖數據,你可以使用textureCoordinates(withMappingChannel:)以獲取點擊的點紋理座標,然後看看他們的紋理圖像在其中對顏色感興趣的人羣進行了顏色編碼。 (你可以得到這背後的想法this article理論的概述,但執行不特定於SceneKit。)

  4. 如果模型操縱的skeletal animation,你可以使用SCNHitTestResult.boneNode屬性來獲取骨對點擊點處的幾何變形最負責任。

+0

這工作,謝謝你,並感謝你尼科斯以及! –

2

命中測試是要走的路。但是您的3D模型需要進行調整。你需要在你最喜歡的3D編輯器中給你想要的專有名稱。然後你可以在SCNSceneRenderer上使用HitTest函數。

例如:光線是由你的手指來觸摸點下方的3D模型的位置鑄造。 hitTest函數將爲您提供一組SCNHitResults。該陣列中的第一個對象是用戶可見的最前面的對象。然後,您可以檢查node.name是否有您想要查找的名稱。

你可以在這裏找到更多的信息: https://developer.apple.com/reference/scenekit/scnscenerenderer/1522929-hittest https://developer.apple.com/reference/scenekit/scnhittestresult