我有兴趣尝试为 2D 游戏创建逼真的流体(水)。这个游戏类似于泰拉瑞亚。我听说过如何在场景中拍打一堆碰撞粒子并在其上进行渲染,瞧,逼真的水。
Terraria 使用基于瓷砖的水,我不喜欢它……我想要更高级的东西。
我考虑过使用子弹 3D 物理(box2d 有我会达到的限制)。对于非碰撞粒子效果,我正在考虑使用 SPARK 之类的东西,因为我认为这会让我两全其美。
我正在考虑的问题是,每个 block 都是 16x16,因此在 1600x900 的场景中,大约有 5000 个图 block 。
所以我需要告诉物理引擎这些瓦片是可碰撞的。当然,还有被认为是不可碰撞的空瓦片。
有人对此有想法吗?语言是 C++,但我怀疑这是否相关。
编辑:我想我将不得不陷入困境并使用基于网格的水。我想,回想起来,基于粒子的方法只会让一切变得更加困难,但有什么好处呢?
最佳答案
您的问题是关于平铺流体的,但您似乎实际上是在询问基于粒子的方法。
如果是这种情况,您正在寻找的是“平滑粒子流体动力学”或 SPH,这是一种非常流行的实时 2D 和 3D 流体模拟技术。
是的,它基本上只是一个粒子系统,每个粒子以合理(数学上稳定)的方式响应环境中的力(重力、碰撞等),并结合它们必须保持一定距离的约束为了使流体不可压缩。
您可以将粒子渲染为点,如果您有足够的粒子,或者您可以将它们用作派生表面的来源(例如使用行进立方体,但在 2D 中我不会担心)。
http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics
它的优点是相对容易编码,而且确实可以在 GPU 上加速。
事实上,我认为它们可能是比尝试某种基于图 block 的方法更好的方法,而且您会得到一些更有趣的结果,例如喷射浪花、波浪踢到物体边缘等。很难找到令人愉快的工作,我会试一试。
关于c++ - Tilemap 2D 逼真的流体物理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791782/