在Box 2D中模拟一袋液体
答
User99345的答案是我会去的液体袋模型的方式,但如果你想使用未修改的Box2D库,您可以使用b2EdgeShape
情况下,b2RevoluteJoint
模拟它, b2CircleShape
。无论这是一个足够好的方法来模拟它,你必须做出决定。
其他基础/洞察这个...
看到你的问题后,我把一个模型的液体袋为my dev branch of my fork of Box2D一个试验平台演示。该演示被称为“磁盘袋”,因为这基本上是演示模型的内容,它在文件BagOfDisks.hpp
中。该代码使用一系列由旋转关节连接的边缘形状来模拟可变形容器,并用圆形填充(在我的叉子中称为DiskShape
)以模拟液体。如果您构建叉子的库和测试平台,您可以亲自看看模型的外观。
由于液体袋的模式,我认为我鞭打在一起的代码有类似的缺点意见如下:
- 它必须计算比使用像谷歌的LiquidFun粒子模拟效率较低确实。
- 我不相信在Box2D(或我的叉子)中实现的关节总能确保遏制。这是因为我不认为关节能够100%防止连接形状的替代移动。
- 在演示中的“包”并不像它的顶部那样均匀地平放,就像我期望一个普通的液体袋一样。
- 这个“包”不能塑造我期望袋子顶部所要做的浮力。
我认为可以从用户级别完成事情以改善模型的行为,但我怀疑从用户级别可以做的更少以提高模型的速度。按照用户级别,我的意思是作为Box2D库的用户。
虽然我的fork已经对Box2D库进行了很多更改(特别是在命名上),但我不相信我在演示本身中所做的操作不能使用原始Box2D库和语法进行非常接近的复制我在第一段中使用了b2EdgeShape
,b2RevoluteJoint
和b2CircleShape
的实例。
至于在Box2D已经使用的方程之外对什么物理方程式进行建模会有用,我很遗憾地说现在我不知道。然而,我对此感兴趣,并且正在研究它。物理方程当然是可用的,但是我从Box2D用户级别知道的最接近的相关工作是iforce2d放在他的Buoyancy网页中。
希望这个答案有助于对已经说过的内容有帮助。
你需要做什么? – bigcodeszzer
你或许可以建立一些像这样的行为,但它取决于你需要它的东西。如果它只是图形,或者如果你需要碰撞。它需要多准确,等等 – bigcodeszzer
@bigcodeszzer它是为了碰撞和与用户的互动,所以碰撞是必要的 –