0

我使用的是 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 平面上的运动有影响吗?因此,无论摩擦力有多高,都应该始终可以抬起脚。

试图抬起左腿

4

1 回答 1

0

我通过对地板使用原始形状(btBoxShape)而不是对所有东西使用网格来解决问题。显然,子弹中的网格<->网格碰撞有点可疑。

于 2014-06-12T08:16:24.147 回答