0

SceneKit 是否有一种本地方法可以在 SCNView 内的给定位置(例如(0,0,0))查找节点?

假设一个 SCNView 包含一个 SCNNode,它充当其他 SCNNode 的层。是否有一种本地方法可以找到层内特定位置的所有节点?

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

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

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

4

2 回答 2

2

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

于 2016-05-01T20:42:04.887 回答
1

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

您可以在目标点放置一个不可见的主体,然后等待碰撞委托回调。

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

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

一般来说,使用 SceneKit,顺便说一句,检查所有适用的协议参考。许多常见的调用是基于协议而不是类。

于 2016-05-01T19:23:50.513 回答