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