Tilemap 2D现实流体物理学

时间:2012-12-09 21:01:15

标签: c++ 2d physics

我有兴趣尝试为2D游戏创建逼真的流体(水)。这场比赛类似于Terraria。我听说你怎么能在场景上拍下一堆碰撞粒子并在场景上渲染,瞧瞧真实的动作水。

Terraria使用的是基于水的水,我不喜欢它..我想要更先进的东西。

我考虑使用子弹3D物理(box2d有限制我会命中)。对于非碰撞的粒子效果,我正在考虑使用像SPARK这样的东西,因为我认为它会给我两全其美的效果。

我正在考虑的问题是,每个块是16x16,所以在1600x900场景中,大约有5千块。

所以我需要告诉物理引擎这些瓷砖是可碰撞的。当然,有空瓦被认为是不可碰撞的。

有没有人有这方面的想法?语言是C ++,但我怀疑它是否相关。

编辑:我想我将不得不陷入困境并使用基于网格的水。我想,回想起来,基于粒子只会让一切变得更加困难,但却有什么好处呢?

1 个答案:

答案 0 :(得分:1)

您的问题是关于平铺液体,但您似乎实际上在询问基于粒子的方法。

如果是这种情况,那么您正在寻找的是“平滑粒子流体动力学”,或SPH,这是一种非常流行的实时二维和三维流体模拟技术。

是的,它基本上只是一个粒子系统,每个粒子以合理的(数学上稳定的)方式响应环境中的力(重力,碰撞等),并结合约束,它们必须保持一定的距离为了使液体不可压缩。

您可以将粒子渲染为点,如果您有足够的粒子,或者您可以将它们用作派生曲面的源(例如使用行进立方体,但在2D中我不会担心)。

http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics

它具有相对容易编码的优势,并且确实可以在GPU上加速。

事实上,我认为它们可能比尝试某种基于磁贴的方法更好,而且你会得到一些更有趣的结果,例如喷射,踢在物体边缘的波浪等等。它也不是很难得到令人愉快的工作,我会试一试。