物理引擎如何处理重量?

时间:2015-03-17 13:52:38

标签: physics

这很可能是一个微不足道的问题,一个只发生在我的愚蠢但是......物理引擎如何使用矢量速度和坐标,处理重量?不只是增加的重力导致屏幕上的所有物体向下移动,而是在一个点周围增加重力。我试图在物体移开时增加重力,但是当质量较大的物体移开时,这会产生非常不切实际的效果。

1 个答案:

答案 0 :(得分:1)

这取决于发动机,但一般来说,一个“应该”施加显着引力的物体将会这样做。这只是增加等式的另一种力量。

这个问题在于,如果每个对象都对每个其他对象施加一个引力(就像真实对象那样),当您向系统添加对象时,您必须进行的计算次数呈指数级增长< / strong>即可。许多引擎都进行了许多优化,牺牲了严格的现实性来试图让它重新得到控制。以下是一些:

  • 只有“重要”对象发挥拉力。一个典型的例子是模拟太阳系:太阳必须表现出拉力,而行星也可能表现出来,但太空船通常不会。所有东西仍然需要拉动,因此添加“无关紧要”的对象(每个重要对象计算一次)仍有成本,但它比添加重要对象要低得多(的一个计算)每个对象)。如果你有很多无关紧要的物品,只有几个重要物品,这可以节省你很多时间。
  • 对象仅对“附近”对象施加拉力,而忽略远处对象。由于反平方定律,两个物体之间的重力效应变得非常小,因为它们变得很远。最终,它变得如此之小以至于为了许多目的而忽略它是安全的,这正是许多引擎所做的:建立一些截止半径,超过这个截止半径,两个对象之间的重力将被忽略。
  • “关闭”物体聚集在一起,它们的引力结合起来处理“远处”物体。这可以让你通过忽略远处物体之间的重力来恢复你失去的一些现实主义。假设你有两个每个100颗恒星的遥远星系:如果每个星系对系统中的所有其他恒星施加个体拉力,你必须每个蜱进行10 ^ 200次计算:每对恒星一次。如果你将它们聚集成两个星系,你每个蜱只需要20,001个计算:10,000个星系A(100对星),10,000个星系B,然后一个用于两个星系之间的拉力。