7

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

实施将包括使用能够模拟球体运动的物理引擎,例如 JigLibX。为了确定平面的高度,我正在考虑对位于分组顶层的每个球体的最大高度进行平均。

我不希望性能很好,但它可以实时接近吗?如果没有,我可以使用这个模拟来预烘焙流线吗?

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

感谢您的帮助,维纳图

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

4

2 回答 2

2

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

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

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

于 2011-08-05T22:42:25.027 回答
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

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

你是对的,没有完整的流体动力学二维解决方案。

于 2011-08-19T12:46:28.433 回答