模拟高度图上的流体流动

Ven*_*atu 7 c# physics fluid heightmap

我正在寻找一种近似在高度图上移动的流体体积的方法.我能想到的最简单的解决方案是将其近似为大量直径小(<0.1m)的非绘制球体.然后,我会在它们停下来的位置放置一个可见的平面,代表水面"水面".据我所知,没有托管物理引擎包含内置流体模拟器,因此问题.

实现将包括使用物理引擎,如JigLibX,它能够模拟球体的运动.为了确定平面的高度,我想到平均分组顶层每个球体的最大高度.

我不希望性能很好,但实时可以接近吗?如果没有,我可以使用此模拟预先烘烤流线吗?

我希望这是有道理的,我真的希望得到关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题.

感谢任何帮助,Venatu

(如果它的相关,我的目标平台是XNA 4.0,使用C#.Windows只在这个时间点,所以PhysX/Havok是模拟的可能性,但我更喜欢托管解决方案)

Mic*_*rry 2

到目前为止,如果不使用 PhysX 之类的东西,我还没有实时看到真实的流体动力学 - 可能是因为所需的计算非常复杂!在我看来,你的方法的问题在于,当所有这些球体安定下来时,它们会保持静止接触,这会占用大量的处理能力。许多静止接触点因快速消耗性能而臭名昭著,即使在最强大的台式机上也是如此。

如果您沿着这条路线走下去,那么我建议使用基于弹簧的物理原理将流体建模为弹性实体,其中施加到一部分水的力将使用弹簧传播到其余部分。这使您可以选择为弹簧设置一个断点,并在发生这种情况时将主体分成两个或多个主体(以及返回到一起的相反过程)。这可以为您提供诸如喷雾之类的东西的基础。就性能而言,它也是一种更通用的方法,因为您可以选择用于近似模型的粒子和弹簧的数量。

这是一个大而复杂的话题,但我希望至少能提供一些见解!