1

我想可以在仅 2D 模式下使用 bullet3D,但我关心的是浮点精度错误。如果 Z 轴的所有值和操作都为 0,则 Z 值可能会受到其他轴操作的影响。如果这个累积起来,结果可能是错误的。

但是我还没有使用bullet3d。如果您在仅 2D 模式下体验过 bullet3d,请告诉我您的意见。

4

2 回答 2

2

我现在正在将子弹物理用于 2D 游戏,它工作得很好。Bullet 提供了一个方法 btRigidBody::setLinearFactor 允许你强制 Z 轴位置为 0,无论如何。您甚至可以通过仅在要约束到平面的对象上设置线性因子来混合 2D 和 3D。

话虽如此,我使用的是具有一定 Z 轴深度的形状(只是它的位置被限制为 2D),所以它不是 0 厚度。即便如此,因为它很薄,我偶尔会遇到它不应该滑过网格的问题。您可以使用 setMargin 来解决这个问题。

于 2011-09-27T04:06:10.783 回答
0

我不具体了解 Bullet,但假设它是一个写得相当好的库,这不会是一个问题。

浮点运算不是神秘主义。舍入错误不会神奇地发生,舍入随机、模糊或人们用来描述他们不理解的现象的许多其他术语也不会发生。

浮点运算是确定性的,就像计算机上的所有其他东西一样(除非宇宙射线随机翻转位)。具有精确零的计算,经过适当的公式化,会产生精确的零结果。如果影响 Z 轴的所有操作都为零,则生成的 Z 坐标将恰好为零。如果不是,那么正在使用的算法不合适,我不会相信它进行任何计算。

如果您将数量与非零 Z 分量相加,而这些分量在物理上应该总和为零,那么您会遇到麻烦的地方;在这种情况下,舍入误差可能会累积,导致 Z 分量很小但非零。然而,这听起来不像是你发现自己的情况。听起来所有涉及的量都应该具有零 Z 分量,并且将被保留。

于 2011-03-13T19:15:15.427 回答