使用Bullet2.82将角色脚粘在地板上

时间:2014-06-06 11:11:23

标签: bullet physics-engine bulletphysics

我使用子弹2.82(双精度),固定模拟时间步长为1ms。

我使用以下代码来设置世界:

collision_config = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(collision_config);

overlappingPairCache = new btDbvtBroadphase();

constraintSolver = new btSequentialImpulseConstraintSolver();

dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collision_config);

dynamicsWorld->setGravity(btVector3(0, 0, -9.81));

btContactSolverInfo& solverInfo = dynamicsWorld->getSolverInfo();
solverInfo.m_numIterations = 2000;
solverInfo.m_globalCfm = 0.0;
solverInfo.m_erp = 0.2;
solverInfo.m_solverMode |= SOLVER_USE_2_FRICTION_DIRECTIONS;
solverInfo.m_sor = 1.3;
solverInfo.m_splitImpulse = 1;
solverInfo.m_splitImpulsePenetrationThreshold = -0.02;

对于角色,我使用角度马达的铰链约束。

地板和脚的摩擦力均为0.3。

这是抓住我的角色试图抬起左腿。质量中心在右腿上,但是地板在左脚上施加很大的力(红色箭头)。实际上,你可以看到脚在它开始下降之前自由拍摄。

我不知道为什么会这样。摩擦力是否只会对xy平面上的运动产生影响?因此,无论摩擦力有多高,都应该始终抬起脚。

Trying to lift the left leg

1 个答案:

答案 0 :(得分:0)

我通过使用原始形状(btBoxShape)来解决问题,而不是使用网格物体。显然,子弹中的网格与网格碰撞有点可疑。