3

在手册中说我应该使用小单位(0.1-10 米)。不鼓励使用像素作为度量单位。但是为什么 Box2D 会比我使用小单元时工作得更好,并且具有更好的模拟呢?

4

3 回答 3

10

Box2D 是一个内部使用MKS 单位系统的模拟框架。如果您想要一个可靠且可预测的模拟,您应该在这个单位系统内以合理的值表达您创建的模拟系统。你希望一个盒子表现得像一个盒子,一个岩石表现得像一个岩石,一个球表现得像一个球。

如果你以像素为单位,你有一个 20 x 20 像素的盒子,标量质量值为 10,你实际上创建了一个边长为 20 米的盒子,其质量仅为 10 公斤。从本质上讲,您的模拟变得难以设置并使其表现得真实。

没有什么能阻止您使用像素作为单位。但是为了让它可靠、自然和可预测地运行,最好、更容易地以它期望的单位和合理的边界来表达输入模拟框架的值。

于 2012-05-18T16:53:11.610 回答
2

取自这里

Box2D 物理对象用米来定义长度和宽度。Box2D 针对 1x1 米大小的对象进行了调整。您想要 PTM(像素到米)的原因是您不希望像素大小和米大小之间存在 1 比 1 的相关性。

例如,如果您有一辆长 200 像素、高 50 像素的汽车,并且您没有使用 PTM 转换,您最终会创建一辆 200 米乘 50 米的 Box2D 汽车。那是 656 英尺长或大约 12 辆半卡车的长度。想象一下你必须施加在这辆车上的力来移动它。

你想要的是将你的像素尺寸缩小到 Box2D 的米尺寸,大多数时候我最终使用 30 或 32 像素到 1 米的 PTM。

我相信 Box2D 最适合 1 米的原因是对数字 1 的计算比对其他数字的运算要快。例如 root(1) = 1。(并且根是物理引擎中的常见计算)。因此,您应该调整您的 PTM 比率,以便您最常见的对象大小为 1X1 米。

Box2D 文档1.7 节   也提供了一些见解:

Box2D 与浮点数一起工作,必须使用容差才能使 Box2D 表现良好。这些公差已经过调整,可以很好地与米-千克-秒 (MKS) 单位配合使用。特别是,Box2D 已经过调整,可以很好地处理 0.1 到 10 米之间的移动物体。所以这意味着汤罐和公共汽车之间的物体大小应该可以正常工作。静态物体可能高达 50 米大,没有太多麻烦。

于 2012-05-18T16:57:30.260 回答
2

可能是因为像素数可以在设备/显示器之间改变,所以它不可靠。例如,如果您在 iPad1 上移动 10 个像素,您将比在 iPad3 上移动 10 个像素移动得更远,因为 iPad3 上的分辨率更高(每英寸更多像素)。使用仪表为物理引擎提供了一个可靠的测量单位,该单位将在所有设备/显示器上保持一致。

于 2012-05-18T16:47:16.540 回答