2017-04-08 67 views
0

我在SceneKit中编写了一个三维force-directed graph,我将节点建模为具有固定费用和质量的物理球体。如何将SceneKit中的物理字段组合在一起?

典型地,基于虎克定律的弹簧状的吸引力被用于 吸引对图形的边缘的端点:

这些球必须以达到所要求的动态施加径向引力和电场彼此相对,同时使用诸如基于库仑定律的带电粒子的排斥力来分离所有的节点对。

当发现SCNNode只提供一个physicsField属性时,会出现问题。

目前,我没有办法做到这一点,没有两个单独的物理节点占据相同的空间(yuck和不可能?)。我试过用静态/动态物体插入子体来容纳多个字段,但是这种方法似乎根本不起作用(即没有任何反应)。


在一个有点相关的说明 - SceneKit的物理引擎感到相当不完整的我,因为三维力向图绘制在这样的框架的类型化使用率下降。

例如,SceneKit不具有SKPhysicsJointSpring的3D版本,使得实现节点到节点边缘吸引物理学的工作变得非常繁琐。虽然它确实功能SCNPhysicsBehavior,但它几乎没有任何文档来创建自定义行为的子类。

更糟

仍然在公网接口没有提供任何方法来覆盖,使得反向工程它的风险和不安全的应用程序商店的使用:

open class SCNPhysicsBehavior : NSObject, NSSecureCoding { 
} 

回答

0

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

SCNPhysicsField确定受影响节点的位置如何随时间变化。一次处理一个字段很简单,但当不同类型的字段相互作用时并非如此。我怀疑无法同时计算多个字段对节点的影响是正确和快速的,这就是为什么您一次不能在节点上组合physicsField的原因。

然而,您可以使用SCNPhysicsField.customField()在SceneKit中创建一个自定义字段,并将该字段仅应用于字段节点的子节点。然后,在执行SCNFieldForceEvaluator时,您可以自己执行处理胡克定律和Couloumb定律的计算,以定位所有子节点。

一个更简单但不太准确的方法(我不确定它是否可行)将纯粹使用电场来实现,其子节点的极性与其父节点的极性相反。

+0

纯粹使用电场绝对不行。 –

+0

这与使用Hooke和Coulumb的定律不同,但它似乎可以为图形可视化提供基础。你能扩展你为什么说它不起作用吗? – roop

相关问题