物理引擎中的大型球形世界
Large-scale spherical world in a physics engine
(此问题针对 Cannon.js(@schteppe),但希望答案适用于其他引擎,以造福于其他不使用 Cannon 的人。)
似乎在物理引擎中构建巨大球形世界的一种策略是从 6 个高度图开始形成一个立方体,然后将该立方体扭曲成一个球体("cubic sphere" 方法,see this explanation).
所以这种方法看起来不错,我正要实施它只是因为其他人似乎都在这样做,但我脑子里有一个唠叨的(很可能是天真的)问题:
Why not just generate a (non-rigidbody) spherical surface and use it
in the pre-step of the simulation to provide a reaction force
against vertices that fall below that surface? Are there any problems
with this approach that make people avoid it and choose the cube
sphere approach instead?
所有物体上的重力都在预处理过程中应用,所以看起来我只是检查物体的顶点而已?
在我的特殊情况下,世界不需要高分辨率,甚至可以是块状的 minecraft 类型的世界。它也不需要任何纹理或类似的东西,如果这对许多选择立方体球体方法的人有一些影响的话。谢谢!
如果你走sphere/cube这条路,你会从物理引擎中得到很多东西"for free"。它包括稳定接触、摩擦、碰撞事件等。
如果您实施 "force sphere" 在每个穿透顶点上沿法线方向施加力,您会错过一些明显的事情:
无摩擦:你的物体将在行星表面滑动,除非你自己实现摩擦(如果没有摩擦求解器,这很难正确解决)。
"Spongy" 接触:由于您使用的是显式力计算而不是接触解算器,因此接触将允许更大的穿透力。 (除非您使用较大的 spring 系数和非常小的时间步长 - 这会导致性能不佳)
山脊穿透:如果你想在你的星球上有某种山脊或尖锐的山峰,你不能把一个物体直接扔到山峰上。峰值将穿透没有顶点的对象。物理引擎在网格裁剪的帮助下为您解决了这个问题。
(此问题针对 Cannon.js(@schteppe),但希望答案适用于其他引擎,以造福于其他不使用 Cannon 的人。)
似乎在物理引擎中构建巨大球形世界的一种策略是从 6 个高度图开始形成一个立方体,然后将该立方体扭曲成一个球体("cubic sphere" 方法,see this explanation).
所以这种方法看起来不错,我正要实施它只是因为其他人似乎都在这样做,但我脑子里有一个唠叨的(很可能是天真的)问题:
Why not just generate a (non-rigidbody) spherical surface and use it in the pre-step of the simulation to provide a reaction force against vertices that fall below that surface? Are there any problems with this approach that make people avoid it and choose the cube sphere approach instead?
所有物体上的重力都在预处理过程中应用,所以看起来我只是检查物体的顶点而已?
在我的特殊情况下,世界不需要高分辨率,甚至可以是块状的 minecraft 类型的世界。它也不需要任何纹理或类似的东西,如果这对许多选择立方体球体方法的人有一些影响的话。谢谢!
如果你走sphere/cube这条路,你会从物理引擎中得到很多东西"for free"。它包括稳定接触、摩擦、碰撞事件等。
如果您实施 "force sphere" 在每个穿透顶点上沿法线方向施加力,您会错过一些明显的事情:
无摩擦:你的物体将在行星表面滑动,除非你自己实现摩擦(如果没有摩擦求解器,这很难正确解决)。
"Spongy" 接触:由于您使用的是显式力计算而不是接触解算器,因此接触将允许更大的穿透力。 (除非您使用较大的 spring 系数和非常小的时间步长 - 这会导致性能不佳)
山脊穿透:如果你想在你的星球上有某种山脊或尖锐的山峰,你不能把一个物体直接扔到山峰上。峰值将穿透没有顶点的对象。物理引擎在网格裁剪的帮助下为您解决了这个问题。