Exemplo n.º 1
0
        public BulletPyhsicsReactor()
        {
            _hasFloor = true;
            var configuration = new DefaultCollisionConfiguration();
            var dispatcher    = new CollisionDispatcher(configuration);
            BroadphaseInterface broadphase = new DbvtBroadphase();
            var solver = new SequentialImpulseConstraintSolver();

            _world = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, configuration);

            Vector3 gravity;

            _world.GetGravity(out gravity);
            _gravityDirection = new Vector3(0.0f, -1.0f, 0.0f);
            _gravityStrength  = gravity.Length;
            var gravityToSet =
                _gravityDirection * gravity.Length *
                10.0f; // the world is scaled by 10, since MikuMikuDance is using 0.1m as its unit.

            _world.SetGravity(ref gravityToSet);
            CollisionShape groundShape = new StaticPlaneShape(new Vector3(0.0f, 1.0f, 0.0f), 0.0f);
            MotionState    groundState = new DefaultMotionState();
            var            info        = new RigidBodyConstructionInfo(0.0f, groundState, groundShape,
                                                                       new Vector3(0.0f, 0.0f, 0.0f));

            info.LinearDamping  = 0.0f;
            info.AngularDamping = 0.0f;
            info.Restitution    = 0.0f;
            info.Friction       = 0.265f;

            _groundRigidBody = new RigidBody(info);
            _groundRigidBody.CollisionFlags  = _groundRigidBody.CollisionFlags | CollisionFlags.KinematicObject;
            _groundRigidBody.ActivationState = ActivationState.DisableDeactivation;

            _world.AddRigidBody(_groundRigidBody);
        }