c++ - Tilemap 2D 逼真的流体物理

标签 c++ 2d physics

我有兴趣尝试为 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/

相关文章:

javascript - 为什么 MatterJS 物理坐标与 DOM 元素有偏移?

c++ - c++中堆栈类的问题

android - lambda 回调中 Android Cocos2D-x 应用程序的段错误

python - 为 pyopengl 和 numpy 构建交错缓冲区

c++ - 用 C++ 进行正确的核裂变模拟

javascript - 如何根据两个电机的速度计算新的XY坐标和每一帧的旋转?

c++ - Directx 获取游戏使用的 VRAM

header 声明和源定义周围的 C++ 命名空间

c - 如何从二维数组中获取元素并将它们用作c中的函数参数?

arrays - Swift 3 二维 Int 数组