Zac*_*ler 1 ios scenekit swift
我有一个关于在 SceneKit 中检测触摸的问题。我已经能够找到有关如何检测何时触摸某个物体的问题,但我需要更具体的东西。我需要能够判断物体的某个部分何时被触摸。为了更好地解释一下,我有一个人类的 3D 模型,我需要能够分辨何时触摸头部或触摸腿部等。如果需要任何进一步的说明,我很乐意提供,我我只是不太确定如何实现这一点。
扩展 NicoS 的答案:命中测试就是做到这一点的方法。但实际上,您有多种可能的选项来识别命中测试结果中的模型部分,因此您可以选择最适合您的内容创建管道的选项。
正如其他答案中所述,如果您可以将模型分解为单独的模型,每个模型都托管在具有自己节点的场景中,则可以使用该属性SCNHitTestResult.node来找出单击/点击/抓取哪个节点。
如果您无法完全拆分模型,您可以将其拆分为仍位于同一资产/节点中的多个部分。SceneKit 调用这些几何元素,一些创作工具将它们称为子网格,低级渲染代码将其称为具有单独索引缓冲区的单独绘制调用,等等。当您有单独的几何元素时(这是绘制具有多种材质的一个几何体所必需的)几何体的不同部分),您可以使用属性在命中测试中识别它们SCNHitTestResult.geometryIndex。(此方法用于链接到的 HalMueller 答案中。)
如果控制网格的纹理映射数据,则可以用来textureCoordinates(withMappingChannel:)获取单击点的纹理坐标,然后在对感兴趣区域进行颜色编码的纹理图像中查找它们。(您可以在本文中获得此想法背后的理论的总体概述,尽管该实现并非特定于 SceneKit。)
如果您的模型已针对骨骼动画进行了绑定,则可以使用该SCNHitTestResult.boneNode属性来获取对单击点处的几何变形影响最大的骨骼。
| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |