首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 11 SceneKit hitTest:SceneKit选项:失败

iOS 11 SceneKit hitTest:SceneKit选项:失败
EN

Stack Overflow用户
提问于 2017-09-21 20:44:33
回答 2查看 942关注 0票数 2

我面临着使用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次点击的尝试,都是“蓝色”的,与地形没有任何关系。

有时击中是“远离”的地形,有时他们之间的相机和地形。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-01 22:51:33

四年后,我又回到了这个问题上,找到了解决我原来的问题的办法。

在苹果发布iOS 11.2之后,多次点击被解决了,但我们遇到了一个“没有点击”的难题。

问题在于原来问题中没有充分解释的具体情况。在一个地形最初被计算和显示之后,我们总是得到第一个命中。然后,我们,pan,,地形中心,中点和重建一个新的地形扇区。在这个过程中,我们通过重用几个几何元素来节省计算,只改变地形顶点的z坐标。问题在于如何重用三角形条形SCNGeometryElement。从现在开始,通过重用这个对象构建的任何地形看起来都不错,但是hitTest方法失败了。

事实证明,SCNGeometryElement不能被重用,应该重新构建。最初的工作守则是:

代码语言:javascript
复制
t_strip = [geom_cour geometryElementAtIndex:0];

要解决HitTest: failure,我们必须这样做:

代码语言:javascript
复制
//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用作模板,用于重新创建具有完全相同值的新模板。

票数 0
EN

Stack Overflow用户

发布于 2017-11-05 19:59:45

我在iOS 11上也面临着同样的问题。我的解决方案:

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46352867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档