2016-11-08 37 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