【问题标题】:Large-scale spherical world in a physics engine物理引擎中的大型球面世界
【发布时间】:2015-05-22 07:37:23
【问题描述】:

(此问题针对Cannon.js(@schteppe),但希望答案适用于其他引擎,以使其他不使用 Cannon 的人受益。)

似乎在物理引擎中构建一个巨大的球形世界的一种策略是从 6 个高度图开始形成一个立方体,然后将该立方体变形为一个球体(“立方球体”方法,see this explanation)。

所以这种方法看起来不错,我正要实施它只是因为其他人似乎都在这样做,但我有一个烦人的(而且很可能是幼稚的)问题在我的脑后:

为什么不直接生成一个(非刚体)球面并使用它 在模拟的前置步骤中提供反作用力 反对落在该表面以下的顶点?有没有问题 用这种方法让人们避免它并选择立方体 代替球体方法?

所有对象的重力都在前置步骤中应用,所以看起来我只是在检查对象的顶点的问题?

在我的特殊情况下,世界不需要是高分辨率的,甚至可以是块状的、我的世界类型的世界。它也不需要任何纹理或类似的东西,如果这对许多选择立方体球体方法的人有一些影响。谢谢!

【问题讨论】:

  • 您的问题非常广泛。你能缩小范围吗?你特别关心什么?
  • 嗨@MichaelEricOberlin,我只是想知道这种方法是否可能存在任何问题(关于性能或其他方面)。这似乎是一种非常明显的方法,所以我猜由于人们这样做,所以我不理解一般物理引擎的一些基本方面。

标签: game-physics physics-engine cannon.js


【解决方案1】:

如果您选择球体/立方体路径,您可以从物理引擎“免费”获得许多东西。它包括稳定的接触、摩擦、碰撞事件等。

如果您实现一个“力球”,在每个穿透顶点上施加法线方向的力,您会错过一些明显的事情:

  • 无摩擦:您的物体会在行星表面滑动,除非您自己实施摩擦(如果没有摩擦求解器,这很难做到)。

  • “海绵”接触:由于您使用的是显式力计算而不是接触求解器,因此接触将允许更大的穿透力。 (除非您使用较大的弹簧系数和非常小的时间步长 - 这会导致性能不佳)

  • 山脊穿透:如果你想在你的星球上拥有某种山脊或尖锐的山峰,你不能将一个物体直接扔到山峰上。峰值将穿透没有顶点的对象。物理引擎在网格裁剪的帮助下为您解决了这个问题。

【讨论】:

  • 啊,太明显了——尤其是摩擦!非常感谢,也感谢 Cannon :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
相关资源
最近更新 更多