首页 > 解决方案 > 游戏物理近似:对象与水的交互。如何模拟浮力?

问题描述

我正在 Godot 中制作一个关于在河上划皮划艇的基于物理的游戏。我正在使用 v3.1.1.stable.official 和 GDscript。水是用着色器显示的,我可以创建一个平面或巨大的立方体来表示表面。

我想制作一个系统,根据它在水位平面简化中的淹没程度对皮划艇施加力。皮划艇还没有固定在石头上。我想根据船的哪个部分以及有多少浸没在水中,在船上的准确点上施加正确的力的大小和方向。

我知道浮力是 p(水的密度)乘以 g(引力常数,9.81m/s^2)乘以 V(淹没的体积)

F=p*g*V

并且我可以在我希望的任何时候应用它。

apply_impulse(Vector3(.1, 0, 0), Vector3.UP*F)
add_force(Vector3(.1, 0, 0), Vector3.UP*F)

我认为施加力的点是被淹没的体积的 3d 质心,并且它会垂直倾斜,直接从水的“平面”出来,但是,我只是在猜测,我很容易错误的。

我不介意将船简化为 3d 椭圆的近似值。我通过运动学和能量对物理学以及微积分通过导数都有很好的掌握。如果有用的话,我可以学习积分或其他微积分函数,但是,我希望有某种内置的 Godot 函数可以让我免于 3d 微积分,并为皮划艇的船体编写一个复杂的 3d 函数。

TLDR,我需要一种方法来找到:

  1. 在理想平坦的水体中以任何方向/位置浸没的船的体积
  2. 船上应施加力的点
  3. 力应该在的方向

标签: mathgame-physicsgame-developmentgodotgdscript

解决方案


推荐阅读