gpt4 book ai didi

swift - 我如何在 SceneKit 中组合物理场?

转载 作者:行者123 更新时间:2023-11-28 08:12:48 25 4
gpt4 key购买 nike

我在写一个三维force-directed graph在 SceneKit 中,我将节点建模为具有固定电荷和质量的物理球体。

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

Typically, spring-like attractive forces based on Hooke's law are used to attract pairs of endpoints of the graph's edges towards each other, while simultaneously repulsive forces like those of electrically charged particles based on Coulomb's law are used to separate all pairs of nodes.

当注意到 SCNNode 只提供一个 physicsField 属性时,问题就出现了。

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


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

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

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

open class SCNPhysicsBehavior : NSObject, NSSecureCoding {
}

最佳答案

免责声明:我没有编写任何 SceneKit 代码,这只是基于阅读文档,所以请对这个答案持半信半疑的态度。

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

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

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

关于swift - 我如何在 SceneKit 中组合物理场?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com