在手册中它说我应该使用小单位(0.1-10米)。不鼓励使用像素作为度量单位。但是为什么Box2D能够更好地运行,并且比我使用小型单元时具有更好的模拟效果?
答案 0 :(得分:8)
Box2D是一个内部使用MKS system of units的模拟框架。如果您需要可靠且可预测的模拟,则应在此单位系统中以合理的值表示您创建的模拟系统。你想让一个盒子表现得像一个盒子,一个像摇滚一样的摇滚乐和一个像球一样的球。
如果你将像素作为一个单位,你有一个20 x 20像素的盒子,标量质量值为10,你真的会创建一个边长20米的盒子,质量只有10公斤。从本质上讲,您的模拟变得难以设置并且使其表现得很逼真。
没有什么可以阻止你使用像素作为单位。但是,为了使其行为可靠,自然且可预测,以其期望的单位和合理的边界内表达馈送到模拟框架的值更好更容易。
答案 1 :(得分:2)
可能因为像素数量可能会在设备/显示器之间发生变化,因此不可靠。例如,如果你在iPad1上移动了10个像素,那么你移动的距离要比在iPad3上移动10个像素要多,因为iPad3上的分辨率更高(每英寸像素数更多)。使用仪表为物理引擎提供了一个可靠的测量单位,可以在所有设备/显示器上保持一致。
答案 2 :(得分:2)
取自here
Box2D物理对象使用米来定义长度和宽度。 Box2D适用于1x1米大小的物体。你想要PTM的原因 (Pixels to Meters)是你不想拥有1比1 像素大小与米尺寸之间的相关性。
例如,如果你的车长200像素,50像素 很高,你没有使用PTM转换,你最终会创建一个 Box2D车200米乘50米。这是656英尺长或约 12辆半卡车的长度。想象一下你必须要的力量 适用于这辆车移动它。
您想要的是将像素大小缩小为米尺寸 对于Box2D,大多数时候我最终使用30或32像素到1的PTM 米。
我认为Box2D最适合1米的原因是数字1的计算速度比其他数字的运算速度快。例如root(1)= 1.(根是物理引擎中的常见计算)。因此,您应该调整PTM比率,以便最常见的物体尺寸为1X1米。
Box2D documentation 第1.7节也提供了一些见解:
Box2D使用浮点数并且必须使用公差 使Box2D表现良好。这些公差已经调整为可行 米 - 千克 - 秒(MKS)单位。 Box2D尤其如此 经过调整,可以在0.1到10米之间移动物体。 所以这意味着汤罐和公共汽车之间的对象应该有效 好。静态物体可能长达50米而没有太多 麻烦。