我使用子弹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平面上的运动产生影响?因此,无论摩擦力有多高,都应该始终抬起脚。
答案 0 :(得分:0)
我通过使用原始形状(btBoxShape)来解决问题,而不是使用网格物体。显然,子弹中的网格与网格碰撞有点可疑。