Javascript 为什么Box2D机身是';使用WebGL渲染时,s线是否扭曲、不清晰和不直?
我将Box2DWeb与javascript和WebGL一起使用 在Box2D中,我的身体尺寸约为1.0,地面尺寸约为5.0。 我只是使用WebGL使用translate和rotate(使用从GetPosition()和GetAngle()函数中获得的值)绘制它们。我使用从这些函数中得到的相同值。 i、 例如,我使用1.0左右的值绘制对象,使用5.0左右的值绘制地面 问题是当旋转发生时(如两个物体碰撞),物体旋转并平移直到平衡,并且绘制的最终位置不清楚。即使物体只是躺在地上,线条也不笔直。 没有旋转,身体看起来很好 是一个图像: 正如你所看到的,有些方面和底线是不直的。它们看起来是扭曲的。 为什么会发生这种情况 总而言之,我步进世界,将更改的位置和角度存储在某处,然后使用WebGL我使用WebGL调用转换到点并旋转,并在屏幕上绘制身体 [编辑]Javascript 为什么Box2D机身是';使用WebGL渲染时,s线是否扭曲、不清晰和不直?,javascript,box2d,webgl,Javascript,Box2d,Webgl,我将Box2DWeb与javascript和WebGL一起使用 在Box2D中,我的身体尺寸约为1.0,地面尺寸约为5.0。 我只是使用WebGL使用translate和rotate(使用从GetPosition()和GetAngle()函数中获得的值)绘制它们。我使用从这些函数中得到的相同值。 i、 例如,我使用1.0左右的值绘制对象,使用5.0左右的值绘制地面 问题是当旋转发生时(如两个物体碰撞),物体旋转并平移直到平衡,并且绘制的最终位置不清楚。即使物体只是躺在地上,线条也不笔直。 没有旋
对于较大的物体,最后放下时的角度为:-3.1379659302514917!它没有下降到一个完整的
-PI
。也许这就是为什么人们会这么看。有没有办法解决这个问题?一个通用的物理引擎不可避免地会产生不精确的结果。您可以通过设置更严格的阈值来停止模拟几乎静止的物体(显然,Box2D将其称为“睡眠”),从而将其调整到更接近的近似值
您还可以通过使用抗锯齿图形使其在屏幕上不那么明显,这样轻微的旋转不会在直线上创建一个单像素的扭结,而是创建一个更为渐变的坡度
您也可以在假设接近倍数π/2的情况下调整旋转值,但这会在翻滚的身体中产生明显的小故障。我发现这是因为我使用透视投影而不是正交投影来绘制2D内容
此外,我还必须将图像保持在0.5米到5米的范围内,并使用30.0的比例在屏幕像素和Box2D米之间进行转换。否则身体的行为是否正确?在这种情况下,GetAngle的精确值是多少?物体的行为非常逼真。对于较大的物体,最后放下时的角度为:-3.1379659302514917!它没有下降到一个完整的PI。也许这就是为什么人们会这么看。有没有办法修复它?网络上有大量的Box2D演示/应用程序。它们不像我的那样油嘴滑舌。你知道你提到的那些方法中有哪些是其他开发人员通常使用的吗?关于第一种方法,你能解释一下,设置一个“更严格的阈值”来停止模拟几乎静止的物体意味着什么吗?即使我发现一个物体在休息,我也不能确定它是否在一个平坦的表面上休息。实际上可能有一个轻微的0.01弧度的倾斜。我看不出这会有什么帮助。我的意思是,仅仅因为一个物体在静止,它的角度近似于这个物体的角度有多正确?这可能会产生错误的结果,就像第三种方法一样。我完全错过了什么吗?这并不是说你应该寻找静止的身体——而是Box2D已经在做了。如果通过设置较小的“速度阈值”将其更改为“模拟更长时间”,则它们可能会变得更平坦。我从未特别使用过Box2D,因此我无法进一步帮助。