模拟高度图上的流体流动

时间:2011-08-05 22:30:39

标签: c# physics fluid heightmap

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

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

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

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

感谢任何帮助,Venatu

(如果相关,我的目标平台是XNA 4.0,使用C#。此时只有Windows,因此PhysX / Havok可以进行模拟,但我更喜欢托管解决方案)

3 个答案:

答案 0 :(得分:2)

我还没有实时使用PhysX这样的实时流体动力学 - 可能是因为所需的计算非常复杂!我认为你的方法存在的问题是随着他们安定下来所有球体的静止接触,这会占用大量的处理能力。即使在最强大的台式机上,很多休息的接触点也很快就会因为性能的提高而臭名昭着。

如果您沿着这条路走下去,那么我建议使用基于弹簧的物理将流体建模为弹性但坚固的物体,其中施加到水的一部分的力将使用弹簧传播到其余部分。这使您可以选择设置弹簧的断点,并在发生这种情况时将身体分成两个或多个物体(反之亦然。)这可以为您提供喷雾之类的基础。它在性能方面也是一种更通用的方法,因为您可以选择用于近似模型的粒子和弹簧的数量。

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

答案 1 :(得分:1)

实时模拟流体的最常用方法是光滑粒子流体动力学

几个有用的链接:

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

http://http.developer.nvidia.com/GPUGems/gpugems_ch38.html

http://www.plunk.org/~trina/thesis/html/thesis_toc.html

除了模拟本身,您还需要一些专门的宽相位碰撞检测算法,如扫描和剪切或散列单元。

你是对的,没有完整的2d液体动力学解决方案。

答案 2 :(得分:0)