在Box 2D中模拟一袋液体

时间:2017-06-05 19:42:02

标签: java box2d physics game-physics scene2d

我如何在Box 2D中建模一个膨胀的流体袋,即什么物理方程在建模时会有用?触摸时水袋会移动,但这是唯一的互动。任何地方的方程式或模型都会非常感激!

2 个答案:

答案 0 :(得分:1)

您可以使用库来实现此目的。谷歌的LiquidFun非常好http://google.github.io/liquidfun/

答案 1 :(得分:0)

User99345的答案就是我为一袋液体建模的方式,但如果您想使用未经修改的Box2D库,您可以使用b2EdgeShapeb2RevoluteJoint的实例对其进行建模,和b2CircleShape。无论这种模型是否足够好,你都必须做出决定。

此基础/洞察力......

在看到你的问题之后,我在my dev branch of my fork of Box2D中将一个液体袋的模型放在一起作为Testbed演示。该演示被称为“Bag of Disks”,因为它基本上就是演示模型,它位于文件BagOfDisks.hpp中。该代码使用一系列由旋转关节连接的边缘形状来对可变形容器进行建模,并用圆形(在我的叉中称为DiskShape)填充它以模拟液体。如果您构建库和我的fork的Testbed,您可以自己查看模型的外观。

作为一袋液体的模型,我认为我鞭打的代码有以下缺点:

  • 它的计算效率必须低于使用像Google的LiquidFun那样的粒子模拟。
  • 我不相信Box2D(或我的叉子)中目前实现的关节,总能确保收​​容。那是因为我不相信关节能够100%防止连接形状的替代运动。
  • 演示中的“包”在它的顶部不均匀,就像我期望正常的液体袋一样。
  • “包”并没有模仿我期望袋子顶部的浮力。

我认为事情可以从用户级别完成以改善模型的行为,但我怀疑可以从用户级别完成更少的工作以提高模型的速度。按用户级别,我的意思是作为Box2D库的用户。

虽然我的fork已经对Box2D库进行了很多更改(特别是在命名中),但我不相信我在演示中所做的事情不能使用原始的Box2D库和语法非常接近地再现。我在第一段中使用b2EdgeShapeb2RevoluteJointb2CircleShape的实例说。

至于在Box2D已经使用的方程式之外建模这些物理方程有用,我很遗憾地说我目前不知道。我对此很感兴趣并且正在研究它。当然可以使用物理方程式,但我从Box2D用户级别了解到的最接近的相关工作是将iforce2d放在他的Buoyancy网页中。

希望这个答案对已经说过的内容有所帮助。