瓷砖地图二维真实流体物理学

5
我对尝试创建逼真的流体(水)对2D游戏很感兴趣。这个游戏类似于Terraria。我听说过你可以在场景上放置一堆碰撞粒子并进行渲染,就会有逼真的水。
Terraria使用基于瓷砖的水,我不是很喜欢...我想要更高级的东西。
我考虑使用Bullet 3D物理引擎(Box2d有限制)。对于非碰撞粒子效果,我考虑使用类似SPARK的东西,因为我认为这样可以让我兼顾两全。
我正在思考的问题是,每个块都是16x16的,在1600x900的场景中,大约有5千个瓷砖。
所以我需要告诉物理引擎这些瓷砖是可碰撞的。当然,还有被视为不可碰撞的空白瓷砖。
有人有什么想法吗?语言是C ++,但我不认为这很相关。
编辑:我认为我将不得不妥协并使用基于网格的水。回想起来,基于粒子的方法只会让一切变得更加困难,但换来的收益又是什么呢?
1个回答

3
您的问题是关于平铺流体,但您似乎实际上在询问基于粒子的方法。
如果是这样的话,您要找的是“平滑粒子流体动力学”或SPH,这是一种非常流行的技术,用于2D和3D流体模拟实时情况。
是的,它基本上只是一个粒子系统,每个粒子以合理的方式响应您环境中的力(重力、碰撞等),并且还有一个约束条件,即它们必须保持一定的距离以使流体不可压缩。
如果您有足够多的粒子,可以将它们呈点状渲染,或者可以将它们用作导出表面的源(例如使用 marching-cubes,不过在2D中我不会担心这个)。

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

它的优点在于相对容易编码,并且可以在GPU上加速。实际上,我认为它们可能比尝试某种瓦片式方法更好,你可以得到一些更有趣的结果,例如喷雾扬起、波浪撞击物体边缘等。让它变得令人愉悦并不太难,你可以试试。

嗯...这让我重新考虑一下,呵呵。不过你能详细解释一下吗?你没有给我关于如何使粒子与平铺地图碰撞的想法。此外,哪些库会有这种功能?我无法自己实现这个数学问题,尤其是其他人可以做得更好。 - user148459
此外,还有哪些替代 SPH(Smoothed Particle Hydrodynamics)的选择呢?请记住,这是一个二维游戏,不是一个粒子模拟器,所以使用 SPH 似乎过于复杂了。 - user148459
如果你想要逼真的流体效果,这可能是最简单的方法之一。如果你认为这有些过头了,那么可能没有太多选项能够达到真正的流体效果。 - JasonD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接