Tilemap 2D逼真流体物理
Tilemap 2D realistic fluid physics
我有兴趣尝试为2D游戏创建逼真的流体(水)。这个游戏类似于Terraria。我听说过如何在场景中拍打一堆碰撞的粒子并在其上渲染,瞧,逼真的水。
Terraria使用瓷砖水,我不喜欢。。我想要更高级的。
我曾考虑过使用子弹3D物理(box2d有我能达到的极限)。对于非碰撞粒子效果,我正在考虑使用类似SPARK的东西,因为我认为这会让我两全其美。
我想的问题是,每个块都是16x16,所以在1600x900的场景中,大约有5000个瓷砖。
所以我需要告诉物理引擎这些瓦片是可冷却的。当然,也有一些空心砖被认为是不可冷却的。
有人对此有想法吗?语言是C++,但我怀疑这是否相关。
编辑:我想我将不得不屈服,使用基于网格的水。我想,回想起来,基于粒子的方法只会让一切变得更加困难,但有什么好处呢?
您的问题是关于平铺流体的,但实际上您似乎在问基于粒子的方法。
如果是这样的话,你要找的是"平滑粒子流体动力学",或SPH,这是一种非常流行的实时二维和三维流体模拟技术。
是的,它基本上只是一个粒子系统,每个粒子都以合理(数学上稳定)的方式对环境中的力(重力、碰撞等)做出反应,并结合一个约束,即它们必须保持一定的距离,才能使流体不可压缩。
如果有足够的粒子,可以将粒子渲染为点,也可以将它们用作导出曲面的源(例如,使用行进立方体,尽管在2D中我不会担心这一点)。
http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics
它的优点是相对容易编码,而且确实可以在GPU上加速。
事实上,我认为它们可能是一种比尝试某种基于瓷砖的方法更好的方法,而且你会得到一些更有趣的结果,比如浪花飞溅、波浪拍打物体边缘等。想要让一些令人愉快的东西发挥作用并不难,我会试一试。
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- opengl glBegin(GL_LINES) 和 glBegin(GL_POINT) 在 2D 中不可视化点矢量
- 在C++中迭代 2D 容器的最干净方法
- 如何引用 2D 指针?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- C++动态安全 2D 交错阵列
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- Tilemap 2D逼真流体物理
- c++2D TileMap渲染优化