我正在寻找一种近似在高度图上移动的流体体积的方法.我能想到的最简单的解决方案是将其近似为大量小直径(<0.1m)的非拉伸球体.然后,我会在它们停下来的位置放置一个代表水面“水”表面的可见平面.据我所知,没有托管物理引擎包含内置的流体模拟器,因此问题. 实现将包括使用物理引擎,如JigLibX,它能够模拟球体的运动.为了确定平面的高度,我想到平均分组顶层每个球体的最大高度. 我不希望性能很好,但实时可以平易近人吗?如果没有,我可以使用这个模拟来预先烘烤流线吗? 我希望这是有道理的,我真的希望得到关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题. 感谢任何帮助,Venatu (如果相关,我的目标平台是XNA 4.0,使用C#.
Windows仅在此时,所以PhysX / Havok是模拟的可能性,但我更喜欢托管解决方案)
解决方法
我还没有实时看到真实的流体动力学而没有使用像PhysX这样的东西 – 可能是因为所需的计算非常复杂!我看到你的方法存在的问题是,当他们安定下来时所有这些球体的静止接触,这会占用大量的处理能力.即使在功能最强大的台式机上,很多休息接触点也因很快就进入性能而臭名昭着.
如果您沿着这条路走下去,那么我建议使用基于弹簧的物理将流体建模为弹性但坚固的物体,其中施加到水的一部分的力将使用弹簧传播到其余部分.这使您可以选择设置弹簧的断点,并在发生这种情况时将身体分成两个或多个物体(反之亦然.)这可以为您提供喷雾之类的基础.它在性能方面也是一种更通用的方法,因为您可以选择用于近似模型的粒子和弹簧的数量.
这是一个大而复杂的话题,但我希望至少提供一些见解!