首页 文章

SceneKit:在 SCNView 中的某个位置查找节点的本地方式?如果没有,使用字典将位置映射到节点?

提问于
浏览
0

在 SceneNit 中是否有一种原生方式可以在 SCNView 中的给定位置 e.g. ,(0,0,0)找到一个节点?

假设 SCNView 包含一个 SCNNode,它充当其他 SCNNode 的层。是否有本地方法来查找图层中特定位置的所有节点?

阅读类文档,似乎唯一的选择是创建和维护将位置映射到节点的自定义数据结构。

但希望有一些原生的东西,因为这似乎是一个常见的问题。

如果需要自定义数据结构,字典是否是在 Swift 中维护 10K 节点选项卡的最有效方法?

2 回答

  • 2

    节点符合SCNBoundingVolume,因此您可以大致了解节点是否“包含”原点。您还可以使用-[SCNNode - hitTestWithSegmentFromPoint:toPoint:options:]和不同的选项来优化搜索。

  • 1

    虽然我从未尝试过,但看起来 SCNPhysicsWorld 可以帮助你做到这一点。您需要在要跟踪或查询的每个节点上使用物理主体。

    您可以在目标点放置一个不可见的主体,并等待冲突委托回调。

    还有convexSweepTestWithShape(_ shape: SCNPhysicsShape, fromTransform from: SCNMatrix4, toTransform to: SCNMatrix4, options options: [String : AnyObject]?) -> [SCNPhysicsContact]

    另一种方法是使用 SCNSceneRenderer 的nodesInsideFrustumWithPointOfView函数,使用正交 SCNCamera,这样就可以获得矩形或立方锥体。

    通常使用 SceneKit,顺便说一下,检查所有适用的协议引用。许多常见的调用都是在协议而不是类。

相关问题