我面临着使用hitTest:options: in SceneKit on iOS 11的困难情况。
在映射应用程序中,我有一个地形节点。使用hitTest:选项:我能够长时间从屏幕上的触摸中发现地形上的一个点。在iOS 11上发布的二进制文件以及iOS 10模拟器编译的Xcode 9二进制文件上,它仍然可以正常工作。
但是iOS 11二进制文件在iOS 11 SDK上给出了完全不确定的结果。从hitTest返回数组:选项:可能不包含结果,也可能包含太多。而且,大多数情况下,这些结果都是无效的。下面的图片说明了这一点。所有图像都来自没有隐藏节点的场景。
编辑:我今天使用hitTestWithSegmentFromPoint:toPoint:做了一个测试,并且得到了错误的结果。
首先是工作模拟器。

它显示了地形上的正常命中。命中点用一个红色的球来表示。它一半镶嵌在地形上,因为它的中心就在地形上。


这两幅图像显示了“射线”穿越地形3次的情况。我们得到了3次点击都正确地放置在terrain.The第二图像,改变视角,以显示3个点。
现在,失败的iOS 11情况:

在这张照片上,我们得到了一个打击,但它是“无处”之间的两座山,没有在地形上。
最后两张照片显示了其他4和16次点击的尝试,都是“蓝色”的,与地形没有任何关系。
有时击中是“远离”的地形,有时他们之间的相机和地形。


发布于 2021-11-01 22:51:33
四年后,我又回到了这个问题上,找到了解决我原来的问题的办法。
在苹果发布iOS 11.2之后,多次点击被解决了,但我们遇到了一个“没有点击”的难题。
问题在于原来问题中没有充分解释的具体情况。在一个地形最初被计算和显示之后,我们总是得到第一个命中。然后,我们,pan,,地形中心,中点和重建一个新的地形扇区。在这个过程中,我们通过重用几个几何元素来节省计算,只改变地形顶点的z坐标。问题在于如何重用三角形条形SCNGeometryElement。从现在开始,通过重用这个对象构建的任何地形看起来都不错,但是hitTest方法失败了。
事实证明,SCNGeometryElement不能被重用,应该重新构建。最初的工作守则是:
t_strip = [geom_cour geometryElementAtIndex:0];要解决HitTest: failure,我们必须这样做:
//get current triangle strip
SCNGeometryElement *t_strip_g = [geom_cour geometryElementAtIndex:0];
//create a new one using the current as a template
t_strip = [SCNGeometryElement geometryElementWithData:t_strip_g.data
primitiveType:t_strip_g.primitiveType
primitiveCount:t_strip_g.primitiveCount
bytesPerIndex:t_strip_g.bytesPerIndex];当前SCNGeometryElement用作模板,用于重新创建具有完全相同值的新模板。
发布于 2017-11-05 19:59:45
我在iOS 11上也面临着同样的问题。我的解决方案:
var hitTestOptions = [SCNHitTestOption.sortResults : NSNumber(value: true),
SCNHitTestOption.boundingBoxOnly : NSNumber(value: true)]
if #available(iOS 11.0, *) {
hitTestOptions[SCNHitTestOption.searchMode] = SCNHitTestSearchMode.all.rawValue as NSNumber
}https://stackoverflow.com/questions/46352867
复制相似问题