2017-04-08 59 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

相關問題