gpt4 book ai didi

c# - 基于细胞的液体模拟 : Local pressure model?

转载 作者:可可西里 更新时间:2023-11-01 08:47:32 25 4
gpt4 key购买 nike

我正在尝试将半逼真的水添加到基于图 block 的 2D 平台游戏中。水必须表现得有点逼真,压力模型完全在本地运行。 (IE。只能使用来自它附近单元格的数据)由于我的游戏的性质,需要这个模型,你不能确定你需要的数据不在不在内存中的区域内。

到目前为止,我已经尝试过一种方法,但我无法对其进行足够完善以适应我的约束条件。

对于该模型,每个单元格都可以轻微压缩,具体取决于上述单元格中的水量。当细胞的含水量大于正常容量时,细胞会尝试向上膨胀。这创建了一个相当不错的模拟,有时会很慢(不是滞后;水的变化需要一段时间才能传播。)。当我试图将它实现到我的引擎中时,我发现我的局限性缺乏它工作所需的精度。如果您愿意,我可以提供更深入的解释或指向原始概念的链接。

我的约束:

  • 水位只有 256 个离散值。 (没有浮点变量 :( ) -- 编辑。 float 很好。
  • 固定网格大小。
  • 仅限 2D。
  • U 型弯配置必须有效。

我使用的语言是 C#,但我可能会使用其他语言并将其翻译成 C#。

问题是,任何人都可以给我一个水的压力模型,尽可能符合我的限制条件吗?

最佳答案

采用不同的方法怎么样?

忘掉 float 吧,从长远来看,这会带来舍入问题。相反,一个单位的水怎么样?

每个细胞都含有一定数量的水。每次迭代,您将单元格与其 4 个邻居进行比较,并移动水单位数差异的 10%(更改此值以改变传播速度)。映射函数将水的单位转换为水位。

为避免计算顺序问题,请使用两个值,一个用于旧单位,一个用于新单位。计算所有内容,然后将更新后的值复制回来。 2 个整数 = 每个单元格 8 个字节。如果你有一百万个单元格,它仍然只有 8mb。

如果您实际上是在尝试模拟波浪,您还需要存储流量 --4 个值,16 MB。要制作波浪,请给流量增加一些惯性——在计算出所需流量后,然后将之前的流量移动到所需值的 10%。

关于c# - 基于细胞的液体模拟 : Local pressure model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6109490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com