如何移除Box2D的最大速度限制?

4
我不知道box2D中是否有这样的参数,但当我复制场景中所有数字时,模拟会产生不同的结果。我只是模拟了一个摆(静态框连接到动态框,使用旋转关节),当我将场景中的所有值乘以32(与我的游戏具有相同的比例)时,它下落得比正常情况慢(我也增加了重力)。似乎当摆下落时,它达到了一定的最大速度,并且不会超过这个速度。所以当它回来时,它只能达到从哪里开始下落的一半高度。顺便说一句,我认为这不是由于摩擦力,因为我将所有阻尼和摩擦系数设置为零,而且在缩放场景之前没有出现这个问题。
2个回答

2

在b2Settings.h中更改b2_maxTranslation的值。


0

Box2d使用迭代求解器进行模拟,不同大小的物体可能会产生不同的结果 - 这没关系。手册中写道,模拟动态对象的最佳大小为0.1-10,静态物体则为50以上。同时,增加所有尺寸并不能在现实世界中产生相同的运动效果。例如,想象一下一个半径为1米、从100米高度落下的球体。将其半径和高度乘以10,显然会得到不同的落地时间,因为它只取决于高度。

此外,我曾经尝试过nvidia physx。我只创建了一个非常简单的场景 - 一个立方体在平面上掉落并弹跳。这个立方体的边长为1米。首先,我以密度为10模拟,一切都很完美。然后,我决定模拟一个铁块,并将密度改为7200。正如你所理解的那样,由于恢复参数没有改变,弹跳应该完全相同。但是模拟效果真的很糟糕 - 立方体掉进平面并且弹跳很难看。因此,保持值在推荐范围内非常重要。


尽管你的答案似乎是正确的,但你关于现实中会发生什么的例子有点错误。当我说我会把所有东西乘以10时,这意味着你也会将重力增加10倍,就像你正在更改计算单位一样。例如,将米换算为厘米,将使方程中的所有数字增加10倍,但你将看到这些更大的数字发生的确切相同的事情。 - Ali1S232
仅仅通过同一个常数来乘以所有值仍然不正确。考虑这样一个例子,你正在乘以10的力量,乘以10的长度和乘以10的扭矩。这是不正确的,因为在这种情况下扭矩必须乘以100。量纲分析有点困难。即使正确地重新调整比例,也不能提供相同的模拟结果。 - Andrew
还有一个参数叫做 b2Body 中的 linearDamping。可能默认情况下该值不为零。请尝试将其设置为零。 - Andrew
我已经将所有阻尼值设为零(线性或角度),我只是在缩放重力(m/s^2)、速度(m/s)和位置(m),所以结果应该是相同的! - Ali1S232

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接