5

我有兴趣尝试为 2D 游戏创建逼真的流体(水)。这个游戏类似于泰拉瑞亚。我听说过如何在场景上拍打一堆碰撞粒子并在其上进行渲染,瞧,逼真的表演水。

Terraria 使用基于瓷砖的水,我不喜欢它。我想要更高级的东西。

我考虑过使用子弹 3D 物理(box2d 有我会达到的限制)。对于非碰撞粒子效果,我正在考虑使用 SPARK 之类的东西,因为我认为这会给我带来两全其美的效果。

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

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

有人对此有想法吗?语言是 C++,但我怀疑这是否相关。

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

4

1 回答 1

3

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

如果是这种情况,您正在寻找的是“平滑粒子流体动力学”或 SPH,这是一种在实时情况下用于 2D 和 3D 流体模拟的非常流行的技术。

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

如果你有足够多的粒子,你可以将粒子渲染为点,或者你可以将它们用作导出表面的源(例如使用行进立方体,尽管在 2D 中我不会担心这一点)。

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

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

事实上,我认为它们可能是比尝试某种基于图块的方法更好的方法,并且您会得到一些更有趣的结果,例如喷射喷射、波浪冲击物体边缘等。这并不难一些令人愉快的工作,我会试一试。

于 2012-12-10T13:09:37.923 回答