子弹物理多球体被地面吸入

时间:2014-09-07 09:08:50

标签: c++ physics mesh bullet

我已经多次尝试解决这个问题并阅读了我在这里找到的所有/ forum / google。我使用的CCD阈值低于我的物体移动速度,并使用比半径半径小的物体的CCD半径。这样做的唯一方法就是让多球体卡在接缝上。我还尝试将ERP / ERP2设置为0.9 / 1.0。 [编辑]好的,所以经过一些阅读;如果球体已经接触地面,CCD将无法工作,如果我理解正确,ERP只会影响带有关节的物体。

地面是在Blender中制作的trimesh,并使用obtainStaticNodeShape来获得形状。我试图缩放网格以获得更小的多边形,但即使是最小的(对于游戏可接受的)大小也不起作用,大约32k索引,11k多边形,500x500单位,多球半径为0.45单位。 [编辑]多球体是两个相互叠加的球体,它们仅限于围绕Y轴的角运动,因此不会滚动。

球体被吸得"吸吮"快速穿过地面,它不会慢慢下沉。我试图使fixedtimestep更小1/420与64个子步骤没有给出任何更好的结果。这种情况最常发生在斜坡上升或下降时。我的地面是轻微的倾斜,但是20%的倾斜似乎足以让它掉落很多,但它也可以在平地上发生,而不是经常发生。

当我进行第一次测试时,我使用了一个大的伸展立方体作为地面,它运作良好。

所以我现在的问题是我甚至不知道为什么会这样,所以我不知道下一步该尝试什么?任何人都可以给我一个解决方案或一些指示。

增加多球体尺寸是否有任何用处(对于游戏我不能增加超过25-30%)我没有明确设置任何碰撞边距但我认为这只会让我的球体漂浮在地面上?将地面从静态物体改变为运动学是否有任何好处?

如果它低于地面,是否可以直接从球体中使用射线测试并向上推?我想不是,如果它能够首先检测到地面,它为什么会失败呢?

[编辑:附加信息] 在论坛上出现了相当多的类似问题,而且堆栈溢出也是如此。大多数似乎是关于非常小的物体。除非你想大量增加模拟步骤的数量,否则小物体(> 0.2m)显然不是子弹的好选择。我的问题似乎不属于这一类,因为我的最小物体直径为0.9米?

我现在也进行了调试绘制,以查看我用作地面的trimesh的法线。我发现法线没有任何错误。

我也试图增加球体的束缚边缘,但无济于事。

我进一步尝试使用建议的设置: ((btDefaultCollisionConfiguration)world.collisionConfiguration).setPlaneConvexMultipointIterations(3,3); ((btDefaultCollisionConfiguration)world.collisionConfiguration)。setConvexConvexMultipointIterations(3,3); 没有区别。

然而,我确实读过关于光线投射效果不佳的大三角网,我的网格是512x512单位,但我不确定这是否会导致我的对象掉落网格?

我还读到球体形状有三角形的问题,但我不知道这是不是我的情况?我正在使用的球体被锁定以在所有轴上旋转。

我也尝试过使用btCapsule,但结果相同..气缸效果会更好吗? [编辑] 我尝试使用圆柱体,因为球体和胶囊不起作用。气缸工作得更好。尽管如此,我仍然可以通过它。在它通过球体/胶囊刚刚快速和简单地通过的地方之前,clyinder在周围抽搐了很多。也许这可能是一个底层问题的线索?尽管如此,圆柱体不是最适合角色的形状。

另一个可能的原因可能是网格中的三角形边长太长或边间比例过大。我在斜坡上发现了一些我的球体总是落下的地方。如果这确实是问题我可以做任何事情除了在Blender中手动编辑网格吗?

正如你所看到的,有很多这些问题和很多可能的答案,我不知道哪一个对应我的情况,有更好的洞察力给出一些指示的人意味着很多,谢谢!

0 个答案:

没有答案