0

我将 Box2DWeb 与 javascript 和 WebGL 一起使用。

在 Box2D 中,我的身体尺寸约为 1.0,地面约为 5.0。我只是使用 WebGL 使用translaterotate绘制它们(使用从GetPosition()和GetAngle( )函数获得的值)。我使用从这些函数中获得的相同值。即,我使用大约 1.0 的值来绘制对象,使用大约 5.0 的值绘制地面。

问题是当发生旋转时(比如两个物体碰撞时),物体旋转并平移直到平衡,最终绘制的位置不清楚。即使物体只是躺在地上,线条也不是直的。没有旋转,身体看起来就好了。

是一张图片:

正如你所看到的,一些边线和底线不是直的。它们看起来是扭曲的。为什么会发生这种情况?

总而言之,我踏遍世界,在某处存储更改的位置和角度,并使用WebGL转换到点并使用 WebGL 调用旋转并在屏幕上绘制身体。

[编辑] 较大物体最终静止时的角度为:-3.1379659302514917!它没有下降到一个完整的-PI. 也许这就是为什么它被这样看待。有什么办法可以解决吗?

4

2 回答 2

1

通用物理引擎不可避免地会产生不精确的结果。您可以通过设置更严格的阈值来停止模拟几乎静止的物体(显然 Box2D 将其称为“睡眠”),可以将其调整为更接近的近似值。

您还可以通过使用抗锯齿图形使其在屏幕上不那么明显,这样轻微的旋转不会在线条中产生一个像素的扭结,而是产生更平缓的斜率。

您还可以在接近倍数 π/2 实际上是精确的假设下调整旋转值,但这会在翻滚的身体中产生明显的故障。

于 2012-10-14T04:53:39.650 回答
0

我发现它的发生是因为我使用透视投影而不是正交投影来绘制 2D 东西。

此外,我必须将图像保持在 0.5 m 到 5 m 的范围内,并使用 30.0 的比例在屏幕像素和 Box2D 米之间进行转换。

于 2012-10-24T18:44:08.823 回答