在 SceneNit 中是否有一种原生方式可以在 SCNView 中的给定位置 e.g. ,(0,0,0)找到一个节点?
假设 SCNView 包含一个 SCNNode,它充当其他 SCNNode 的层。是否有本地方法来查找图层中特定位置的所有节点?
阅读类文档,似乎唯一的选择是创建和维护将位置映射到节点的自定义数据结构。
但希望有一些原生的东西,因为这似乎是一个常见的问题。
如果需要自定义数据结构,字典是否是在 Swift 中维护 10K 节点选项卡的最有效方法?
节点符合SCNBoundingVolume,因此您可以大致了解节点是否“包含”原点。您还可以使用-[SCNNode - hitTestWithSegmentFromPoint:toPoint:options:]和不同的选项来优化搜索。
SCNBoundingVolume
-[SCNNode - hitTestWithSegmentFromPoint:toPoint:options:]
虽然我从未尝试过,但看起来 SCNPhysicsWorld 可以帮助你做到这一点。您需要在要跟踪或查询的每个节点上使用物理主体。
您可以在目标点放置一个不可见的主体,并等待冲突委托回调。
还有convexSweepTestWithShape(_ shape: SCNPhysicsShape, fromTransform from: SCNMatrix4, toTransform to: SCNMatrix4, options options: [String : AnyObject]?) -> [SCNPhysicsContact]。
convexSweepTestWithShape(_ shape: SCNPhysicsShape, fromTransform from: SCNMatrix4, toTransform to: SCNMatrix4, options options: [String : AnyObject]?) -> [SCNPhysicsContact]
另一种方法是使用 SCNSceneRenderer 的nodesInsideFrustumWithPointOfView函数,使用正交 SCNCamera,这样就可以获得矩形或立方锥体。
nodesInsideFrustumWithPointOfView
通常使用 SceneKit,顺便说一下,检查所有适用的协议引用。许多常见的调用都是在协议而不是类。
2 回答
节点符合
SCNBoundingVolume
,因此您可以大致了解节点是否“包含”原点。您还可以使用-[SCNNode - hitTestWithSegmentFromPoint:toPoint:options:]
和不同的选项来优化搜索。虽然我从未尝试过,但看起来 SCNPhysicsWorld 可以帮助你做到这一点。您需要在要跟踪或查询的每个节点上使用物理主体。
您可以在目标点放置一个不可见的主体,并等待冲突委托回调。
还有
convexSweepTestWithShape(_ shape: SCNPhysicsShape, fromTransform from: SCNMatrix4, toTransform to: SCNMatrix4, options options: [String : AnyObject]?) -> [SCNPhysicsContact]
。另一种方法是使用 SCNSceneRenderer 的
nodesInsideFrustumWithPointOfView
函数,使用正交 SCNCamera,这样就可以获得矩形或立方锥体。通常使用 SceneKit,顺便说一下,检查所有适用的协议引用。许多常见的调用都是在协议而不是类。