1

我正在 SceneKit 中编写一个三维力导向图,其中我将节点建模为具有固定电荷和质量的物理球体。

这些球体必须施加径向引力场和电场,以实现所需的动力学:

通常,基于胡克定律的弹簧状吸引力用于将图边缘的成对端点相互吸引,同时基于库仑定律的带电粒子的排斥力用于分离所有节点对。

当人们注意到SCNNode提供的只是一个physicsField属性时,就会出现问题。

目前,如果没有两个单独的物理节点占用相同的空间,我认为没有办法实现这一点(恶心和不可能?)。我尝试使用静态/动态物理实体插入子实体以适应多个字段,但是这种方法似乎根本不起作用(即没有任何反应)。


在一个有点相关的注释上——SceneKit 的物理引擎对我来说感觉相当不完整,因为 3D 力导向图形绘制属于此类框架的典型用法。

例如,SceneKit 没有 3D 版本SKPhysicsJointSpring,这使得实现节点到节点的边缘吸引物理非常繁琐。虽然它确实具有功能SCNPhysicsBehavior,但几乎没有关于对其进行子类化以创建自定义行为的文档。

更糟糕的是,公共接口没有提供覆盖的方法,这使得逆向工程对于 App Store 的使用来说是有风险和不安全的:

open class SCNPhysicsBehavior : NSObject, NSSecureCoding {
}
4

1 回答 1

0

免责声明:我没有编写任何 SceneKit 代码,这只是基于阅读文档,所以请用大量的盐来回答这个问题。

SCNPhysicsField确定受影响节点的位置如何随时间变化。一次处理一个字段很简单,但当不同类型的字段交互时就不那么简单了。我怀疑不可能既正确又快速地计算同时影响一个节点的多个字段的影响,这就是为什么你不能physicsField一次在一个节点上拥有 s 的组合。

但是,您可以在 SceneKit 中创建一个自定义字段SCNPhysicsField.customField(),并让该字段仅应用于该字段节点的子节点。然后,在您的实现中SCNFieldForceEvaluator,您可以自己执行处理胡克定律和库仑定律的计算来定位所有子节点。

一种更简单但不太准确的方法(我不确定它是否会起作用)是纯粹使用电场来完成,子节点的极性与其父节点的极性相反。

于 2017-04-11T04:41:58.237 回答