Как заставить физический объект успокоиться?

Я использую BulletSharp, дистрибутив C# библиотеки пули. Я получаю некоторое подпрыгивание в объекте, который предположительно имеет Restitution 0.0f.

У меня есть один динамический цилиндр (который скоро станет сеткой), падающий на два статических цилиндра. Вот так:

starting object positions

Цилиндр сверху часто сильно подпрыгивает, обычно отскакивая в сторону.

Вот код I Я использую для настройки сцены:

        //now figure out bulletsharp stuff...
        CollisionConfiguration collConfig = new DefaultCollisionConfiguration();
        Dispatcher collDispatch = new CollisionDispatcher(collConfig);

        BroadphaseInterface broadphase = new DbvtBroadphase();
        ConstraintSolver sol = new SequentialImpulseConstraintSolver();
        world = new DiscreteDynamicsWorld(collDispatch, broadphase, sol, collConfig);

        world.Gravity = new Vector3(0.0f, -10.0f, 0.0f);

        //log (moving object)
        MotionState still = new DefaultMotionState();
        CylinderShape shape = new CylinderShapeZ(0.5f, 1.0f, 1.0f);
        still.WorldTransform = Matrix.Translation(0.0f, 0.4f, 0.0f);
        RigidBodyConstructionInfo constructInfo = new RigidBodyConstructionInfo(1.0f, still, shape);
        logBody = new RigidBody(constructInfo);
        logBody.SetDamping(0.04f, 0.1f);
        world.AddRigidBody(logBody);

        //rollers (static objects)
        CylinderShape r1s = new CylinderShapeZ(0.1f, 1.0f, 1.0f);
        MotionState r1m = new DefaultMotionState();
        r1m.WorldTransform = Matrix.Translation(-0.2f, -0.4f, 0.0f);
        RigidBodyConstructionInfo r1ci = new RigidBodyConstructionInfo(0.0f, r1m, r1s);
        r1 = new RigidBody(r1ci);
        world.AddRigidBody(r1);

        CylinderShape r2s = new CylinderShapeZ(0.1f, 1.0f, 1.0f);
        MotionState r2m = new DefaultMotionState();
        r2m.WorldTransform = Matrix.Translation(0.2f, -0.4f, 0.0f);
        RigidBodyConstructionInfo r2ci = new RigidBodyConstructionInfo(0.0f, r2m, r2s);
        r2 = new RigidBody(r2ci);
        world.AddRigidBody(r2);

И каждый кадр я использую world.StepSimulation(0.05f, 100, 0.0005f);для обновления симуляции физики.

Я пропустил какие-либо очевидные настройки?Почему моя симуляция делает это?

Небольшое обновление: я успешно сделал подобную симуляцию в Bullet Блендере.Там не было подпрыгивания... Я не знаю, какая разница может быть между тем и этим.

9
задан tugs 29 May 2012 в 22:26
поделиться