XCode 中的文档明确指出,当计划测试 3D 线段时,可以使用 SCNRender、SCNView 或 SCNNode 本身在 SceneKit 中对几何体进行 hitTesting。我有一个 SCNScene 的用途,它的节点没有渲染器或视图,因此我计划使用 SCNNode hitTesting。我创建了一个 SCNScene,将一个 SCNNode 放入其中并测试通过的简单射线,但我总是得到一个空的 hitList,我不明白为什么:
import Swift
import SceneKit
let boxGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0)
let boxNode = SCNNode(geometry: boxGeometry)
var scene = SCNScene()
scene.rootNode.addChildNode(boxNode)
let from = SCNVector3(x: 0, y: -2, z: 0)
let to = SCNVector3(x: 0, y: 2 , z: 0)
var hits = scene.rootNode.hitTestWithSegmentFromPoint(from, toPoint: to, options:nil) // this is always empty
if hits != nil {
if hits!.count > 0 {
var hit = (hits!.first as! SCNHitTestResult).node as SCNNode
}
}
我尝试过传递各种形式的选项,但没有任何改变。
- SCNHitTestFirstFoundOnlyKey:是或否不会改变任何东西
- SCNHitTestSortResultsKey:是或否不会改变任何东西
- SCNHitTestClipToZRangeKey:对 SCNNode 无效
- SCNHitTestBackFaceCullingKey: yes 或 no 不会改变任何东西
- SCNHitTestBoundingBoxOnlyKey: yes 或 no 不会改变任何东西
- SCNHitTestRootNodeKey:场景或boxNode的rootNOde不会改变任何东西
- SCNHitTestIgnoreHiddenNodesKey: yes 或 no 不会改变任何东西
我究竟做错了什么?